次は、関数です。
命名規則
まずは、関数の命名規則ですが、スネークケースを使っており、全文字を小文字にし、単語区切りは、アンダースコアを使います。
引数
サンプルを見るのが一番なので、以下となります。
fn main() {
another_function(5);
}fn another_function(x: i32) {
println!("The value of x is: {}", x); // xの値は{}です
}
注意するところとしては、仮引数(関数を定義する側の引数)は、型を宣言しなければなりません。
文と式
こういう考え方があるのは知らんかったです。
- 文とは、なんらかの動作をして値を返さない命令です。
- 式は結果値に評価されます。ちょっと例を眺めてみましょう。
戻り値のある関数
この考え方もめすらしいのでは。
関数は、それを呼び出したコードに値を返すことができます。→のあとに型を書いて宣言します。関数の戻り値ですが、returnを使わずに関数本体のブロックの最後の式の値で戻り値を指定することもできます。
fn five() -> i32 {
5
}fn main() {
let x = five();println!("The value of x is: {}", x);
}
また、こんな例もあります。
・うまくいく場合
fn main() {
let x = plus_one(5);println!("The value of x is: {}", x);
}fn plus_one(x: i32) -> i32 {
x + 1
}
・だめな場合
fn main() {
let x = plus_one(5);println!("The value of x is: {}", x);
}fn plus_one(x: i32) -> i32 {
x + 1;
}
違うところがどこかというと、関数の中のx+1のセミコロンがあるかないかです。なぜ、セミコロンがある場合がエラーとなるかというとセミコロンがあると文になってしまい、戻り値を返さず、関数の→でi32と型を宣言しているのに、型がちがうとエラーがでます。
Rustの関数の戻り値は、なかなか癖があって覚えにくいかもしれません