Ruby의 조건문과 반복문에 대해 알아봅니다.

조건문

if / else

s1 = 'Jonathan'
s2 = 'Jonathan'
s3 = s1

if s1 == s2
  puts 'Both Strings have identical content'
else
  puts 'Both Strings do not have identical content'
end

elsif

if name == 'Satish'
  puts 'What a nice name!!'
elsif name == 'Sunil'
  puts 'Another nice name!'
end

unless

if not과 동일합니다.

unless ARGV.length == 2
  puts "Usage: program.rb 23 45"
  exit
end

한 줄 조건문

puts "Enrollments will now Stop" if participants > 2500

case / when

year = 2000
leap = case
       when year % 400 == 0 then true
       when year % 100 == 0 then false
       else year % 4 == 0
       end
puts leap  # true

반복문

times

rice_on_square = 1

64.times do |square|
  puts "On square #{square + 1} are #{rice_on_square} grain(s)"
  rice_on_square *= 2
end

# 간단한 형태
5.times { puts "Mice!\n" }

while

var = 0
while var < 10
  puts var
  var += 1
end

Range와 삼항 연산자

age = 23
person = (13...19).include?(age) ? "teenager" : "not a teenager"
puts person  # "not a teenager"

each

locations.each do |loc|
  puts 'I love ' + loc + '!'
  puts "Don't you?"
end

반복 제어

Ruby는 반복문의 흐름을 제어하는 여러 키워드를 제공합니다.

break

반복문을 즉시 종료합니다.

(1..10).each do |i|
  break if i > 5
  puts i
end
# 출력: 1, 2, 3, 4, 5

next

현재 반복을 건너뛰고 다음 반복으로 넘어갑니다.

(1..10).each do |i|
  next if i.even?
  puts i
end
# 출력: 1, 3, 5, 7, 9

redo

현재 반복을 처음부터 다시 실행합니다. 카운터는 증가하지 않으므로 무한 루프에 주의해야 합니다.

attempts = 0
(1..3).each do |i|
  attempts += 1
  redo if attempts == 2 && i == 1
  puts "i=#{i}, attempts=#{attempts}"
end

고급 반복문

upto와 downto

1.upto(5) { |i| print "#{i} " }    # 1 2 3 4 5
5.downto(1) { |i| print "#{i} " }  # 5 4 3 2 1

loop

무한 루프를 만들 때 사용합니다. break로 탈출합니다.

count = 0
loop do
  break if count >= 5
  puts count
  count += 1
end

each_with_index

인덱스가 필요한 경우에 사용합니다.

['a', 'b', 'c'].each_with_index do |item, index|
  puts "#{index}: #{item}"
end
# 0: a
# 1: b
# 2: c

each_with_object

반복하면서 객체를 누적할 때 유용합니다.

result = (1..5).each_with_object([]) do |num, arr|
  arr << num * 2
end
puts result.inspect  # [2, 4, 6, 8, 10]

조건문 팁

후위 조건문 활용

Ruby에서는 간단한 조건문을 한 줄로 작성할 수 있습니다. 코드가 간결해지지만 복잡한 로직에는 사용하지 않는 것이 좋습니다.

# if 후위
puts "성인입니다" if age >= 18

# unless 후위
puts "미성년자입니다" unless age >= 18

case에서 정규 표현식 사용

case/when에서 정규 표현식을 조건으로 사용할 수 있습니다.

email = "user@example.com"

case email
when /\A[\w+\-.]+@gmail\.com\z/
  puts "Gmail 계정"
when /\A[\w+\-.]+@yahoo\.com\z/
  puts "Yahoo 계정"
else
  puts "기타 이메일"
end

case에서 Range 사용

score = 85

grade = case score
        when 90..100 then 'A'
        when 80..89  then 'B'
        when 70..79  then 'C'
        when 60..69  then 'D'
        else              'F'
        end
puts grade  # "B"