English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
関数はRust言語で普遍的に存在します。
前の章で既にRust関数の基本的な形式を学ぶことができます:
fn <関数名> ( <パラメータ> ) <関数体>
Rustの関数名の命名スタイルは、小文字のアルファベットでアンダースコアで区切られたものです:
fn main() { println!("Hello, world!"); another_function(); } fn another_function() { println!("Hello, w3codebox!"); }
実行結果:
Hello, world! Hello, w3codebox!
注意、ソースコードのmain関数の後にanother_functionを定義しています。Rustは関数をどこで定義するかに関心を持ちません、ただ関数をどこかで定義する必要があります。
Rustで関数を定義する場合、パラメータが必要であれば、パラメータ名とタイプを宣言する必要があります:
fn main() { another_function(5, 6); } fn another_function(x: i32, y: i32) { println!("xの值为: {}", x); println!("yの值为: {}", y); }
実行結果:
xの值为 : 5 yの值为 : 6
Rustの関数体は、式(Expression)で終わる可能な一連の文(Statement)で構成されています。今までに見た関数はすべて式で終わっていませんが、式は文の一部として使用されています。
文は特定の操作を実行するステップであり、戻り値を持たない。例えば:
let a = 6;
このステップは戻り値を持たないため、以下の文は正しくありません:
let a = (let b = 2);
計算ステップがあり、戻り値がある式があります。以下は式(仮に識別子が定義されていると仮定)です:
a= 7 b + 2 c * (a + b)
Rustでは{}で括られたブロックの中で複雑な式を書くことができます:
fn main() { let x = 5; let y = let x = 3; x + 1 }; println!("xの值为: {}", x); println!("yの值为: {}", y); }
実行結果:
xの值为 : 5 yの值为 : 4
明らかに、このプログラムには式ブロックが含まれています:
{ let x = 3; x + 1 };
ブロックの中で関数文を使用することができます。最後の手順は式です。この式の結果値は、その式ブロックが表す全体の値です。この式ブロックは関数体式と呼ばれます。
注意:x + 1 後ろにセミコロンがなく、そうでないとそれは一文になります!
この表达式ブロックは合法な関数体です。さらに、Rustでは関数の定義はネスト可能です:
fn main() { fn five() -> i32 { 5 } println!("five()の值为: {}", five()); }
前のネストされた例では、Rust関数の宣言に返し値の型を指定する方法が示されました:パラメータの宣言の後に ->を使って関数の返し値の型を宣言します(:ではありません)。
関数体の中で、returnキーワードを使って関数の実行を終了し、適切な型の値を返すことができます。これは、多くの開発者の経験に最も近い方法です:
fn add(a: i32, b: i32) -> i32 { return a + b; }
しかしRustは自動的な返し値の型の判定をサポートしていません!関数の返し値の型が明示的に宣言されていない場合、関数は「純プロセス」と見なされ、返し値を生成することは許可されず、returnの後には返し値の式は使えません。この目的は、公開された関数が明確な報告を形成できるようにすることです。
注意:関数体式は関数体と同じではありません。使用できません return キーワード。