条件分岐
基本
1 2 3 4 5 6 7 |
if 条件1 条件1に該当する処理 elsif 条件2 条件2に該当する処理 else それ以外の処理 end |
注意点としては他の言語では当たり前の「elseif」ではなく「elsif」となる点です。
unless
ifとは反対の意味で使われる「unless」があります。(なお、無理にunlessを使う必要はありません。基本的にはifでOKですが人がもしunlessを使っていた場合に意味を把握できるようにしておきましょう。)
1 2 3 4 5 |
unless 条件 条件に該当しない場合に実行したい処理 else 条件に該当する場合に実行したい処理 end |
unlessではelsifに該当するものはありません。
後置if、後置unless
if文やunless文を後方に持ってきて評価させる方法でRubyではよく見られます。
1 2 |
a = 'test' puts a if a == 'test' |
三項演算子
単純な分岐の場合は積極的に使う。
1 |
条件 ? '真だった場合の結果' : '偽だった場合の結果' |
case
1 2 3 4 5 6 7 8 |
case 対象オブジェクトや式 when 値1 値1に一致する処理 when 値2 値2に一致する処理 else どの値にも一致しない場合の処理 end |
用途としては、ifで多くのelsifを積み重ねるよりはcaseで書いた方がよりすっきり見やすくなるので使います。
値のバリエーション
単に単一の値だけでなく下記のような種類も指定できます。
Rangeオブジェクト
1 |
when (1..5) |
複数の値
1 |
when '値1','値2','値3' |
繰り返し処理
each
1 2 3 |
配列やハッシュ .each do |変数|(ハッシュの場合は|k,v|のように記述します。) #繰り返したい処理 end |
全く同じですが書き方を変えることもできます。
1 2 3 |
配列やハッシュ.each do { |変数| #繰り返したい処理 } |
times
決められた回数分だけループさせたい場合に使います。
1 2 3 |
繰り返し回数.times do |i|(iは省略可能です。) #繰り返したい処理 end |
同じように書き方を変えれます。
1 2 3 |
繰り返し回数.times { |i|(iは省略可能です。) #繰り返したい処理 } |
while
1 2 3 |
while 実行する条件 do #繰り返し実行したい処理 end |
upto
開始値から終了値まで1ずつカウントアップさせる。
1 |
開始値.upto(終了値) { |変数| 繰り返したい処理} |
downto
開始値から終了値まで1ずつカウントダウンさせる。
1 |
開始値.downto(終了値) { |変数| 繰り返したい処理} |
step
1 |
開始値.step(上限値,一度に増減する大きさ){} |
loop
1 2 3 |
loop do #繰り返し処理 end |
無限ループになるので、break等のループ内制御構文を使って制御を行いましょう。
繰り返し処理の制御構文
break
内側のループだけ脱出できます。
throw 〜 catch
多重ループになっていた際に、一気に外側に脱出するために使います。
1 2 3 4 |
catch タグ do #繰り返し処理 throw タグ end |
next
1 |
next if 条件(真なら次の繰り返し処理に進む) |
条件に合致した場合に、次の繰り返し処理に進めます。
redo
完全に初回からやり直すのでなく、現在のループの最初からやり直す場合に使います。
この記事へのコメントはありません。