【Rust】Rust ~ 関数 / クロージャ ~

◾️はじめに

Rust の 本を見ていて、関数 / クロージャが乗っていて
特に、クロージャは、見慣れないので、まとめておいた方がいいと
思ったので、メモしておく

目次

【1】関数
 1)構文
 2)サンプル
 3)補足:Rustの「&」
【2】クロージャ
 1)構文
 2)サンプル

【1】関数

https://doc.rust-jp.rs/rust-by-example-ja/fn.html

1)構文

//  fn: 関数ポインタ
fn <関数名>(<変数1>: <データ型1>, ...) -> <戻り値のデータ型> {
   ...
}

2)サンプル

fn main() {
    let value1 = is_divisible_by(10, 2); // true
    let value2 = is_divisible_by(10, 3); // false
    println!("{}", value1); // true
    println!("{}", value2); // false

    let name1 = "Mike";
    let name2 = "Nancy";
    say_hello(name1);
    say_hello(name2);
}

// name: str だとエラー「error[E0277]: the size for values of type `str` cannot be known at compilation time」
fn say_hello(name: &str) {
    println!("Hello, {}!", name);
}

// Function that returns a boolean value
// ブーリアン型を返す関数
fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
    // Corner case, early return
    // 例外的な引数を受けた場合、早めに返す。
    if rhs == 0 {
        return false;
    }

    // This is an expression, the `return` keyword is not necessary here
    // これは式であり、`return`キーワードは必要ではない。
    lhs % rhs == 0
}

3)補足:Rustの「&」

* 参照のこと
 => リソースの所有権を借用すること
 => 詳細は、以下の関連記事を参照のこと

Rust ~ 保有権 ~
https://dk521123.hatenablog.com/entry/2023/05/04/213726

【2】クロージャ

* その場で定義できる小さな関数
 => って言っても、ピンと来ないので、以下を参照

https://doc.rust-jp.rs/rust-by-example-ja/fn/closures.html

// ここがクロージャ(関数を変数 add として定義)
let add = |a, b| a + b;

println!("{}", add(2, 3)); // 5

1)構文

<変数> = |引数| { ...処理... }

2)サンプル

let outer_var = 42;
let closure_annotated = |i: i32| -> i32 { i + outer_var };
rintln!("closure_annotated: {}", closure_annotated(1));

let one = || 1;
println!("closure returning one: {}", one());

関連記事

Rust ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/22/234808
Rust ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2025/11/26/224648
Rust ~ 保有権 ~
https://dk521123.hatenablog.com/entry/2023/05/04/213726
Rust ~ mod ~
https://dk521123.hatenablog.com/entry/2025/11/29/221911