この章ではnextについて説明します。
nextはループの中で、ある条件下に当てはまった時に現在の周回を抜けて、次の周回のループに行動を移します。
nextはbreakのようにループ自体を止めることはしません。
では例をみてみましょう。 aが5になったらnextを実行し、5になっていなければ以下の文を実行して、またブロックの先頭に戻ります。 nextとは現在の周回を抜けて、次の周回のループに行動が移ると言う意味を持っていますので、aと5が同じになったら「カウント5は5」を出力することなく、先頭に戻ってループを続けます。5だけが抜けていますが、ループ自体は止まっていないことを確認してください。
結果は以下の通りです。
カテゴリー: Ruby
loop doとbreakについて知ろう
この章では無限に繰り返しを行うloopについて説明します。
loop doはそのまま何も条件付けを行わないと無限に中身を繰り返します(whileみたいに条件判断する箇所がありません)。
条件づけにはifなどを使うのですが、その中でbreakを指定します。
breakとはループを強制的に終了させる意味を持っています。
では例を見てみましょう。 aが5になったらbreakを実行します。
aが5になっていなければif文は実行しませんのでを実行して、の箇所でaに1を足します。
そしてまたloop doの先頭に戻ります。
breakとはループを強制的に終了させる意味を持っていますので、aと5がイコールになったらループを抜けます。
breakで抜けた後は、それ以降の文は実行されません。
結果は「猫」を5回出力させます。
次の例ではeachの中でbreakを使っています。 この例ではaが5になったらbreakするので、5は出力しません。
結果は以下の通りです。 このようにbreak文はeach,while,until,forなどの繰り返し文の中で「ある条件」に当てはまった時に、その繰り返し文を終了させるために使用します。
「ある条件」とはこの例の場合にはです。
その他の繰り返し文について知ろう
配列の章でも説明しましたがも繰り返し文の一種です。
配列の章で書いた例をもう一度載せておきますので復習してみてください。 このように書くことで配列のすべての要素を繰り返し取り出してくれます。
結果は以下の通りです。 単純に繰り返し回数を指定して、処理を繰り返す場合にはtimesメソッドが便利です。 〇「繰り返す回数」に浮動小数点数は使用できません。
〇「変数」は省略できます。
では例をみてみましょう。 もしくは次のように書くことも出来ます。 では説明をしていきます。 =>繰り返す回数に3を指定したので3回 猫を出力します。
基本構文にある変数は省略していますが、その場合にはprint文を回数分だけ繰り返すだけです。 =>繰り返す回数に3を指定したので、0から3回繰り返します。
変数iには1からではなく0から順番に数値が代入されるので注意してください。
結果は次の通りです。
次はuptoについて説明します。
では例をみてみましょう。 この構文はaの値からbの値まで1回繰り返すごとに1を足していきます。
aはbより大きい値を指定できませんので注意してください。
また、aとbには浮動小数点数は使用できません。
例の意味は1から始まって、「繰り返し1」が出力し終えたら、1を足して「繰り返し2」を出力し、これを「繰り返し5」まで繰り返します。
結果は以下の通りです。 次のように変数を省略して書くと以下のようになります。
この場合にはprint文を5回繰り返すだけです。 結果は以下の通りです。
次はdowntoについて説明します。
では例をみてみましょう。 この構文はaの値からbの値まで1回のループごとに1を引いていきます。
aはbより小さい値を指定できませんので注意してください。
また、aとbには浮動小数点数は使用できません。
この例の意味は5から始まって、「繰り返し5」が出力し終えたら、1を引いて「繰り返し4」を出力し、これを「繰り返し1」になるまで繰り返します。
結果は以下の通りです。
次は1回ループするごとに、指定した値を足していく構文について説明します。
では例をみてみましょう。 aからbに達するまで,一回ループするごとにcを足します。
cがプラスの値の場合はaはbより小さいことが必要です。
cがマイナスの値の場合はaはbより大きいことが必要です。
cが省略された場合は1となります。
浮動小数点数も指定できます。
では例の説明をしていきます。 =>2から始まって、ループごとに2を足して10になったら繰り返し文を終えます。 =>基本構文のcの箇所を省略した場合は1ずつ足されていきます。
結果は以下の通りです。 stepに関してもう一例あげます。 初めのstep文は20からループごとに5ずつ引いていって10になったらループを終えます。
次のstep文は浮動小数点数を指定している例です。
1.4から8.9まで、2.5を足しながら繰り返します。
結果は以下の通りです。
untilについて知ろう
この章ではuntil文について説明します。
untilもwhileと同じく繰り返しを行う場面で使用されます。
untilは実行される時に条件式がtrueもしくはfalseであるのかをチェックします。
falseである場合はuntilの処理文が実行されます。
trueである場合には処理文は実行されません。
whileは条件式がtrueの場合に中身が実行されるので、違いを確認してください。
では例をみてみましょう。 until文の構文は以下の通りです。 では実行の手順について説明します。
① numに1を入れます。goukeiに0を入れます。
num>3がfalseなので、繰り返し文を実行します。
② goukei +=numが実行されます。
これはと同じ意味なのでと計算され、1がgoukeiに代入されます。
③ num +=1の箇所でと計算され numには2が代入されます。
④先頭に戻ってを評価しますが、まだnumは2でfalseなので、繰り返し文は実行されます。
⑤ goukei +=numが実行されます。
これはと計算され、3がgoukeiに代入されます。
⑥ num +=1はと計算され、numには3が代入されます。
⑦先頭に戻ってを評価しますが、まだnumは3でfalseなので、繰り返し文は実行されます。
⑧ goukei +=numが実行されます。
これはと計算され、6がgoukeiに代入されます。
⑨ num +=1は
と計算されnumには4が代入されます。
⑩先頭に戻ってを評価しますが、
ここでnumは4でtrueになり繰り返し文は終了します。
⑪最後にを実行して、6を出力します。
これをwhileを使って書き替えると次のようになります。 「while !(num> 3)」のようにwhileと条件式の間に否定の演算子「!」を付けるとuntilを使ったのと同じ意味になります。
次はuntil装飾子について説明します。
until装飾子とはuntil条件文 を末尾に書く形式のことを言います。 条件式がfalseの間は繰り返し文が実行されます。
では例をみてみましょう。 numを出力してから、untilの条件式の判定に入るので結果は1から4までを出力します。
結果は以下の通りです。
自動計算プログラムを作ろう
この章では5問の計算式を表示させ、それに対して答えを入力させます。
そして、正解数を表示して、終わりになります。 では先頭から説明していきます。 ここではカラの配列を作成しています。
answerにはユーザーが入力した答えが入ります。
resultには正解値が入ります。
後からこれらの配列には5つのデータがそれぞれの配列に入ります。
次に以下の箇所の説明をします。
randメソッドについては説明済みですが、0から50までの数値をランダムに生成します。 次に以下の箇所の説明をします。 ここでは計算式の表示をしています。
つまり、以下の計算式の表示を行います。
whileで5回ループしているので、計算式も5つ表示されます。 次に以下の箇所の説明をします。
説明済みですが、この箇所はとgetsメソッドを使って、入力値を整数値に変換しています。 answerにはユーザーが入力した答えが以下の順序で入ります。
resultには正解値が以下の順序で入っています。 次の箇所では入力値と正解値を比べて、trueであればrightanwerに1が足されていきます。
このif文はwhile文の中に入っていますので、5回の答え合わせを行います。 以下の箇所で正解数を出力して終了です。
while文について知ろう
この章ではwhile文について説明します。
while文はfor文と同じく、何度も繰り返すような処理を必要とする時に使用します。
では例をみてみましょう。 while文の構文は以下の通りです。 〇 doは省略可能です。
初めにwhileが実行される時に条件式がtrueもしくはfalseなのかをチェックします。trueである場合はwhileが実行されます。
falseである場合はwhileは実行されません。
では実際の動きを見てみましょう。
① numに0を代入します。
②条件式(num<3)をチェックした結果、trueなので繰り返し文を実行し、で 0を出力します。
③ num +=1の箇所で0であったnumに1を足して、1にします。
④それからまたwhileの先頭に戻って条件式を評価します。
条件式をチェックした結果、numは3以下でtrueなのでを実行して1を出力します。
⑤ num +=1の箇所で1であったnumに1を足して、2にします。
⑥それからまたwhileの先頭に戻って条件式を評価します。
条件式をチェックした結果、numは3以下でtrueなのでを実行して2を出力します。
⑦ num +=1の箇所で2であったnumに1を足して、3にします。
⑧それからまたwhileの先頭に戻って条件式を評価します。
条件式をチェックした結果、numは3以下ではないので、falseになりwhile文が終了になります。
結果は以下の通りです。
次はwhile装飾子について説明します。
while装飾子はを末尾に書く形式のことを言います。 では例をみてみましょう。 numを出力してから、whileの条件式の判定に入るので結果は1から6までを出力します。
結果は以下の通りです。
for文について知ろう
この章では繰り返し構文について説明します。
同じような処理を何度も繰り返すプログラムを書く場合、以下のように同じ処理を何回も書くのは面倒ですし、間違いも多くなりがちです。 そこでforという構文を使うと繰り返し文を簡潔に書くことが出来ます。
for文の構文は以下の通りです。 「オブジェクト」には範囲オブジェクトや配列オブジェクトやハッシュオブジェクトを指定します。
これまで説明してきた範囲演算子は範囲オブジェクトに属しています。
では例をみてみましょう。 この例では1から始まって、その数値がの中のaにセットされ、最後にで出力します。
次は2がのaにセットされ、で出力します。
次は3がのaにセットされ、で出力します。
次は4がのaにセットされ、で出力します。
図にすると以下のような順序で出力されます。 次はfor文を使って配列の要素を出力する例です。 配列の要素の1個1個がaに代入されて、printで出力しています。 結果は以下の通りです。 次はfor文を使ってハッシュの要素を出力する例です。 =>ハッシュの場合にはfor文の中の変数は2つ使用します。
forの中のaとbにはが入り,が順番に入ります。 結果は以下の通りです。
if文で占いを作ろう
この章では今まで説明してきたif文と配列を使って、占いプログラムを作ります。
では例をみてみましょう。 resultは大吉から大凶までの要素を持つ配列になっています。
answerには0から6までのランダムな数が入ります。
ランダムな数を得るにはrandメソッドを使います(メソッドの意味については「メソッドについて知ろう」の章で説明します)。 整数値を入力した場合には0からまでの乱数値を生成します。
0もしくは何も入力しない場合は0以上 1未満の乱数値を生成します。
この例のrand(7)であれば0から6までの乱数値を生成します(7までではありません)。
rand(6)+1であれば1から6までの乱数値を生成します。
乱数を得た後はif文で判定を行います。
例えば乱数が0であればという条件式になるので、「大吉です」が出力されます。
結果は以下の通り、毎回違う値が出力されます。 これをcase..when文で書き換えると以下のようになります(先頭の2行は省略)。
caseについて知ろう
この章ではcase文について説明します。
case文はif文と同じ機能があります。
では例をみてみましょう。 この基本構文の意味は対象のオブジェクトが値 1であるならば実行文1を、対象のオブジェクトが値2であるならば実行文2を、その他は実行文 3を実行すると言う意味です。
この例の結果は以下の通りです。 先ほどのcase文をif文で書き換えると以下の通りです。 whenの後の値はのように複数書いても問題ありませんが、その場合にはカンマで区切ってください。
では例をみてみましょう。
animal の値のと以下のwhenの条件部分が一致しますのでが実行されます。 結果は以下の通りです。 では次の例を見てみましょう。 この例は配列のすべての要素に対して、その要素がどの範疇にあるのかをcase文でチェックしています。
配列の要素が1つずつiにセットされ、その値がどの場所に収まっているかをwhenで確認しています。
each doについては配列の章で説明しましたので、忘れた方は見直してください。
「1..30」の間に「..」がありますが、これを範囲演算子といいます。
範囲演算子はと言う形式で書きますので、この例では1から30までという意味になります。
文字列で書く場合はという構文で書きます。
例えばと、書きます。
結果は以下の通りです。 範囲の作成方法は他にもあり、以下の構文で書くことが出来ます。これはRangeクラスのオブジェクトですが、クラスについては「クラスについて知ろう」で説明します。 exclude_endをtrueで指定すると終端の数値を含みません。つまり、と書きますと30は含まれません。
では例をみてみましょう。 結果は以下の通りです。