続行しますか?
内容
1.式
Rustでは、ほとんどすべてのステートメント(ステートメント)も式です。つまり、何らかの結果を返すことができます。 この動作は必ずしも必要ではないため、何も返さないでください; add ; 最後まで。
ブロック内の式はr-valuesとして使用でき、後者はl-valueとして割り当てられます 。
* ここで読む右辺値と左辺値とは何ですか。
ただし、ブロック内の最後の式がセミコロンでダウンロードされた場合、結果は空のタプル()に等しくなります。
fn main() { let x = 5u; let y = { let x_squared = x * x; let x_cube = x_squared * x; // `y` x_cube + x_squared + x }; let z = { // , // , `z` `()` 2 * x; }; println!("x is {}", x); println!("y is {}", y); println!("z is {}", z); }
2.分岐演算子
if-else
はCに似ています。 Cとは異なり、論理条件は括弧で囲むべきではなく、各条件の後に中括弧が必要です。
if-else
も式です。 また、Rustのタイプセーフのため、すべてのブランチは同じタイプの値を返す必要があります。
fn main() { let n = 5i; if n < 0 { print!("{} is negative", n); } else if n > 0 { print!("{} is positive", n); } else { print!("{} is zero", n); } let big_n = if n < 10 && n > -10 { println!(", and is a small number, increase ten-fold"); // `int` 10 * n } else { println!(", and is a big number, reduce by two"); // `int` n / 2 // ^ }; println!("{} -> {}", n, big_n); }
3.ループ
Rustキーワード
loop
は、無限ループを作成します。
break
ステートメントを使用すると、ループをいつでも終了できますが、
continue
は残りの反復をスキップして、実行を再開します。
fn main() { let mut count = 0u; println!("Let's count until infinity!"); // loop { count += 1; if count == 3 { println!("three"); // continue; } println!("{}", count); if count == 5 { println!("OK, that's enough"); // break; } } }
3.1ネストとタグ
ループはネストできます。 このような場合、ラベル
'label
含める必要があり、
break/continue
ステートメントはこのラベルで記述されます。
fn main() { 'outer: loop { println!("Entered the outer loop"); 'inner: loop { println!("Entered the inner loop"); // //break; // break 'outer; } println!("This point will never be reached"); } println!("Exited the outer loop"); }
4. whileループ
whileの条件がtrueの間、ループの本体が実行されます。
while
を使用してfizzbuzzを書きましょう。
fn main() { // let mut n = 1u; // `n` 101 while n < 101 { if n % 15 == 0 { println!("fizzbuzz"); } else if n % 3 == 0 { println!("fizz"); } else if n % 5 == 0 { println!("buzz"); } else { println!("{}", n); } // n += 1; } }
5. forループおよび範囲関数
for in
構文を使用して、
Iterator
と遅延ジェネレーターを反復処理できます(これについては後で説明します)。
range
関数は、最も一般的な反復子の1つです。
range(a, b)
は
range(a, b)
からb-1までの値を生成し、ステップを1つずつ変更します。
whileの代わりに
for
を使用
for
てfizzbuzzを書きましょう。
fn main() { // `n` : 1, 2, ..., 100 for n in range(1u, 101) { if n % 15 == 0 { println!("fizzbuzz"); } else if n % 3 == 0 { println!("fizz"); } else if n % 5 == 0 { println!("buzz"); } else { println!("{}", n); } } }
6.機能
関数は、 fnキーワードを使用して宣言されます。 引数には、変数などの型で注釈が付けられます。 また、関数が値を返す場合、矢印->の後に戻り値の型を指定する必要があります。
関数の本体の最後の式が戻り値として使用されます。または、
return
を使用して、内部ループや条件ステートメントからでも、関数から値を早期に
return
ことができます。
関数を使用してfizzbuzzを書き換える!
// , fn is_divisible_by(lhs: uint, rhs: uint) -> bool { // , if rhs == 0 { return false; } // , `return` lhs % rhs == 0 } // , , `()` fn fizzbuzz(n: uint) -> () { if is_divisible_by(n, 15) { println!("fizzbuzz"); } else if is_divisible_by(n, 3) { println!("fizz"); } else if is_divisible_by(n, 5) { println!("buzz"); } else { println!("{}", n); } } // `()`, fn fizzbuzz_to(n: uint) { for n in range(1, n + 1) { fizzbuzz(n); } } fn main() { fizzbuzz_to(100); }
6.1未使用の関数
コンパイラは、未使用の関数を警告する
dead_code
lintを提供します。 属性
#[allow(dead_code)]
を追加して、通知を無効にすることができます。
fn used_function() {} // `#[allow(dead_code)]` , `dead_code` #[allow(dead_code)] fn unused_function() {} fn noisy_unused_function() {} // ^ , fn main() { used_function(); }
実際のプログラムでは、「デッドコード」を排除する必要があることに注意してください。 これらの例では、デモンストレーションに使用します。
おわりに
この言語の詳細については、グーグルグループRust in Russianに参加してください。
Githubで翻訳を支援できます: github.com/eg0r/rust-by-example
すべてのコメント、エラー、または不正確なものをメールで送信してください。