Part7:繰り返し

マル「Rubyの繰り返しの書き方・・・いっぱいあって、ちょっとくじけそうだったずら」
ルビィ「マ、マルちゃんがくじけそうって・・・」
ヨハネ「どんだけよ・・・」


while

マル「whileは、ある条件式が真になっている間繰り返しを続ける構文ずら」

0
1
2

マル「こんな感じで、iが3未満の間ループするんだな」
ルビィ「最初は0だから真、次は1だから真、次は2だからやっぱり真、3になったら偽になるから出力されずに終わるんだね」
ヨハネ「まあ、覚えてしまえば難しいことはないわね」


until

マル「untilwhileの逆で、条件式が偽になっている間ループするずら」

0
1
2

ルビィ「これだと、最初は0だから3より小さくて、1、2ときて3になったら3以上だから真になって終わるんだね」
ヨハネ「同じことが書けるとなると、whileとの使い分けね」
マル「直感的に分かりやすい方を選べばいいと思うな。この例だったらwhileの方がなんかしっくりくるし」
ルビィ「『この場合はunitlを使わなければならない』みたいなのはないんだね」
マル「コーディング規約とかで決められてたらその限りじゃないけどな」


loop

マル「loopは無限ループ用の構文ずら」

0
1
2

マル「条件なしに繰り返し続けるから、止めるには後で説明するbreakが必要なんだな」


times/upto/downto

マル「これはちょっと今までとは感じが違うんだ」

0
1
2

ルビィ「わ、なんか面白い書き方だね」
マル「3回繰り返す、っていうのがわかりやすい書き方だと思うずら」
ヨハネ「このiってどうなってるのかしら」
マル「0から始まって、毎回1ずつ増えた値が渡されてくるずら。だから自分で数字増やしてやる必要がないんだ」

マル「0からじゃ不便なときもあるし、増えるんじゃなくて減らしたいときもあるから、uptoとかdowntoも用意されてるずら」

2
3
4
5

5
4
3
2

ヨハネ「なるほど便利そうじゃない」
マル「Rubyのループはwhileとかよりこの書き方の方が多く使われるみたいだな」


step

マル「steptimesとかの少し応用で、数字の増加を1ずつじゃなくて自由に決められるずら」

4
6
8
10

マル「4から10まで、間隔2でループしてるな」
ルビィ「ほんとに、いろんな書き方があるんだね」


break/next/redo

マル「breakは、loopのところで少し出てきたけどループを抜ける命令ずら」
ルビィ「loop以外でも使えるの?」
マル「ここまでで説明した繰り返し構文には全部使えるな」

マル「nextは、ループは抜けないけどその回の実行を終了して次に進む命令、ちょっとわかりにくいかな」

るび
まる
るび
るび
まる

マル「ループ2週目でnextが実行されるけど、そうするとその次のputs "まる"は実行されずに次のループに進むずら」
ルビィ「それで、るび、まる、るび、るび、まる・・・と」

マル「それからredoっていうのがあって」

るび
まる
るび
るび
まる
るび
まる

マル「nextと似てるけど、次のループに進むんじゃなくて現在のループを最初からやり直すんだ」


式修飾子

マル「最後は、ifとかunlessでもあった式修飾子」

マル「これは」

マル「これと全く同じだな」
ルビィ「whileの前の式を繰り返すんだね」
マル「whileの他にuntilでも同じことができるずら」


マル「こんな感じでたくさんあるけど、まずはwhileを扱えるようになればほとんどのループは実装できるずら。ただ、既存コード読む場合はtimesとかuptoとかはたくさん出てくるな」


LINEで送る
Pocket


返信を残す

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