公式サイト

 

関数

関数を定義するためfnキーワードにて新しい関数を定義する。
main関数は、多くのプログラムの最初に実行される関数(エントリーポイント)になる。
関数と変数の命名規則は、スネークケースを使うことが慣例になる。

サンプルコード)

fn main() {
    println!("Hello, world!");

    another_function();
}

fn another_function() {
    println!("Another function.");  // 別の関数
}

実行結果)

$ cargo run
   Compiling basic_syntax v0.1.0 (/home/xxxxx/workspace/rust/xxxxx)
    Finished dev [unoptimized + debuginfo] target(s) in 0.86s
     Running `target/debug/basic_syntax`
Hello, world!
Another function.

引数を定義

引数を持つように定義することが可能。
関数に引数があると、実際の値を渡すことができる。
仮引数(関数内で定義している引数)と実引数(関数の呼び出しもとにて定義している引数)にて定義する必要がある。

// 例)
fn print_label( value: i32, label : char ) { }

関数は、引数を持つようにも定義できます。引数とは、関数シグニチャの一部になる特別な変数のことです。
関数に引数があると、引数の位置に実際の値を与えることができます。
技術的にはこの実際の値は 実引数と呼ばれますが、普段の会話では、仮引数(“parameter”)と実引数(“argument”)を関数定義の変数と関数呼び出し時に渡す実際の値、 両方の意味に区別なく使います

サンプルコード)

fn main() {
    print_labeled_measurement(5, 'h');
}

fn print_labeled_measurement(value: i32, unit_label: char) {
    println!("The measurement is: {}{}", value, unit_label);
}

実行結果)

$ cargo run
   Compiling basic_syntax v0.1.0 (/home/xxxxx/workspace/rust/xxxxx)
    Finished dev [unoptimized + debuginfo] target(s) in 0.14s
     Running `target/debug/basic_syntax`
The measurement is: 5h

戻り値のある関数
関数を呼び出したコードに値を返すことができる。戻り値に矢印(->)の後にデータ型を宣言する。
Rustの場合、関数の戻り値は関数本体ブロックの最後の式が値になる。
returnキーワードにて関数から早期のリターンを使用して、値を使用することもできないことはない。
多くの場合は、関数の最後の式を暗黙に返す。

サンプルコード)

fn main() {
    let x = plus_one(5);

    println!("The value of x is: {}", x);
}

fn plus_one(x: i32) -> i32 {
    x + 1
}

実行結果)

$ cargo run
   Compiling basic_syntax v0.1.0 (/home/xxxxx/workspace/rust/xxxxx)
    Finished dev [unoptimized + debuginfo] target(s) in 0.14s
     Running `target/debug/basic_syntax`
The value of x is: 6

関数本体は、文と式を含む

Rustは式指向言語になる。
文と式とあり、違いについて公式にて説明されている。

文とは、なんらかの動作をして値を返さない命令です。 式は結果値に評価されます。

例えば、letキーワードを使用して変数に値を代入することは文になる。

fn main() {
    let y = 6;
}

関数の定義についても同じく文になる。
そのため、文は値を返さない。そうなると戻り値を定義した場合は式を入れる必要がある。
※下記サンプルコードのanother_function()のx + 1を消した場合、エラーが発生する。
サンプルコード)

fn main() {
    println!("Hello, world!");

    let x = another_function();
    println!("{}",x)
}

fn another_function()->i32 {
    let x = 10;
    x + 1
}

実行結果)

$ cargo run
   Compiling basic_syntax v0.1.0 (/home/xxxxx/workspace/rust/xxxxx)
    Finished dev [unoptimized + debuginfo] target(s) in 0.13s
     Running `target/debug/basic_syntax`
Hello, world!
11

式は、文の一部になる。
新しいスコープを使用するブロック{ }も同じく式になる。
サンプルコード)

fn main() {
    let y = {
        let x = 3;
        x + 1
    };

    println!("The value of y is: {}", y);
}

実行結果)

$ cargo run
   Compiling basic_syntax v0.1.0 (/home/xxxxx/workspace/rust/xxxxx)
    Finished dev [unoptimized + debuginfo] target(s) in 0.16s
     Running `target/debug/basic_syntax`
The value of y is: 4

上記のコードlet x = 3という文は値を返さない。
また、x + 1に注意が必要になる。式は終端にセミコロンを含まない。
式の終端にセミコロンを付けたら文を変えてしまう。そして、文は値を返さない。

广告
将在 10 秒后关闭
bannerAds