본 내용은 Ruby 언어에만 해당되는 내용이다.
여태까지 루비에서 { } 같은 대괄호를 코드 구현에서 쓰지 않았다. 다른 언어들에서는 많이 쓰이는 데 말이다.
루비에게 { } 는 특별한 의미가 있다. 바로 '블럭' 이라고 불리는 기능이다.
[ 블록 예시 1 ]
클래스 안의 함수인 'Method' 중에는 블럭을 사용하는 메소드들이 있다. 그것들을 예로 블럭의 예시에 대해 알아보자.
(물론 개인이 블럭을 이용한 함수를 만들 수도 있고, 그것들이 클래스 안의 함수인 메소드여야만 하는 것도 아니다. )
5.times() {|i| puts i} # 0~4까지 5번
2.times() {puts '2times'} # 0~1까지 2번
3.upto(5) {|item| puts item} # 3부터 5까지 3번. a = 3; a.upto(5) { }형태로 작성해도 동일.
# 3.upto(5) 구문과 같음.
# i = 3;
# while(i <=5) do
# puts i
# i = i + 1;
# end
times 와 upto는 메소드이다. (클래스 안의 함수를 메소드라고 한다)
times라는 함수의 성격에 맞게 { } 안의 코드블럭이 실행된다. upto도 마찬가지.
|i|와 |item| 처럼 절댓값 형식으로 싸여져 있는 부분은 for문의 카운터변수 같은 역할이다.
Output:
0
1
2
3
4
2times
2times
3
4
5
[ 블록 예시 2 ]
위에서는 정수에 대한 메소드의 블록 예제를 알아봤는데,
이번엔 배열에 대한 메소드의 블록 예시에 대해 알아보자.
arr = ['Hevton', 'Pyro', 'Pyron']
arr.each() {|i| puts i}
# 아래와 실행이 같다
#for mem in arr do
# puts mem
#end
Output :
Hevton
Pyro
Pyron
---
delete_if 함수는, 블록의 마지막 부분의 boolean 값에 따라 배열 안에서 요소를 삭제한다.
( 함수의 return 생략 문이랑 같은 문법인 줄 알았으나, return을 넣으면 오류가 뜸. 다른 분야인듯 )
arr = [1, 3, 56, 7, 13 , 52]
arr.delete_if() { |item|
item > 7
}
puts arr
추가로, 블록 표현을 { } 이 아닌 do ~ end로 할 수도 있다.
루비에서는 블록문이 한줄일 경우엔 { } 로 구현하는 것을 권장하고, 여러 줄일 경우엔 do ~ end 문으로 블록을 표현하는 걸 권장한다.
arr = [1, 3, 56, 7, 13 , 52]
arr.delete_if() do |item|
item > 7
end
puts arr
출처 - opentutorials.org
'[Python & Ruby]' 카테고리의 다른 글
[Python & Ruby] 객체 지향 프로그래밍 (0) | 2020.12.22 |
---|---|
[Python & Ruby] Module (0) | 2020.12.20 |
[Python & Ruby] 함수에서의 다양한 생략 - Ruby (0) | 2020.12.18 |
[Python & Ruby] 함수 (Function) (0) | 2020.12.16 |
[Python & Ruby] 반복문 2 (0) | 2020.12.16 |