BadBooleanError
BadBooleanError
불리언(boolean)이 기대되는 자리에 다른 값이 들어왔을 때 던져지는 예외예요. Elixir에서 and나 or는 첫 번째 인자가 반드시 불리언이어야 해서, 그 조건이 어긋나면 이 예외가 발생해요.
본문
and와 or는 첫 인자가 불리언이 아니면 이 예외를 던져요. 예를 들어 정수 123과 true를 and로 연결해 볼게요.
iex> 123 and true
** (BadBooleanError) expected a boolean on left-side of "and", got:
...
에러 메시지를 보면 "and의 왼쪽에 불리언이 와야 하는데, 다른 값이 왔다"고 알려줘요. 123은 불리언이 아니니까 바로 예외가 터지는 거예요.
여기서 중요한 점은, 다른 언어와 다르게 Elixir의 and/or가 진짜 불리언만 받는다는 거예요. 예를 들어 어떤 언어에서는 0이나 빈 문자열을 거짓으로 취급하기도 하지만, Elixir에서는 true와 false 외에는 모두 "불리언이 아님"으로 보기 때문에 이 예외가 나오죠.
이 예외는 보통 가드(guard) 안에서 논리 값을 다룰 때 자주 마주쳐요. 예를 들어 when x and y처럼 쓰려는데 x가 불리언이 아니면 문제가 되겠죠. 그래서 검사하려는 값이 정말 true/false인지 먼저 확인하거나, is_boolean/1로 걸러내는 습관을 들이면 좋아요.
만약 true/false가 아닌 값을 참/거짓처럼 평가하고 싶다면 and/or 대신 &&/||를 쓰면 돼요. &&와 ||는 첫 인자가 false나 nil인지만 확인하고 나머지 값은 그대로 통과시키거든요. 그래서 "nil이 아니면 계속 진행" 같은 로직을 만들 때 훨씬 편해요.
더 알아보기
- Kernel.and/2와 Kernel.or/2: 불리언 논리 연산자
- Kernel.&&/2와 Kernel.||/2: 다른 값도 통과시키는 단락 연산자
- is_boolean/1: 값이 불리언인지 확인하는 가드 함수