今日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 ] が回答になる。