»構文はてなブックマークに追加はてなブックマークを見る

Rubyの各種構文

»条件判断構文(if, unless)

val = 1

if val == 1
  print "val == 1\n"
elsif val == 2
  print "val == 2\n"
else
  print "else\n"
end

unless val == 1
  print "val != 1\n"
else
  print "val == 1\n"
end

if val == 1 then print "val == 1\n" else print "else\n" end

実行結果

val == 1
val == 1
val == 1

»if修飾子、unless修飾子

val = 1

print "val == 1\n" if val == 1
print "val != 1\n" unless val == 1

実行結果

val == 1

»true, false

if true
  print "true\n"
end

unless false
  print "false\n"
end

val = ( 1 == 1 )

if val == true
  print "true\n"
end

実行結果

true
false
true

»if文中での代入

val = 3
if val = 1
  print "true\n"
end

実行結果

./sample.rb:5: warning: found = in conditional, should be ==
true

»条件判断構文(case)

val = 'a'

case val
  when 'a'
    print "val = a\n"
  when 'b'
    print "val = b\n"
  when 'c'
    print "val = c\n"
  else
    print "else\n"
end

実行結果

val = a

»列挙構文(for)

arr = [1, 2, 3, 4, 5]

for i in arr
  print "#{i},"
end
print "\n"

for i in 1..5
  print "#{i},"
end
print "\n"

実行結果

1,2,3,4,5,
1,2,3,4,5,

»列挙構文(ブロック付きメソッド呼出し)

arr = [1, 2, 3, 4, 5]

arr.each do |i|
  print "#{i},"
end
print "\n"

[1, 2, 3, 4, 5].each do |i|
  print "#{i},"
end
print "\n"

(1..5).each do |i|
  print "#{i},"
end
print "\n"

1.upto(5) do |i|
  print "#{i},"
end
print "\n"

1.upto(5) { |i|
  print "#{i},"
}
print "\n"

実行結果

1,2,3,4,5,
1,2,3,4,5,
1,2,3,4,5,
1,2,3,4,5,
1,2,3,4,5,

»times, downto, step

3.times do |i|
  print "#{i},"
end
print "\n"

2.downto(0) do |i|
  print "#{i},"
end
print "\n"

1.step(5, 2) do |i|
  print "#{i},"
end
print "\n"

実行結果

0,1,2,
2,1,0,
1,3,5,

»ループ構文

未整理

»ループの中断・継続

未整理

»例外構文

# x = a / b

print "a? "
a = gets
begin
  if a == nil
    raise "no input"
  else
    # String->Integer
    a = a.to_i
  end
rescue => evar
  print "invalid value (#{evar})\n"
  a = 0
else
  print "valid value\n"
ensure
  print "a = #{a}\n"
end

print "b? "
b = gets
begin
  # String->Integer
  b = b.to_i
  x = a / b
rescue ZeroDivisionError
  STDERR.print "divided by 0\n"
  x = 0
ensure
  print "b = #{b}\n"
  print "a / b = #{x}\n"
end

実行例

a? 5
valid value
a = 5
b? 0
divided by 0
b = 0
a / b = 0

»retry

a = nil
begin
  print "a? "
  a = gets.to_i

  if a < 0
    raise "negative"
  elsif a == 0
    raise "zero"
  end
rescue => evar
  print "invalid value (#{evar})\n"
  retry
ensure
  print "a = #{a}\n"
end

実行例

a? 0
invalid value (zero)
a? -5
invalid value (negative)
a? 5
a = 5

Sponsored Link