言語編 |
以下のもののいずれかを使って自分のDartコードのフローを制御できる:
ifとelse
forループ
whileとdo-whileループ
breakとcontinue
switchとcase
assert
また次章の「例外」で示されているようにtry-catchとthrowを使って制御フローに作用させることができる。
Dartは次のサンプルに示してあるように、オプショナルなelse文を持ったif文に対応している。また「条件式」の項も参照のこと。
|
JavaScriptと違って、条件はブール値を使わねばならない、それ以外の手段はない。更なる詳細は「組込み型」の章の「ブール値」の節を参照のこと。
標準のforループを使って繰り返しができる。例えば:
|
Dartのforループ内のクロージャたちはインデックスの値を捕捉し、JavaScriptで一般的に起こす落とし穴を回避している。例えば以下のコードを考えてみよう:
|
期待した通り出力は0、次に1となる。しかしJavaScriptは初めに2、次に2を表示する。
自分が繰り返させているオブジェクトがIterable型のときは、forEach()メソッドが使える。もし現在の繰り返しカウンタを知る必要がない場合はforEach()を使うのは良い選択肢である:
|
ListとSetのようなIterableクラスはまた繰り返しのfor-in書式が使える:
|
whileループはループの前に条件を計算する:
|
do-whileループはそのループの後に条件を計算する:
|
ループ中を停止するにはbreakを使う:
|
次のループの繰り返しにスキップするにはcontinueを使う:
|
もしリストやセットのようなIterableを使っているときは、この例は別の書き方ができる:
|
Dartに於けるswitch文は整数、文字列、あるいはコンパイル時常数たちを==を使って比較する。比較されたオブジェクトたちの総てが同じクラス(そしてその副型のどれでも無い)のインスタンスでなければならず、そのクラスは==をオーバライドしてはならない。列挙型はswitch文で良く機能する。
注意:Dartのswitch文はインタープリタやスキャナのような限られた環境の中で使われることを意図している。
非空のcase句は通例break文で終了する。非空のcase句を終了させる他の有効な手段はcontinue、throw或いはreturn文である。
マッチするcase句がないときコードを実行させるときはdefault句を使用する:
|
以下の例ではcase句の中のbreak文をオミットしているので、エラーを生成している:
|
しかしながら、Dartは空のcase句に対応していて、フォールスルーの形式を許している:
|
もし本当にフォールスルーが欲しいのなら、continue文とラベルを使うことができる:
|
case句はローカル変数を持てるが、それはその句のスコープ内でのみ可視である。
もしブール条件がfalseのときに通常の実行を中断させる為にassert文を使用する。この解説の至る所でassert文の例を見てきた筈である。以下は更に幾つかの例を示す:
|
注意:assert文は運用用のコードでは効果を持たない;これらは開発段階のみの為のものである。Flutterはデバッグ・モードでのassertを可能としている。dartdevcのような開発専用のツールは一般的にデフォルトでassertに対応している。dartとdart2jsのような一部のツールではコマンド行フラグ: --enable-assertsを介してassertに対応している:
あるメッセージをassertに付すには、第2引数として文字列を付加する。
|
assertの最初の引数はブール値に計算されるどの式もなり得る。もしこの式の値がtrueのときはこのアサーションは成功しており、実行が継続される。もしfalseの時は、このアサーションは失敗しており、例外(AssertionError)がスローされる。