tswi's dev

動くものが正しいものだ

Rubyの学習(第4回)

条件分岐(case)

case文は以下のように書く。"then"は省略可能。
なお、Javaのように各分岐箇所にbreakを入れる必要はない。

i = 2
case
when i == 1 then
  puts "case1"
when i == 2
  puts "case2"
when i == 3
  puts "case3"
else
  puts "case else"
end
#=> case2

別の書き方も可能。

case 8
when 1,2,3
  puts "is 1,2,3"
when 4,5,6
  puts "is 4,5,6"
when 7,8,9
  puts "is 7,8,9"
else
  puts "case else"
end
#=> is 7,8,9

改行しない省略表記。

case 8
when 1..3 : puts "is 1-3"
when 4..6 : puts "is 4-6"
else puts "nothing"
end
#=> nothing

ループ(while)

以下のように書く。"do"は省略可能。

i = 0
while i < 3 do
  puts i
  i += 1
end
#=> 0
#=> 1
#=> 2

条件式が成立しない場合にループさせる構文もある。

i = 3
until i < 1
  puts i
  i -= 1
end
#=> 3
#=> 2
#=> 1

for

以下のように書く。"do"は省略可能。

for str in ["a", "b", "c"] do
  puts str
end
#=> a
#=> b
#=> c

カウンタを使用することもできる。

for i in (1..4)
  puts i
end
#=> 1
#=> 2
#=> 3
#=> 4

イテレータ

Rubyでは、whileやfor以外の繰り返し処理がいくつかある。

  • times
    • 一定回数の繰り返しに利用する
  • each
    • オブジェクトを1つずつ取り出す
  • loop
    • ループを終了する命令があるまで繰り返し処理を続ける
# times
3.times do |num|
  puts num
end
#=> 0
#=> 1
#=> 2

# do-endは{}で代替することもできる
3.times { |num|
  puts num
}
#=> 0
#=> 1
#=> 2

# each
array = ["abc", "def", "ghi"]
array.each do |addr|
  puts addr
end
#=> abc
#=> def
#=> ghi

# loop
# break等でループから抜けない限り繰り返しを続ける
loop do
  puts "in loop"
  break
end
#=> in loop

なお、繰り返しの制御命令として以下がある。

  • break
    • 繰り返しから抜ける
  • next
    • 処理を中断し、次の繰り返しまで飛ぶ
  • redo
    • 同じ繰り返し処理を再実行する


簡潔さは相変わらず。
徐々に面白くなってきた。