Rustで関数を定義する方法|引数と返り値の基本

先生

Rustの関数定義は意外とシンプル!引数と返り値をしっかり理解して、君も安全なコードを書けるエンジニアに!

Rustにおける関数の基本

Rustでプログラムを作成する上で、関数は非常に重要な要素です。関数は、特定のタスクを実行するコードのまとまりであり、プログラムをより構造化し、再利用可能にするために使用されます。この記事では、Rustで関数を定義する方法、引数の扱い、返り値の指定について詳しく解説します。

Rustの関数はfnキーワードを使って定義します。基本的な構文は次のとおりです。

fn 関数名(引数1: 型1, 引数2: 型2) -> 返り値の型 { 
 // 関数の処理
 返り値
}

例えば、2つの数値を足し合わせる関数は次のように定義できます。

fn add(x: i32, y: i32) -> i32 {
 x + y
}

この例では、addという名前の関数を定義し、xyという2つのi32型の引数を受け取り、i32型の値を返します。

関数はmain関数から呼び出すことができます。

fn main() {
 let result = add(5, 3);
 println!("Result: {}", result); // Output: Result: 8
}

引数とデータ型

Rustでは、関数に渡す引数には型を指定する必要があります。これにより、コンパイラは型安全性を保証し、予期せぬエラーを防ぐことができます。

複数の引数を渡す場合は、カンマで区切って指定します。それぞれの引数に対して、名前と型を明示的に記述する必要があります。

fn print_details(name: String, age: i32) {
 println!("Name: {}, Age: {}", name, age);
}

この例では、print_details関数はString型のnamei32型のageという2つの引数を受け取ります。

Rustは静的型付け言語であるため、関数の定義時に引数の型を決定する必要があります。型推論が可能な場合もありますが、明示的に型を指定することが推奨されます。

返り値の指定

関数が値を返す場合、->記号を使って返り値の型を指定します。返り値がない場合は、-> ()または何も指定しないことで、ユニット型(unit type)を返すことを意味します。

fn greet(name: &str) -> String {
 format!("Hello, {}!", name)
}

この例では、greet関数は&str型のname引数を受け取り、String型の値を返します。format!マクロは、文字列をフォーマットして新しいStringを作成します。

Rustでは、関数の最後の式が自動的に返り値となります。returnキーワードを使用することもできますが、省略するのが一般的です。

fn square(x: i32) -> i32 {
 x * x // return x * x; と同じ
}

この例では、square関数はx * xの結果を返します。

値を返さない関数は、以下のように定義します。

fn print_message(message: &str) {
 println!("{}", message);
}

参考リンク

まとめ

この記事では、Rustで関数を定義する方法、引数と返り値の指定について解説しました。関数は、Rustプログラミングにおいて不可欠な要素であり、プログラムの構造化と再利用性を高めるために重要な役割を果たします。関数の定義、引数の型指定、返り値の型指定を理解することで、より効率的で安全なRustプログラムを作成することができます。様々な関数を定義して、Rustの関数について理解を深めていきましょう。