[Rust学習] 反復文 (for , while)

2024年3月29日

Rust プログラミング 学習

eyecatch 今から9年前に自分が書いたブログ記事で、「どんなプログラム言語でも覚える時にの共通習得仕様:15項目」というのがあったのを思い出しました。 参考 : https://blog.myntinc.com/2015/06/15.html 新しくプログラミング言語を学習したいと考えた人は、是非参考にしてみてください。 ということで、今回はRust言語の反復文をコーディングしてみたいと思います。

for

プログラムの反復の基本であるfor文について、基本形を書いてみます。

for.rs : 10までの数値のインクリメント

fn main(){ for i in 0..10{ println!("{}",i); } } これをコンパイルしてみると・・・ $ rustc for.rs $ ./for 0 1 2 3 4 5 6 7 8 9 あれ?そうです、プログラミングの基本ですね。 for(i=0; i<10; i++){...} これと同じ内容になるようです。 ちなみに、i<=10としたい場合は次のように書きます。 fn main(){ for i in 0..=10{ println!("{}",i); } } 見えている数値で扱ったほうが確認作業等が楽になるかもしれませんが、適宜使い分けるのがいいでしょう。

配列対応

javascriptでおなじみの配列に対しての記述も簡単にできます。 fn main(){ let arr = ["apple","banana","orange"]; for i in arr{ println!("{}", i); } } コンパイル&実行 apple banana orange さほど難しくないですね。

while

書き方によっては効率の良い反復記述のwhileも、書いておきたいと思います。

white.rs : 3の倍数と3の付く数字でアホになる処理

fn main(){ println!("3の倍数と3がつく数値でアホになる"); let mut num: i32 = 1; while num <= 40{ let str = num.to_string(); if num % 3 == 0{ println!("{} アホ! (multiple)", num); } else if str.matches("3").count() > 0{ println!("{} アホ! (with 3)", num); } else{ println!("{}", num); } num += 1; } } 実行 $ rustc while.rs $ ./while 3の倍数と3がつく数値でアホになる 1 2 3 アホ! (multiple) 4 5 6 アホ! (multiple) 7 8 9 アホ! (multiple) 10 11 12 アホ! (multiple) 13 アホ! (with 3) 14 15 アホ! (multiple) 16 17 18 アホ! (multiple) 19 20 21 アホ! (multiple) 22 23 アホ! (with 3) 24 アホ! (multiple) 25 26 27 アホ! (multiple) 28 29 30 アホ! (multiple) 31 アホ! (with 3) 32 アホ! (with 3) 33 アホ! (multiple) 34 アホ! (with 3) 35 アホ! (with 3) 36 アホ! (multiple) 37 アホ! (with 3) 38 アホ! (with 3) 39 アホ! (multiple) 40 う〜ん、マーヴェラス!! 数値と文字列の変換、文字を含む判定などがミソですな。

loop

Rustには、他の言語には無いloopという反復処理があります。 これはwhileと同じですが、whileよりも若干だけ高速になるようです。(リファレンスページ記述)

loop.rs : 3を英語表示して5の時にループから抜ける

fn main() { let mut count = 0u32; println!("Let's count until infinity!"); // Infinite loop // 無限ループ loop { count += 1; if count == 3 { println!("three"); // Skip the rest of this iteration // 残りの処理をスキップ continue; } println!("{}", count); if count == 5 { println!("OK, that's enough"); // Exit this loop // ループを抜ける。 break; } } } 実行 $ rustc loop.rs $ ./loop Let's count until infinity! 1 2 three 4 5 OK, that's enough

解説

break;を必ずセットしないと無限ループ一直線です。 continue;も、他の言語と同じ様に使えます。 whileとの違いは、毎回の条件チェックが行われずに、loop内で独自に処理をしてbreakするという事で、continue;を使うほど処理が軽減されるという事ですね。

あとがき

今回は、反復文についての基本をなぞってみました。 中で、型だったり、配列などに関する、まだ踏み込んでいない内容もありましたが、今後の学習過程に入ったら深く追求していくので、今回は、反復の箇所だけ理解できたらOKでしょう。 ※自分にあめ〜な〜。

参考ページ

https://doc.rust-jp.rs/rust-by-example-ja/flow_control/for.html

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。