Rust 関数の書き方

RustRustBeginner
今すぐ練習

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/ControlStructuresGroup(["Control Structures"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/DataTypesGroup -.-> rust/boolean_type("Boolean Type") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/ControlStructuresGroup -.-> rust/for_loop("for Loop") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/integer_types -.-> lab-99320{{"Rust 関数の書き方"}} rust/boolean_type -.-> lab-99320{{"Rust 関数の書き方"}} rust/string_type -.-> lab-99320{{"Rust 関数の書き方"}} rust/for_loop -.-> lab-99320{{"Rust 関数の書き方"}} rust/function_syntax -.-> lab-99320{{"Rust 関数の書き方"}} rust/expressions_statements -.-> lab-99320{{"Rust 関数の書き方"}} rust/lifetime_specifiers -.-> lab-99320{{"Rust 関数の書き方"}} rust/operator_overloading -.-> lab-99320{{"Rust 関数の書き方"}} end

関数

関数は 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でさらに多くの実験を行って、技術力を向上させましょう。