Rust

【Rust】第2章第4回:関数の引数と戻り値:データの受け渡し方法

本記事では、Rustの関数における引数の受け渡し方法や戻り値の扱いについて詳しく解説します。関数を効果的に使いこなすことで、コードの再利用性や可読性を向上させることができます。

0. 記事の概要

この記事を読むメリット

  • Rustの関数の引数の受け渡し方法を理解: 値渡し、参照渡し、可変参照の違いを学べます。
  • 戻り値の適切な活用: データを効率よく関数間で受け渡す方法を学べます。
  • エラーを防ぐ: 借用チェックエラーや所有権の移動による問題を回避する知識を得られます。

この記事で学べること

  • 関数の引数を渡す方法(値渡し、参照渡し、可変参照)
  • 関数の戻り値の使い方
  • 所有権とライフタイムの関係

1. Rustの関数の引数

1.1 値渡し

Rustではデフォルトで値渡しが行われ、関数に渡したデータのコピーが作成されます。

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

fn main() {
    let result = add(5, 3);
    println!("5 + 3 = {}", result);
}

動作解説

このコードでは、関数addに2つの整数を渡し、それらの合計を戻り値として返しています。

2. 参照渡しと可変参照

2.1 参照渡し(借用)

関数にデータを渡す際、所有権を移動せずに借用することができます。

fn print_length(s: &String) {
    println!("文字列の長さ: {}", s.len());
}

fn main() {
    let text = String::from("Hello, Rust!");
    print_length(&text);
}

動作解説

関数print_length&Stringを受け取り、所有権を変更せずに長さを取得しています。

3. 戻り値の活用

3.1 戻り値の基本

関数の戻り値を使うことで、計算結果を呼び出し元へ返すことができます。

fn square(x: i32) -> i32 {
    x * x
}

fn main() {
    let result = square(4);
    println!("4の二乗は {}", result);
}

動作解説

関数squareは引数の二乗を計算し、その値を戻り値として返しています。

4. よくあるエラーと対処法

  • 「mismatched types」エラー: 関数の戻り値の型が異なる場合に発生。戻り値の型を正しく指定する。
  • 「cannot borrow as mutable」エラー: 可変参照を正しく扱わなかった場合に発生。&mutを適切に使用する。

5. まとめ

本記事では、Rustの関数における引数の受け渡し方法と戻り値の扱いについて解説しました。次回は、Rustのクロージャ(Closure)の使い方と応用について詳しく学びます。