公式サイト
関数
関数を定義するためfnキーワードにて新しい関数を定義する。
main関数は、多くのプログラムの最初に実行される関数(エントリーポイント)になる。
関数と変数の命名規則は、スネークケースを使うことが慣例になる。
サンプルコード)
fn main() {
println!("Hello, world!");
another_function();
}
fn another_function() {
println!("Another function."); // 別の関数
}
実行結果)
$ cargo run
Compiling basic_syntax v0.1.0 (/home/xxxxx/workspace/rust/xxxxx)
Finished dev [unoptimized + debuginfo] target(s) in 0.86s
Running `target/debug/basic_syntax`
Hello, world!
Another function.
引数を定義
引数を持つように定義することが可能。
関数に引数があると、実際の値を渡すことができる。
仮引数(関数内で定義している引数)と実引数(関数の呼び出しもとにて定義している引数)にて定義する必要がある。
// 例)
fn print_label( value: i32, label : char ) { }
関数は、引数を持つようにも定義できます。引数とは、関数シグニチャの一部になる特別な変数のことです。
関数に引数があると、引数の位置に実際の値を与えることができます。
技術的にはこの実際の値は 実引数と呼ばれますが、普段の会話では、仮引数(“parameter”)と実引数(“argument”)を関数定義の変数と関数呼び出し時に渡す実際の値、 両方の意味に区別なく使います
サンプルコード)
fn main() {
print_labeled_measurement(5, 'h');
}
fn print_labeled_measurement(value: i32, unit_label: char) {
println!("The measurement is: {}{}", value, unit_label);
}
実行結果)
$ cargo run
Compiling basic_syntax v0.1.0 (/home/xxxxx/workspace/rust/xxxxx)
Finished dev [unoptimized + debuginfo] target(s) in 0.14s
Running `target/debug/basic_syntax`
The measurement is: 5h
戻り値のある関数
関数を呼び出したコードに値を返すことができる。戻り値に矢印(->)の後にデータ型を宣言する。
Rustの場合、関数の戻り値は関数本体ブロックの最後の式が値になる。
returnキーワードにて関数から早期のリターンを使用して、値を使用することもできないことはない。
多くの場合は、関数の最後の式を暗黙に返す。
サンプルコード)
fn main() {
let x = plus_one(5);
println!("The value of x is: {}", x);
}
fn plus_one(x: i32) -> i32 {
x + 1
}
実行結果)
$ cargo run
Compiling basic_syntax v0.1.0 (/home/xxxxx/workspace/rust/xxxxx)
Finished dev [unoptimized + debuginfo] target(s) in 0.14s
Running `target/debug/basic_syntax`
The value of x is: 6
関数本体は、文と式を含む
Rustは式指向言語になる。
文と式とあり、違いについて公式にて説明されている。
文とは、なんらかの動作をして値を返さない命令です。 式は結果値に評価されます。
例えば、letキーワードを使用して変数に値を代入することは文になる。
fn main() {
let y = 6;
}
関数の定義についても同じく文になる。
そのため、文は値を返さない。そうなると戻り値を定義した場合は式を入れる必要がある。
※下記サンプルコードのanother_function()のx + 1を消した場合、エラーが発生する。
サンプルコード)
fn main() {
println!("Hello, world!");
let x = another_function();
println!("{}",x)
}
fn another_function()->i32 {
let x = 10;
x + 1
}
実行結果)
$ cargo run
Compiling basic_syntax v0.1.0 (/home/xxxxx/workspace/rust/xxxxx)
Finished dev [unoptimized + debuginfo] target(s) in 0.13s
Running `target/debug/basic_syntax`
Hello, world!
11
式は、文の一部になる。
新しいスコープを使用するブロック{ }も同じく式になる。
サンプルコード)
fn main() {
let y = {
let x = 3;
x + 1
};
println!("The value of y is: {}", y);
}
実行結果)
$ cargo run
Compiling basic_syntax v0.1.0 (/home/xxxxx/workspace/rust/xxxxx)
Finished dev [unoptimized + debuginfo] target(s) in 0.16s
Running `target/debug/basic_syntax`
The value of y is: 4
上記のコードlet x = 3という文は値を返さない。
また、x + 1に注意が必要になる。式は終端にセミコロンを含まない。
式の終端にセミコロンを付けたら文を変えてしまう。そして、文は値を返さない。