Rust 関数の書き方

Beginner

This tutorial is from open-source community. Access the source code

はじめに

この実験では、Rust で関数を書く方法を学びます。関数は fn キーワードを使って宣言され、その引数には型注釈が付けられます。返却型が必要な場合は、矢印 -> の後に指定します。関数内の最後の式が返却値となりますが、return 文を使ってより早く値を返すこともできます。この実験では、関数を使って FizzBuzz プログラムを書き直す例を示し、ブール値を返す関数、単位型 () を返す関数、および返却型が指定されていない関数の使い方を示します。

注: 実験でファイル名が指定されていない場合は、好きなファイル名を使うことができます。たとえば、main.rs を使って、rustc main.rs &&./main でコンパイルして実行することができます。

関数

関数は fn キーワードを使って宣言されます。その引数には、変数と同じように型注釈が付けられ、関数が値を返す場合、返却型は矢印 -> の後に指定する必要があります。

関数内の最後の式が返却値として使われます。あるいは、return 文を使って、関数内のループや if 文の中からでも、より早く値を返すことができます。

関数を使って FizzBuzz を書き直してみましょう!

// C/C++ とは異なり、関数定義の順序に制限はありません
fn main() {
    // ここでこの関数を使うことができ、後で定義することもできます
    fizzbuzz_to(100);
}

// ブール値を返す関数
fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
    // 端数ケース、早期返却
    if rhs == 0 {
        return false;
    }

    // これは式であり、ここでは `return` キーワードは必要ありません
    lhs % rhs == 0
}

// 値を返さない関数は、実際には単位型 `()` を返します
fn fizzbuzz(n: u32) -> () {
    if is_divisible_by(n, 15) {
        println!("fizzbuzz");
    } else if is_divisible_by(n, 3) {
        println!("fizz");
    } else if is_divisible_by(n, 5) {
        println!("buzz");
    } else {
        println!("{}", n);
    }
}

// 関数が `()` を返す場合、シグネチャから返却型を省略できます
fn fizzbuzz_to(n: u32) {
    for n in 1..=n {
        fizzbuzz(n);
    }
}

まとめ

おめでとうございます!関数の実験を完了しました。LabEx でさらに多くの実験を行って、技術力を向上させましょう。