반응형
메소드(method)
루비의 함수는 클래스에 들어있든 아니든 메소드(경우에 따라 메서드)라고 불립니다.
# 인자가 없으면 괄호를 생략할 수 있다
# 기본값이 없으면 생략할 수 있다
def 메소드명(인자명=기본값)
# 코드블럭
end
블록의 표시 방법
루비에서 블록을 표시하는 방법은 두 가지가 있습니다. 중괄호({ }
)와 do-end
입니다.
중괄호는 한 줄로 정의할 때 사용됩니다.
반환 값은 따로 지정하지 않아도 괜찮다
특별히 지정되지 않은 경우, 메소드는 마지막 줄의 결과값을 반환합니다.
가변 매개 변수(argument)
루비의 메소드는 한 매개 변수에 별표(*
)를 붙임으로써 여러 인자(parameter)를 받을 수 있습니다.
모호함을 막기 위해 가변 매개 변수는 한 개만 허용됩니다.
def function(var1, *varArr)
puts var1
varArr.each { | v | print v }
end
function(1, 2, 3, 4, 5) # [ 2, 3, 4, 5 ]가 varArr에 들어감
# 1
# 2345
메소드 이름에 특수문자
루비의 메소드는 이름의 마지막에 ? ! =
를 넣을 수 있습니다.
이는 각 함수가 어떤 행동을 하는지 알려 주는 일종의 표식입니다.
method? # method함수가 true / false를 반환한다는 의미
method! # 이 함수를 호출하면 값이 변한다는 의미
method= # 내부의 값을 직접적으로 변경할 수 있다는 의미
str = "hello!"
str.upcase # "HELLO!"
puts str # "hello!"
str.upcase! # "HELLO!"
puts str # "HELLO!"
method=
는 내부의 값을 직접적으로 변경할 수 있다는 의미이며,
이는 즉 좌변에 메소드가 올 수 있음을 의미합니다.
class Item
@price = 100
def price=(new_p)
@price = new_p
end
...
i = Item.new
i.price = 200
맵 메소드 collect
다른 언어의 map
을 루비에서는 collect
라고 지칭하고 있습니다.
입력에 대해 주어진 연산을 처리하고, 그 결과를 반환합니다.
[ 1, 2, 3, 4, 5 ].collect { | i | i % 3 }
# [ 1, 2, 0, 1, 2 ]
리듀스 메소드 inject
다른 언어의 reduce
을 루비에서는 inject
라고 지칭하고 있습니다.
입력에 대해 주어진 연산을 처리하고, 결과를 하나로 모아 반환합니다.
[ 2, 3, 4, 5, 6 ].reduce(1) do | sum, i |
puts "SUM : #{sum} I : #{i}"
sum + i
end
# SUM : 1 I : 2
# SUM : 3 I : 3
# SUM : 6 I : 4
# SUM : 10 I : 5
# SUM : 15 I : 6
# 21
[ 2, 3, 4, 5, 6 ].reduce do | sum, i | # 인자를 전달하지 않으면 첫 번째 값이 초기값
puts "SUM : #(sum) I : #{i}"
sum + i
end
# SUM : 2 I : 3
# SUM : 5 I : 4
# SUM : 9 I : 5
# SUM : 14 I : 6
# 20
'개발 > Ruby on Rails' 카테고리의 다른 글
Mac의 zsh에서 rbenv 사용하기 (0) | 2020.05.31 |
---|---|
Ruby : 기초(6) 클래스 (0) | 2020.03.14 |
Ruby : 기초(4) 해시와 심볼 (0) | 2020.03.14 |
Ruby : 기초(3) 반복 (0) | 2020.03.13 |
Ruby : 기초(2) 연산 (0) | 2020.03.13 |