블록이란 무엇인가요?
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 15번째.
여러분은 이미 블록을 작성해 왔습니다. each do |x| ... end를 작성할 때마다, do와 end 사이의 부분은 블록이었습니다: 메서드에 전달되는 코드 덩어리입니다.
[1, 2, 3].each do |n|
puts n * 2
end여기서 each는 배열의 메서드이며, do |n| ... end는 블록입니다. each는 모든 요소에 대해 블록을 한 번씩 실행하며, 각 요소를 n으로 전달합니다.
블록은 변수에 저장하는 별개의 객체가 아니며, 메서드 호출에 직접 연결됩니다. 메서드는 블록을 받거나 받지 않으며, 대부분의 반복 메서드(each, map, select, times)는 블록을 하나 받도록 설계되어 있습니다.
3.times do |i|
puts "hi #{i}"
end블록 없이 메서드를 호출하면 그 동작이 바뀝니다. 블록이 없는 [1,2,3].map은 변환된 배열 대신 열거자(enumerator)를 반환하므로, 블록은 메서드가 의미하는 바의 일부입니다.
챌린지
초급입력으로부터 정수 n을 읽습니다. 0부터 n - 1까지의 각 i 값에 대해 Iteration <i> 메시지를 출력하도록 블록과 함께 times 메서드를 사용하세요.
입력 3에 대한 출력은 다음과 같습니다:
Iteration 0
Iteration 1
Iteration 2치트 시트
블록(block)은 do |param| ... end 사이에 작성되어 메서드로 전달되는 코드 뭉치입니다:
[1, 2, 3].each do |n|
puts n * 2
endtimes를 사용하여 블록을 n번 반복할 수 있으며, 이때 i는 0부터 n - 1까지 증가합니다:
3.times do |i|
puts "hi #{i}"
end직접 해보기
n = gets.to_i
# TODO: 각 반복을 출력하기 위해 n.times와 블록을 사용하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.