Ruby 반복문 - 기초
루비에서 반복문에 대한 기본적인 문법을 정리하고자 합니다.
1. 정해진 횟수만큼 반복하기
정해진 횟수만큼 반복을 하기 위해서는, times메소드를 사용합니다.
기본적인 문법은 다음과 같습니다.
숫자.times { |루프 변수|
동작
}
루프 변수는 생략 가능하고, 루프 변수에 0부터 “숫자 - 1”까지 순서대로 할당되면서 루프가 돌게 됩니다.
샘플 코드는 다음과 같습니다.
3.times {
puts "Hello"
}
# 결과 :
# hello
# hello
# hello
3.times { |cnt|
puts "cnt = #{cnt}"
}
# 결과 :
# cnt = 0
# cnt = 1
# cnt = 2
그 외에 루프 변수의 시작과 끝을 지정해서 실행하는 메소드로, upto, downto, step이 있습니다.
3.upto(5){ |num|
puts "num = #{num}"
}
# 결과 :
# num = 3
# num = 4
# num = 5
8.downto(6){ |num|
puts "num = #{num}"
}
# 결과 :
# num = 8
# num = 7
# num = 6
12.3.step(14.1, 0.5){ |num|
puts "num = #{num}"
}
# 결과 :
# num = 12.3
# num = 12.8
# num = 13.3
# num = 13.8
2. 모든 요소를 확인하면서 반복하기
배열이나 해쉬등의 오브젝트에서 모든 요소들의 값을 순서대로 확인하면서 반복 처리를 실행하기 위해서는, each메소드나 for메소드를 사용합니다.
기본적인 문법은 다음과 같습니다.
오브젝트.each { |요소|
동작
}
each문의 오브젝트를 범위로 지정하는 것도 가능합니다.
예를 들어 “3..10”, “5..10”과 같이 범위의 시작과 끝을 지정하는 것도 가능합니다.
범위를 지정할 때 점(.)이 두개인 경우에는 시작과 끝을 포함한 연속되는 숫자(문자열)를 의미하고, 점이 세개인 경우에는 범위의 끝을 포함하지 않는 연속되는 숫자(문자열)를 의미합니다.
lang = ["Ruby", "Python", "JS"]
lang.each{ |s|
puts s
}
# 결과 :
# Ruby
# Python
# JS
(1..3).each{ |num|
puts "num = #{num}"
}
# 결과 :
# num = 1
# num = 2
# num = 3
("A6"..."A9").each{ |s|
puts s
}
# 결과 :
# A6
# A7
# A8
같은 방식으로 모든 요소를 확인하는 방법으로 for문을 사용할 수도 있습니다.
기본적인 문법은 다음과 같습니다.
for 변수 in 오브젝트 do
동작
end
샘플코드는 다음과 같습니다.
lang = ["Ruby", "Python", "JS"]
for s in lang do
puts s
end
# 결과 :
# Ruby
# Python
# JS
for i in 1..3 do
puts i
end
# 결과 :
# 1
# 2
# 3
3. 조건이 성립하는 경우(성립하지 않는 경우)에만 반복하기
조건식이 참인 경우에만 반복이 되도록 하는 방법으로 while문을 사용할 수 있습니다.
반대로 조건식이 거짓인 경우에만 반복이 되도록 하는 방법으로는 until문이 있습니다.
기본적인 문법은 다음과 같습니다.
while 조건식 do
동작
end
until 조건식 do
동작
end
do는 생략 가능합니다.
샘플 코드입니다.
num = 1
while num < 5 do
puts "num = #{num}"
num = num + 1
end
# 결과 :
# num = 1
# num = 2
# num = 3
# num = 4
until num < 3 do
puts "num = #{num}"
num = num - 1
end
# 결과 :
# num = 5
# num = 4
# num = 3
무한루프를 실행하기 위해서는 loop문을 사용합니다. break로 무한루프에서 빠져나올 수 있습니다.
num = 0
loop {
num += 1
break if num = 4
puts "num = #{num}"
}
# 결과 :
# num = 1
# num = 2
# num = 3
4. 반복문의 제어
반복문을 제어하는 방법으로 위의 무한루프에서 소개한 break외에 next, redo가 있습니다.
next는 다음 반복 차수로 건너뛰고, redo는 같은 차수의 반복을 다시 한번 실행합니다.
loop_num = 0
for cnt in 1..5 do
loop_num += 1
puts "1 - loop_num : #{loop_num}, cnt : #{cnt}"
next if loop_num == 2
redo if loop_num == 4
puts "2 - loop_num : #{loop_num}, cnt : #{cnt}"
end
# 결과 :
# 1 - loop_num : 1, cnt : 1
# 1 - loop_num : 1, cnt : 1
# 1 - loop_num : 2, cnt : 2
# 1 - loop_num : 3, cnt : 3
# 1 - loop_num : 3, cnt : 3
# 1 - loop_num : 4, cnt : 4
# 1 - loop_num : 5, cnt : 4
# 1 - loop_num : 5, cnt : 4
# 1 - loop_num : 6, cnt : 5
# 1 - loop_num : 6, cnt : 5
Ruby에 관한 포스트 모음 : Tags - Ruby