Ruby – 繰り返し処理

繰り返し処理の種類

for~要素を取り出して処理する

Rangeオブジェクトを使った繰り返し処理。".."演算子は両端の値を含む。

"..."演算子は終了値を含まない。

配列の内容を一つずつ取り出す例。

times~回数を指定する処理

timesは繰り返し回数を指定して実行。

繰り返しのカウンターを指定できる。カウンターはゼロからスタートし、指定回数-1までカウントされる。

upto/downto~カウントアップ/ダウン

uptoは初期値から終了値までを含んでカウントアップ。downtoは逆にカウントダウン。カウンターを省略しても可。

step~刻み幅を指定

[初期値].step([終了値], [刻み幅])で実行。

終了値がちょうどでない場合はその手前まで実行される。

ただし浮動小数点の計算誤差があり得るので、ちょっと気持ち悪い。

each~要素を一つずつ取り出す

eachforと同じくコレクションの要素を順に取り出す。

hashはキーと値を取り出せる。

each_with_index~要素番号も取得

each_with_indexはコレクションから要素を取り出しながら、そのインデックスも得られる。Pythonのenumerateと同じ機能。

while~条件が真の間繰り返し

whileは条件が真の間ブロックを繰り返す。

whilebeginendブロックの後に置ける。上記の前置の場合は条件によってはブロックは一度も実行されないが、後置の場合は少なくとも1回は実行される。

until~条件が真になるまで繰り返し

untilwhileと逆で条件が偽の間繰り返し、真になったらループ終了。whileと同様、ブロックの前/後どちらに置いてもよい。

loop~無限ループ

loopは単にブロックを繰り返す。ループの終了判定が必要。

繰り返し制御

break~ループを終了

breakは実行中のループブロックを終了する。

next~残りを飛ばして続ける

nextはそれ以下の実行をせず、ループの次のステップに入る。他言語のcontinueと同じ。

以下の例ではn==2のときだけprintが実行されず、次のn=3の処理に入る。

redo~同じ条件で再実行

redoは現在のループと同じ条件で再度実行する(ループの次のステップではなく同じステップを再実行)。

この例では、n==2の時に"2 - C"を表示。その後n==3となってredoが実行され、a=="C"のままputsから実行、"3 - C"が表示されている。

次の例はすこしややこしい。

この例ではeachn=1とセットされて"1"が表示される。その後n==2となるのでredoが実行され、n==2のままprintが実行されて"2"が表示。その後n==3になるので次のeachに移り、n==2がセットされる。このn("2")を表示した後、n==3となるのでredoは実行されず・・・と続く。

 

コメントを残す

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