1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rustの基本文法(関数)

Posted at

公式サイト

関数

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

💡 Rustのコンパイラはどこで定義されているかは気にしない。どこかで定義されているかを気にする。

サンプルコード)

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に注意が必要になる。式は終端にセミコロンを含まない。
式の終端にセミコロンを付けたら文を変えてしまう。そして、文は値を返さない。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?