Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chapter 3.5 フロー制御 #7

Open
euledge opened this issue Feb 13, 2019 · 1 comment
Open

Chapter 3.5 フロー制御 #7

euledge opened this issue Feb 13, 2019 · 1 comment

Comments

@euledge
Copy link
Owner

euledge commented Feb 13, 2019

3.5.1 if 式

Rust の if 式は 下記のように 条件式を ( ) で囲まなくてもよい。

fn main () {
    let number = 3;

    if number < 5 {
        println!("condition was true");
    } else {
        println!("condition was false");
    }
}

3.5.1.2 let文内でif式を使う

if は 式なのでlet文の右辺に使用することができる。

fn main() {
    let condition = true;
    let number = if condition {
        5
    } else {
        6
    };

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

また else if で複数の条件になってもよい

fn main() {
    let condition = 5;
    let number = if condition == 1 {
        1
    } else if condition == 2 {
        2
    } else {
        3
    };

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

ただし、以下のように elseのない if 式のみはコンパイルエラーになる。
多分 if式に当てはまらないときに値が確定できないからだと思う。

    let number = if condition {
        5
    };

異なる型になるのはダメ

fn main() {
    let condition = true;
    let number = if condition {
        5
    } else {
        "six"
    };
    println!("The value of number is : {}", number)
}
euledge added a commit that referenced this issue Feb 13, 2019
@euledge
Copy link
Owner Author

euledge commented Feb 14, 2019

3.5.2 ループでの繰り返し

Rustにおける繰り返しの構文は loop, while, for の3つの構文がある。

3.5.2.1 loop でコードを繰り返す

loopは条件なしの永久ループ while(true){} と同じ、抜けるためには ブロック内で break; を使用する。

3.5.2.2 whike で条件付きループ

毎回のループ開始前に条件を判定して条件が真の間ブロックを繰り返す。

  while number != 0 {
        println!("{}!", number);

        number = number - 1;
    }

Rustにはインクリメント演算子 ++ は無いっぽい
number += 1; はOK

3.5.2.3 forを使ってコレクションを覗き見る

C++にあるような以下のfor構文は存在しない!!

for (let mut i = 0; i < 5; i = i + 1) {
  ...
}

インデクスを使用することでコレクションの範囲外にはアクセスするようなことはない。
代わりにイテレータを用いて連続でアクセスするような以下の構文で記述する

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

また、Range型 を使って指定回数ループすることもできる。
Range型は、標準ライブラリで提供される片方の数字から始まって、 もう片方の数字未満の数値を順番に生成する型

下記の例では 1,2,3 が表示される。

    for number in 1..4 {
        println!("{}!", number);
    }

逆順にする場合、以下のようにはできない。

    for number in 4..1 {
        println!("{}!", number);
    }

代わりに Range型をrev()することで実現する。

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

euledge added a commit that referenced this issue Feb 15, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant