【MacでRust入門】Rust日本語版チュートリアルの要点まとめ ~ 第7回 関数
目次
こんにちは。
最近流行りのRustを初めてみよう!ということでチュートリアルを読み始めました。
内容を忘れないように & チュートリアルがTL;DRな方向けにブログ記事に要点をまとめていこうと思います。
前回はRustの変数がとりうるデータ型についてまとめました。
今回は第7回です。Rustの関数について要点をまとめます。
Rustの関数
第2回からお馴染みのfn main(){}
のような奴が関数です。
以下のような特徴があり、命名や呼び出し方はPythonと結構似てますね。
fn
で宣言開始する- 命名は小文字スネークケース(単語区切り
_
)が通例 ()
内に引数{}
内に実行するプログラム- 呼び出しは名前に
()
をつける main
関数はエントリーポイントになる(プログラムの最初に実行される)- 関数はソースコードのどこで定義されていても呼び出せる (
main
より前でもOK)
Rustの関数の引数
()
に引数を定義でき、実際の値を与えたときの値を実引数(argument)、そうでないものは仮引数(parameter)と言います。
Rustの関数宣言では、仮引数に型宣言が必須です。
複数の仮引数をもたせたい場合は,
で区切ります。
Rustの関数の本体
Rustの関数の本体は文と式です。
- 文とは、値を返さない命令のこと
- たとえば、変数宣言して値の代入するコードのこと
- 最後に
;
がつく
- 式とは、値を返す命令のこと
- たとえば、
x + 1
- 最後に
;
がつかない
- たとえば、
この「文」で終わらせるか「式」で終わらせるかが、戻り値の有無に関わります。
戻り値のある関数
式で終わると戻り値がある関数になります。
fn five() -> i32 {
5
}
->
で戻り値の型を宣言します
逆に、このように文で終わっていると関数に戻り値はありません。(文字を出力する動作はありますが。)
fn main() {
let x = five();
println!("The value of x is: {}", x);
}
five()
という戻り値のある関数で変数を初期化しています
戻り値のある関数を作りたいところで、このように文;
で終わらせるとコンパイルエラーになります。
fn main() {
let x = plus_one(5);
println!("The value of x is: {}", x);
}
fn plus_one(x: i32) -> i32 {
x + 1; // ここが式ではなく文になっていることに注目
}
エラーが出るのは戻り値がi32
型であると宣言したにも関わらず、戻り値そのものがなく型不一致が起きているためです。ミスりそ〜。
まとめ
というわけで今回はRustの関数について要点をまとめました。
fn function_name(引数1:型,引数2:型)->戻り値の型 { 式 or 文 }
で書く- 関数は呼び出し順に関わらず、プログラムのどこに書いてもいい
{}
内を式で終わらせると戻り値あり、文;
で終わらせると戻り値なし- 引数と戻り値には型注釈をつける
戻り値の有無と型注釈はコンパイルエラーを引き起こしやすそうですが、それだけRustは安全にコンパイルできるということかもです。
次回はRustの制御フロー、if式とループについてまとめます。
それでは〜
Rust オススメの参考書籍
▼ 入門者向け。Pythonとの比較あり。Kindleでも読める。
手を動かして考えればよくわかる 高効率言語 Rust 書きかた・作りかた
▼ 中級者向け。オライリーならではの詳解。硬派な方向け。
参考リンク
Rustチュートリアル (日本語版 非公式) https://doc.rust-jp.rs/book-ja/