【MacでRust入門】Rust日本語版チュートリアルの要点まとめ ~ 第8回 if式、loop、whileループ、forループ

2022-09-04
Main Image

目次

こんにちは。

最近流行りのRustを初めてみよう!ということでチュートリアルを読み始めました。

内容を忘れないように & チュートリアルがTL;DRな方向けにブログ記事に要点をまとめていこうと思います。

前回はRustの関数についてまとめました。

今回は第8回です。Rustのif式とループについて要点をまとめます。

Rust のif式

if式は他の言語にもあるように、条件分岐を書く基本的な方法です。

let number = 3;
if number < 5 {
    println!("condition was true");
} else {
    println!("condition was false");
}
  • if 条件式 {trueの場合に実行する式} else {falseの場合に実行する式}の形式で書く
  • 条件式はbool型でなければならない (自動でbool変換はされない)
  • else以降は省略可能で、その場合条件式がfalseだと処理が飛ばされて次のコードの処理に進む
  • 複数の条件を扱うときは elseの代わりにelse if 条件式を使う。
    • 上から順番に評価して、最初に条件式がtrueになったときの処理が実行される (残りの条件式はチェックしない)
  • あまりに条件が多い場合はif elseではなくmatchを使う

matchについては第4回でも少し触れましたが、後の記事でまとめる予定です。

Rustのif式を使い、条件分岐でlet変数を定義する

Rustのifは式であるため、let文の右辺で使えます。

let number = if x>3 { 5 } else { 6 };

xが3より大きいなら5, そうでないなら6といったような条件分岐で変数を定義することができます。

ただし、numberの型が複数取りうる形で書くとエラーになるので、if elseのどのブロックの結果も同じ型になるようにする必要があります。

Rustのループでの繰り返しを書く方法

最も基本的なループは以下のように書きます。無限ループになるので、xtrl + Cで止めましょう。

loop {
    println!("Hello!");
}
  • loop{}で囲んだ中身が繰り返し実行される
  • breakでループを終了する
  • continueでループ内の残りの処理をスキップして、次のループ処理を始める
  • breakcontinueは最も内側のループに適用される
  • ループラベルを使ってbreakcontinueの適用するループを指定できる

breakcontinueの実例は第4回の数あてゲームで使っています。

Rustのループラベルを使う方法

ループラベルの例は以下のようになります。

let mut count = 0;
'counting_up: loop {
    println!("count = {}", count);
    let mut remaining = 10;
    loop {
        println!("remaining = {}", remaining);
        if remaining == 9 { break; }
        if count == 2 { break 'counting_up; }
        remaining -= 1;
    }
    count += 1;
}
println!("End count = {}", count);

counting_upというラベルがついたloopの中にもう一つのloopがあります。

  • if remaining==9は何もラベルがついていないので、最も内側のループを抜けます。
  • if count==2'coounting_upというラベルがついているので、外側のループを抜けます。

Rustのwhileで条件付きループ

loopではループ中に条件式とbreakなどを書いてループを終了させましたが、whileを使うと先にループする条件を定義できます。

以下はカウントダウンの例です。

let mut number = 3;
while number != 0 {
    println!("{}!", number);
    number -= 1;
}
println!("FIRE!!!");

出力

3!
2!
1!
FIRE!!!

条件式がtrueの間はループ処理が実行され続け、falseになったらループ終了します。他の言語でも同じような文法がありますね。

Rustのforループを使う方法

配列の各要素に対して処理を行いたい場合、whileでは条件式に要素数(配列の長さ)を指定する必要があるので、要素数が可変の場合、条件設定が複雑でミスる可能性があります。

そこでforループを使うことで各要素への処理を簡潔に書けます。これで要素数を数える必要がなくなります。

let a = [10, 20, 30, 40, 50];
for element in a {
    println!("the value is: {}", element);
}

カウントダウン動作もwhileよりforループを使ったほうが簡潔・安全に書くことができます。

for number in (1..4).rev() {
    println!("{}!", number);
}
println!("FIRE!!!");
  • (開始..終了)のようにRange型を使うと、「開始〜終了未満」の範囲の配列を作れます
  • 配列のrevメソッドは範囲を逆順にします

動作はwhileの所で書いたコードと同じですが、かなり簡潔に書けました。

まとめ

というわけで、今回はRustの制御フローとしてif式、ループ、whileループ、forループをまとめました。

  • if 条件式 {trueのとき} else {falseのとき}で条件分岐
  • loop{}でループ処理し、ループの中にさらにループ処理を書ける
  • breakcontinueとループラベルを使うと指定した階層のループを抜けられる
  • while 条件式{}より簡潔・安全に書けるforループで書くことを検討する

次回はRustの「所有権」という概念についてまとめていきます。

それでは〜

Rust オススメの参考書籍

▼ 入門者向け。Pythonとの比較あり。Kindleでも読める。

手を動かして考えればよくわかる 高効率言語 Rust 書きかた・作りかた

▼ 中級者向け。オライリーならではの詳解。硬派な方向け。

プログラミングRust 第2版

参考リンク

Rustチュートリアル (日本語版 非公式) https://doc.rust-jp.rs/book-ja/

ads【オススメ】未経験からプログラマーへ転職できる【GEEK JOBキャンプ】
▼ Amazonオススメ商品
ディスプレイライト デスクライト BenQ ScreenBar モニター掛け式
スマートLEDフロアライト 間接照明 Alexa/Google Home対応

Author

Penta

都内で働くITエンジニアもどき。好きなものは音楽・健康・貯金・シンプルでミニマルな暮らし。AWSクラウドやデータサイエンスを勉強中。学んだことや体験談をのんびり書いてます。TypeScript / Next.js / React / Python / AWS / インデックス投資 / 高配当株投資 More profile

Location : Tokyo, JPN

Contact : Twitter@penguinchord

Recommended Posts

Copy Right / Penguin Chord, ペンギンコード (penguinchord.com) 2022 / Twitter@penguinchord