1. assignment operator ||=
오늘 rails로 개발 중 구글링을 하다가 이런 라인을 발견했습니다.
number ||= 1
또잉 이게 무슨 연산자일까요?
1. ||는 다른 언어에서 보통 논리연산자 or로 사용됩니다.
2. x*=2 , x+=1 처럼 어떤 연산자 뒤에 =이 붙었다면 앞의 연산자로 연산을 시행 한 후 변수에 다시 대입을 해주는 복합 대입 연산자라고 볼 수 있습니다.
합리적인 추론에 의하면 ||= 는 or연산을 시행한 값을 number에 대입해주는 복합 대입 연산자라고 할 수 있겠네요.
3. ||의 피연산자에 true나 false가 아닌 nil과 객체가 왔을때 결과값은 다음과 같습니다.
nil || 0 => 0
1 || 0 => 1
0 || 1 => 0
nil || nil => nil
위의 코드는 number 변수가 nil일때 1으로 바꿔주는 기능을 하는 코드였습니다.
루비 코드로 풀어쓰자면 아래의 코드와 같은 기능을 합니다.
if number.nil?
number = 1
end
저는 이런 연산자를 오늘 태어나서 처음 봤는데요, 정말 너무 신기했습니다.. 루비에서는 이런식으로 코드를 짧게 줄일 수 있는 문법이나 함수를 많이 제공하는 것 같습니다.
그래서 내친김에 다른 복합대입연산자도 사용해보았는데요,
number = nil
number += 1
# undefined method `+' for nil:NilClass
exception을 던집니다.
nil은 논리연산은 가능하지만 산술연산은 불가능 하기 떄문입니다. 이럴때는 아래의 연산자를 이용할 수 있습니다.
2. Safe navigation operator &.
&.은 말그대로 안전하게 navigate를 할 수 있는 연산자입니다.
객체의 필드를 참조하거나 메소드를 호출할때 우리는 object.field 이런식으로 코드를 작성하게 되는데요,
이 코드는 object가 nil일때 exception을 던지게 됩니다.
이때 사용할 수 있는 연산자가 &.입니다.
변수 object가 nil일때 object&.field는 exception을 던지지않고 nil을 리턴합니다.
object = nil
object&.field
# nil
&.는 필드나 메소드 뿐 아니라 연산자에도 적용이 가능합니다.
number = nil
number + 1
# undefined method `+' for nil:NilClass
number&.+1
# nil
3. nil 클래스의 메소드
nil은 루비의 다양한 객체 중 하나 입니다.
nil.class
# NilClass
이 처럼 nil은 NilClass라는 클래스의 객체인데요. 이 클래스에서는 nil을 처리하는 다양한 메소드들을 제공합니다.
class NilClass
def to_s
""
end
def inspect
"nil"
end
def nil?
true
end
def to_a
[]
end
def to_f
0.0
end
def to_i
0
end
def to_c
Complex(0)
end
def to_h
{}
end
end
위의 메소드들을 활용하면 nil을 각각의 빈 객체들로 변환할 수 있습니다.
'Ruby on Rails' 카테고리의 다른 글
windows에서 Ruby on Rails 개발환경 구축하기 (wsl + rubymine) (1) | 2020.01.08 |
---|---|
rails CORS 이슈 처리하기 (0) | 2019.12.26 |
named scope안에서 last 메소드를 사용했을 때의 문제 해결 (0) | 2019.11.28 |
Named scope로 db 조회를 최적화 해보자 (0) | 2019.10.31 |
Ruby On Rails 6.0.0 InvalidAuthenticityToken 에러 대처하기 (2) | 2019.10.17 |
댓글