Ruby Users' Guide - rubyの制御構造

前 - コピー - 次 - 目次

### 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はその目的のための文だ．

前 - コピー - 次 - 目次