[C 50 pter 3-4]Rust制御文if,loop,while,for



if

fn main() {
    let number = 6;

    if number % 4 == 0 {
        println!("number is divisible by 4");
    } else if number % 3 == 0 {
        println!("number is divisible by 3");
    } else if number % 2 == 0 {
        println!("number is divisible by 2");
    } else {
        println!("number is not divisible by 4, 3, or 2");
    }
}
if  キーワードから始まり、条件です.選択的に  else ifelse  式を含めることができます.上のコードには4つのパスがあります.多すぎる  else ifフォーマットの使用はコードを理解しにくい.そのため,後述する第6章では  match  強力なブランチ作成者を使用します.
別の例を見てみましょう.
fn main() {
    let number = 3;

    if number {
        println!("number was three");
    }
}위의 예시 코드는 에러가 발생하게 됩니다.
上記のサンプルコードでは、エラーが発生します.
error[E0308]: mismatched types
 --> src/main.rs:4:8
  |
4 |     if number {
  |        ^^^^^^ expected bool, found integral variable
  |
  = note: expected type `bool`
             found type `{integer}`
RustはBooleanタイプを期待していましたが整数型が来ました他の言語と異なりRUSTはbooleanタイプ以外をbooleanタイプとする 自動変換しません.
数値が0でない場合に上記のコードを実行する場合は、次のように変更できます.
fn main() {
    let number = 3;

    if number != 0 {
        println!("number was something other than zero");
    }
}

let構文でifを使用する

ifは式であるため、let構文の右側に使用することができる.
fn main() {
    let condition = true;
    let number = if condition {
        5
    } else {
        6
    };

    println!("The value of number is: {}", number);
}
上のコードを実行します.  number  if  数式  5バインド.
別の例を見てみましょう.
fn main() {
    let condition = true;

    let number = if condition {
        5
    } else {
        "six"
    };

    println!("The value of number is: {}", number);
}
error[E0308]: if and else have incompatible types
 --> src/main.rs:4:18
  |
4 |       let number = if condition {
  |  __________________^
5 | |         5
6 | |     } else {
7 | |         "six"
8 | |     };
  | |_____^ expected integral variable, found reference
  |
  = note: expected type `{integer}`
             found type `&str`
以上のコードでエラーが発生したのは,ifブロックが整数を生成し,elseブロックが文字列を生成したためである.このような状況が成立しないのは,変数が1つのタイプしか持たないからである.コンパイル時、RUSTはnumber変数のタイプを正確に定義しなければならない.RUSTは、実行時にnumberタイプを定義できません.

繰り返しと繰り返し


loop:コードの繰り返し

fn main() {
    loop {
        println!("again!");
    }
}
上のコードはプログラムを強制停止する前に  again!  重複出力が表示されます.ほとんどの端末はキーボードショートカットCtrl+Cで停止できます.loop  コード内  break  キーワードを追加してループを停止できます.

while:条件繰返し

fn main() {
    let mut number = 3;

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

        number = number - 1;
    }

    println!("LIFTOFF!!!");
}

for:繰り返し集合

fn main() {
    let a = [10, 20, 30, 40, 50];

    for element in a.iter() {
        println!("the value is: {}", element);
    }
}
$ cargo run
   Compiling loops v0.1.0 (file:///projects/loops)
    Finished dev [unoptimized + debuginfo] target(s) in 0.32 secs
     Running `target/debug/loops`
the value is: 10
the value is: 20
the value is: 30
the value is: 40
the value is: 50
for反復文を使用するために、通常、RUSTによって提供されるRangeは、マスターライブラリとともに使用される.Rangeは、1つの数字から別の数字までのすべての数字を生成します.
fn main() {
    for number in (1..4).rev() {
        println!("{}!", number);
    }
    println!("LIFTOFF!!!");
}
3!
2!
1!
LIFTOFF!!!