- コピー - - 目次

rubyの制御構造


rubyの制御構造について見てみよう.既に`if'と`while'と`break' については説明した.それ以外のrubyの制御構造を解説しよう.

まず`if'修飾子と同じように`while'修飾子も存在する.


 ruby> i = 0; print i+=1, "\n" while i < 3
 1
 2
 3
 nil

複数の条件を一度に検査するためには`case'文がある.こんな感じ で使う.


 ruby> case i
 ruby| when 1, 2..5
 ruby|   print "1..5\n"
 ruby| when 6..10
 ruby|   print "6..10\n"
 ruby| end
 6..10
 nil

`2..5'は「2から5までの範囲」を表すオブジェクトを返す式である. この「範囲内かどうか」は


 (2..5) === i

の結果をもとに判断している.つまり,caseは`==='という演算子 を使った比較を一度に行う文ということになる.rubyのオブジェク ト指向機能でオブジェクトに合わせた処理が選択されるので,数だ けでなく,いろいろなデータに対して使える.例えば,


 ruby> case 'abcdef'
 ruby| when 'aaa', 'bbb'
 ruby|   print "aaa or bbb\n"
 ruby| when /def/
 ruby|   print "includes /def/\n"
 ruby| end
 includes /def/
 nil

のように文字列と文字列の比較や,文字列と正規表現との比較にも 使える.

ループから脱出するための制御構造が三つある.`break'とはC言語 と同じでループの途中から抜け出す.`next'はC言語の`continue' と同じで,ループの次の繰り返しをはじめる.rubyにはもうひとつ `redo'というものもあり,これはループの現在の繰り返しをもう一 度実行する.C言語が分かる人のためにCで記述するとこうなる.


  while (condithion) {
   label_redo:
     goto label_next        /* next */
     goto label_break       /* break */
     goto label_redo        /* redo */
     ;
     ;
   label_next:
  }
  label_break:
  ;

脱出といえば`return'がある.これが評価されると関数(メソッド) から抜ける.引数は戻り値になるが,省略されると`nil'を指定し たと見なされる.

もうひとつ`for'という繰り返しのための制御構造がある.こんな 感じで使う.


 for i in obj
  ...
 end

for文は複数の要素を持っているobjの各要素を変数iに代入して, endまでの文を順に実行する.これは後で説明するイテレータの別 形式で,そちらではこういう感じになる.


 obj.each {|i|
  ...
 }

意味は同じなんだけど,なんとなくforの方が一目でなにをやって いるか分かるような気がするだろう.forはその目的のための文だ.


- コピー - - 目次