百鬼夜行

素性を知られぬままエンジニアになることを目指します

「The Book」で Rust 入門 3 後半

前回のあらすじ

yagyosan.hatenablog.com

関数

関数について見ていく

  • エントリーポイント: プログラム実行時に最初に走る関数
  • fn で新しい関数を作ることができる

関数の引数

  • 引数: 関数のシグニチャ?の一部となる特別な変数
  • 正確には仮引数("parameter")と実引数("argument")がある
  • Rusyでは仮引数の型を宣言しなければならない

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

  • 関数本体は、文が並び、最後に式か文を置くという形で形成される
  • Rustは式指向性
  • 文: なんらかの動作をして値を返さない命令
  • 式: 結果値に評価されるもの(数値, 数学演算, 関数呼び出しなど)
  • 文はCとRubyのように代入値を返さない
  • 式はブロックの中で文末に;がつかないもの
fn main() {
    let x = 5;

    let y = {
        let x = 3;
        x + 1
    };

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

戻り値のある関数

  • 関数を呼び出したコードに値を返せる
  • 関数の戻り値は、関数本体ブロックの最後の式の値と同義
  • returnキーワードで「早期リターン」することもできる
  • 関数名() のあとに -> と型を書いて宣言する
  • エラー文に表示される()はタプルを表す
fn five() -> i32 {
    5
}

fn main() {
    let x = five();

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

コメント

フロー制御

ifとループ制御について

if式

  • if式の条件式と紐付けられる一連のコードは「アーム」と呼ばれることがある(match式のように)
  • 論理値以外を入れるとコンパイルエラーになる
  • else if と組み合わせることもできるが、コードがめちゃくちゃになることもあるのでmatch式が有用
  • ifは式なのでlet文の右辺に持ってくることも可能
  • 変数は単独の型でなければならないため、各アームの結果になる値は同じ型にする

ループでの繰り返し

loopwhilefor がある。

loopでコードを繰り返す

  • 明示的にやめさせるまで永遠に繰り返す
  • break でやめさせることができる

whileで条件付きループ

  • whileキーワードの後に条件を書く
  • loopifelsebreakを組み合わせても同じようなことができる

forでコレクションを覗き見る

  • 添字を使う場合、長さを間違える可能性もある
  • コレクションの各アイテムに対してコードを実行できる
  • インクリメント/ デクリメントしてwhileを使うよりもforRange型を組み合わせル方が良い
fn main() {
    let a = [10, 20, 30, 40, 50];

    for element in a.iter() {
        // 値は{}です
        println!("the value is: {}", element);
    }
}

Range型の例

fn main() {
    for number in (1..4).rev() {
        println!("{}!", number);
    }
    println!("LIFTOFF!!!");
}

とりあえず3章はこれで終わりで、最後のセクションにあったプログラムを別記事でやってみる。