無限ループ文。
成果物
コード
fn main() { // loop { println!("無限ループ! 端末次第だがCtrl+Cキーで終了するだろう。"); } let mut count = 0; loop { println!("loop num {}.", count); count += 1; if 9 < count { break; } } }
loop
loop
は無限ループさせるコード。おそらくbreak
文を入れて使うことになる。
C言語ならwhile(1) {}
, for(;;) {}
で実装していた。Rustならloop {}
でOK。このほうが自然言語的で読みやすい。
インクリメント
ちなみに、インクリメントcount++
はできない。Rustではcount += 1
とするしかない。
++の動作が本質的に「変数を操作する」ものであるため,変数がオブジェクトでないRubyでは導入できない
Scalaでも同様らしい。
では、Rustにはなぜ実装されていないのか。おなじ? それともオブジェクトだけど基本的にイミュータブルであるべきだから? またはlet v = ++i;
とlet v = i++;
で実行順が違うためv
の値に違いが出てバグになりやすいから?
i++;
単独でのみ実行できるようにして代入させないようにすれば……と思ったけど、そこまでして導入しても中途半端だし無駄に冗長になる。たかがi++;
をi+=1;
にして1文字(スペース入れたら3文字)を節約するためだけに、そこまで構文解析を実装するのは費用対効果が低い?
実行
$ rustc main.rs $ ./main loop num 0. loop num 1. loop num 2. loop num 3. loop num 4. loop num 5. loop num 6. loop num 7. loop num 8. loop num 9.
参考
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
$ uname -a Linux raspberrypi 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux
前回まで
- Rustを学んでみたい(プログラミング言語)
- Rustの環境構築
- RustでHelloWorld
- Rustの和訳ドキュメント
- Cargoでプロジェクト作成・ビルド・実行
- クレートとは?
- Rustで関数を使ってみる
- Rustでモジュールを使ってみる
- Rustで乱数を生成する(rand)
- Rustで標準入力する(std::io::stdin().read_line())
- RustでMatch判定する(match)
- Rustでprintとread_lineを1行にする方法
- Rustで数当てゲーム
- クレート名にドット.が使えない
- Rustの変数と可変性(let, mut) error[E0384]: cannot assign twice to immutable variable
x
- Rustのimmutable束縛とconst定数の違い
- RustのREPL、evcxrのインストールに失敗した
- Rustでコンパイルするときの変数未使用warningを消す
- Rustの変数(再代入、再宣言(シャドーイング))
- Rustのシャドーイングについて
- イミュータブルについて(副作用)
- Rustの定数(const)
- Rustのデータ型(数値)
- Rustのデータ型(論理)
- Rustのデータ型(文字)
- Rustのデータ型(タプル)
- Rustのデータ型(配列)
- Rustの関数
- Rustのif式