menu

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



Written on February 10, 2019