Rust-functions
Rust-機能
関数は、読み取り可能、保守可能、および再利用可能なコードの構成要素です。 関数は、特定のタスクを実行するための一連のステートメントです。 関数は、プログラムをコードの論理ブロックに編成します。 定義すると、コードにアクセスするために関数を呼び出すことができます。 これにより、コードが再利用可能になります。 さらに、関数を使用すると、プログラムのコードの読み取りと保守が簡単になります。
関数宣言は、関数の名前、戻り値の型、およびパラメーターについてコンパイラーに通知します。 関数定義は、関数の実際の本体を提供します。
Sr.No | Function & Description |
---|---|
1 |
Defining a function TA関数の定義は、特定のタスクが何をどのように行うかを指定します。 |
2 |
Calling or invoking a Function 関数を実行するには、関数を呼び出す必要があります。 |
3 |
Returning Functions 関数は、制御とともに値を呼び出し元に戻すこともできます。 |
4 |
Parameterized Function パラメータは、値を関数に渡すメカニズムです。 |
関数を定義する
関数定義は、特定のタスクの実行内容と方法を指定します。 関数を使用する前に、定義する必要があります。 関数本体には、関数によって実行されるコードが含まれています。 関数に名前を付けるための規則は、変数の規則に似ています。 関数は fn キーワードを使用して定義されます。 標準関数を定義するための構文は次のとおりです
構文
fn function_name(param1,param2..paramN) {
//function body
}
関数宣言には、オプションでパラメーター/引数を含めることができます。 パラメーターは関数に値を渡すために使用されます。
例-単純な関数定義
//Defining a function
fn fn_hello(){
println!("hello from function fn_hello ");
}
関数の呼び出し
関数を実行するには、関数を呼び出す必要があります。 このプロセスは*関数呼び出し*と呼ばれます。 関数の呼び出し時にパラメーターの値を渡す必要があります。 別の関数を呼び出す関数は、*呼び出し元関数*と呼ばれます。
構文
function_name(val1,val2,valN)
例:関数の呼び出し
fn main(){
//calling a function
fn_hello();
}
ここで、_main()_は呼び出し元関数です。
図
次の例では、関数 fn_hello() を定義しています。 この関数は、コンソールにメッセージを出力します。 main() 関数は、_fn_hello()_関数を呼び出します。
fn main(){
//calling a function
fn_hello();
}
//Defining a function
fn fn_hello(){
println!("hello from function fn_hello ");
}
出力
hello from function fn_hello
関数から値を返す
関数は、呼び出し元に制御とともに値を返すこともあります。 このような関数は、戻り関数と呼ばれます。
構文
次の構文のいずれかを使用して、戻り値の型を持つ関数を定義できます。
returnステートメント付き
//Syntax1
function function_name() -> return_type {
//statements
return value;
}
returnステートメントのない短縮構文
//Syntax2
function function_name() -> return_type {
value//no semicolon means this value is returned
}
イラストレーション
fn main(){
println!("pi value is {}",get_pi());
}
fn get_pi()->f64 {
22.0/7.0
}
出力
pi value is 3.142857142857143
パラメータ付き関数
パラメータは、値を関数に渡すメカニズムです。 パラメータは、関数の署名の一部を形成します。 パラメーター値は、呼び出し中に関数に渡されます。 明示的に指定されない限り、関数に渡される値の数は、定義されたパラメーターの数と一致する必要があります。
パラメータは、次の手法のいずれかを使用して関数に渡すことができます-
値渡し
メソッドが呼び出されると、値パラメーターごとに新しい保管場所が作成されます。 実際のパラメーターの値がそれらにコピーされます。 したがって、呼び出されたメソッド内のパラメーターに加えられた変更は、引数に影響しません。
次の例では、変数no(最初は5)を宣言しています。 変数は(値によって)パラメーターとして* _ mutate_no_to_zero()_ * functionnctionに渡され、値がゼロに変更されます。 関数呼び出しの後、制御がメインメソッドに戻ると、値は同じになります。
fn main(){
let no:i32 = 5;
mutate_no_to_zero(no);
println!("The value of no is:{}",no);
}
fn mutate_no_to_zero(mut param_no: i32) {
param_no = param_no*0;
println!("param_no value is :{}",param_no);
}
出力
param_no value is :0
The value of no is:5
参照渡し
値パラメータとは異なり、参照渡しでパラメータを渡すと、これらのパラメータに新しい格納場所は作成されません。 参照パラメータは、メソッドに提供される実際のパラメータと同じメモリ位置を表します。 パラメーター値は、変数名の前に*&*を付けることにより、参照によって渡すことができます。
以下の例では、変数_no_があります。これは最初は5です。 変数noへの参照は、 _ mutate_no_to_zero()_ 関数に渡されます。 この関数は元の変数で動作します。 関数呼び出しの後、制御がメインメソッドに戻ると、元の変数の値はゼロになります。
fn main() {
let mut no:i32 = 5;
mutate_no_to_zero(&mut no);
println!("The value of no is:{}",no);
}
fn mutate_no_to_zero(param_no:&mut i32){
*param_no = 0;//de reference
}
演算子は、変数 *param_no が指すメモリ位置に保存されている値にアクセスするために使用されます。 これは逆参照とも呼ばれます。
出力は次のようになります-
The value of no is 0.
文字列を関数に渡す
_main()_関数は、文字列オブジェクトを_display()_関数に渡します。
fn main(){
let name:String = String::from("finddevguides");
display(name);
//cannot access name after display
}
fn display(param_name:String){
println!("param_name value is :{}",param_name);
}
出力
param_name value is :finddevguides