今日Rubyで習得したこと[条件式としての範囲式]
:[ times ]メソッドを使って、条件式の中で用いる範囲式を書いていく。
まず、[ times ]メソッドの文法は
→ object . times { | 変数 |
実行処理1 実行処理2
end }
このメソッドの主な概要は、[ 0 ]の数値 から「objが持つ数値−1」の数値まで順に、数値を代入しながら「 { 」~「 } 」の間の処理を実行する。一回処理が実行されると同時に、変数に代入される数値は1ずつ増加する。
次に条件式の中で用いる範囲式の文法式については2つの式( ①『 . . 』,②『 . . . 』)が存在する。以下の通り。
(文法式)
① 式 1 ( 左辺 )' . . ' 式 2 ( 右辺 )
② 式 1 ( 左辺 ) ' . . . ' 式 2 ( 右辺 )
この範囲式の概要はまず、
①の場合、『 ⑴ 初期状態では式 1 だけを評価し、式 1 が真を返すまでは false を返す。 ⑵ 式 1 が真を返すと true を返す。( この時に式 2 も真ならば初期状態に戻ることになる。) ⑶ この後は式 2 だけを評価し、式 2 が真を返すまでは true を返し続ける。 ⑷ 式 2 が真を返すと時、 true を返し、初期状態に戻る。 』
②の場合については、上記①の式の⑵の ( ) の文言、処理が無くなるだけで、それ以外は一緒なので、省略します。
では、それぞれ①、②の違いを例題を用いて説明していきます。
問1) 5.times { | n |
if ( n == 2) . . ( n == 2 )
p n
end }
1 . times メソッドの原則から、変数 n に代入される数値の上限は、5−1より、4。
つまり、変数 n には[ 0 ,1 , 2 , 3 , 4 ]の数値が順番に代入され処理されていくこに
なる。
2 . まず評価される式はif文の条件式の左辺、上記範囲式の概要での式 1 にあたる式
( n == 2 )であり、数値2が代入されるまで false を返す。
3 . 式1、左辺に2が代入されるとき真となり true を返し、pが出力され、2が返り値
となる。
4. 左辺と同一の式である右辺、式2も同時に真を返すことになり true を返し、初期状
態に戻ることからここで式が終了となる。
5. よってこの式の返り値は、2である。( 式①の説明終 )
問2) 5.times { | n |
if ( n == 2) . . . ( n == 2 )
p n
end }
1. 上記1と同じく変数 n に代入される数値は[ 0 ,1 , 2 , 3 , 4 ]の数値が順番に代入
処理されていくこに なる。
2 . まず評価される式はif文の条件式の左辺、上記範囲式の概要での式 1 にあたる式
( n == 2 )であり、数値2が代入されるまで false を返す。
3 . 式1、左辺に2が代入されるとき真となり true を返し、pが出力され、2が返り値
となる。
4 . この時、上記の式①では右辺も真であれば 、初期状態になり終了していたが、
式②では、左辺の式 1 が真、true を返したあとは、右辺の式 2 だけに着目する手段
をとる。
5 . つまり原則より、右辺の式 2 が真を返すまでは、trueを返し続けるた為、n==2よ
り変数2が必要となるが、今回[ times ]メソッドを用いて処理をしていることから
上限が決められており、今回は数値4までが変数 n に代入され処理実行される。
6 . よって、原則より式 2 が真を返すまでは true を返すことにより、数値2の後にくる
数値 3 ,4 ともに真とみなされ、true が返りpメソッドが出力、処理実行されること。
7. 今回の本問における返り値は以上のことから、[ 2 , 3 , 4 ] が回答になる。