|| - 논리 OR 연산자

|| - 논리 OR 연산자 (Logical OR Operator)

||(or)는 왼쪽 피연산자를 평가해요. 그 값이 falsey 하면 오른쪽 피연산자를 평가해서 그 값을 갖고, 그렇지 않으면 왼쪽 피연산자의 값을 가져요. 이 연산자의 타입은 양쪽 타입의 유니온이에요.

||if의 문법 설탕이라고 생각할 수 있어요:

some_exp1 || some_exp2

위 코드는 다음과 같아요:

tmp = some_exp1
if tmp
  tmp
else
  some_exp2
end

출처: Crystal 공식 문서

본문

||는 크게 두 가지로 이해할 수 있어요.

첫째, 값 선택이에요. 왼쪽 값이 truthy이면 왼쪽 값을, falsey이면 오른쪽 값을 결과로 가져요. 이건 some_exp1 == falsey일 때만 오른쪽이 평가된다는 뜻이기도 해요. 그래서 nil이나 false일 때 기본값을 주는 패턴에 자주 쓰여요.

둘째, 타입이에요. 결과의 타입은 양쪽 피연산자 타입의 유니온이 돼요. 예를 들어 nilable_thing || fallback처럼 쓰면 결과 타입에 Nil이 포함될 수 있어요.

Crystal은 nilfalse만 falsey로 취급한다는 점을 기억하면, ||가 어떤 값을 어떤 순서로 고르는지 예측하기 쉬워져요.

더 알아보기

  • ||는 왼쪽이 falsey일 때 오른쪽을 평가해 값을 고르고, 결과 타입은 양쪽의 유니온이에요.
  • 기본값을 주거나 nil 방어용으로 자주 쓰이며, 논리 AND 연산자인 &&와 대비해서 보면 이해가 쉬워요.