雑多なブログ

音楽や語学、プログラム関連の話題について書いています

rust: 関数定義

関数定義の基本的な構文について学習した。

基本構文

fn 関数名([引数: 引数の型, ]) [-> 戻り値の型] {
    関数本体
}

例1)
最後に計算された式の結果が返り値となる。

fn hello_world(name: String) -> String {
    // 以降の行に処理がない場合は、末尾にセミコロンは付けずに式だけ記述する
    format!("Hello {}!", name)
}

戻り値が () ユニットの場合は、戻り値の型指定を省略可能。
C言語などのvoidのようなものか?

例2)

fn hello_world(name: String) {
    println!("{}", name);
}

例3) 戻り値として () ユニットを返すのではなく、本当に値を返さない関数は、
戻り値のところに ! をつける。このような関数を発散する関数と呼ぶ。
発散する関数は呼び出し元に制御を返さない。

fn end_func() -> ! {
    std::process::exit(0);
}