スポンサーリンク

Rustやってみる(4)分岐や反復など

ループ

fn main() {
  for x in 1..=9{
    for y in 1..=9{
        print!("{} ",x*y);
    }
    println!("");
  }
}
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81

なんとRustのforにはCのforのようにカウンタを使う記述法がない。その手のものが必要な時はwhileを使う。さらにRustにはインクリメント演算子++がない。+=はあるのでそれを使う。

なぜ++がないのかよくわからないが、コンパイラが進化した今inc命令とadd命令をプログラマが区別する必要はないのでそのために言語仕様を複雑にする必要はないとかそんな感じではないだろうか(適当)。

fn main() {
  let mut k = 0;// 変数はデフォルトで変更不可なのでmutをつける
  while k < 10{
    println!("k=={}",k);
    k+=1; // Rustには++がない
  }

}

分岐

if

ifはCとかなり近い。ただし()で囲う必要がない。

fn main()  {

  let k = 3;

  if k == 1{
    println!("k==1");
  }
  else if k==2{
    println!("k==2");
  }
  else{
    println!("other k");
  }

}

特に違うものとして、Cの三項演算子に該当するものがifで表記するようになっている。

fn main()  {

  let k = 2;

  let msg = if k%2!=0 {"odd"}else{"even"};
 
  println!("{}",msg);
 
}

match

いろいろとCのswitchに近いがbreakしないところが特に違う。あとカンマ区切り。

fn main()  {

  let i = 2;

  // switchに近い。
  // ただし、matchの中で、「取りうるすべての可能性について」処理する必要がある
  match i{

    // Cと違いbreakしなくてもいい。ほかの式が実行されることはない
    3 => println!("three"),

    // 複数の指揮を実行するときは{}で括る
    4 => {
      println!("four");
      println!("FOUR")
    },

    // 取りうるすべての可能性を記述しなければいけないため
    // ワイルドカード _ を使ってCのdefaultと同じことをする。
    _ => println!("others"),
  };
 
}

matchの結果をそのまま変数に渡すこともできる。

fn main()  {

  let i = 3;

  let msg:&str =   match i{

    3 => "three",

    4 => "four",

    _ => "others",
  };

  println!("{}",msg);

}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: