next

next (다음 반복으로)

반복문을 돌다가 현재 반복을 건너뛰고 다음 반복으로 넘어가고 싶을 때가 있어요. while 루프 안에서 next를 쓰면 그 지점에서 현재 반복을 멈추고 다음 반복을 시도해요. 블록(block)에서는 블록을 빠져나가는 용도로도 쓸 수 있어요.

출처: Crystal 공식 문서 - next

본문

next를 쓰면 while 루프의 다음 반복을 실행하려고 해요. next를 실행한 뒤에는 while의 조건을 다시 검사하고, 그 조건이 _truthy_하면 몸체를 실행해요.

a = 1
while a < 5
  a += 1
  if a == 3
    next
  end
  puts a
end

# 위 코드는 2, 4, 5를 출력해요

a가 3이 되는 순간 next가 실행되면서 그 아래의 puts a를 건너뛰고 다음 반복으로 가요. 그래서 3만 빠지고 2, 4, 5가 출력돼요.

next는 블록에서 빠져나오는 데에도 쓸 수 있어요.

def block(&)
  yield
end

block do
  puts "hello"
  next
  puts "world"
end

# 위 코드는 "hello"를 출력해요

yield로 호출된 블록 안에서 next를 만나면 블록의 실행이 그 지점에서 끝나요. 그래서 puts "world"는 실행되지 않죠.

break와 비슷하게, next도 인자를 받을 수 있는데 이 값은 yield가 반환하게 돼요.

def block(&)
  puts yield
end

block do
  next "hello"
end

# 위 코드는 "hello"를 출력해요

여기서는 블록 안의 next "hello" 값이 yield의 반환값이 되어 puts yield로 출력되는 거예요.

더 알아보기

  • 루프를 완전히 빠져나가려면 break를 사용해요.
  • 반복 구조 전반은 while 문서에서 확인할 수 있어요.