BadBooleanError

BadBooleanError

불리언(boolean)이 기대되는 자리에 다른 값이 들어왔을 때 던져지는 예외예요. Elixir에서 andor는 첫 번째 인자가 반드시 불리언이어야 해서, 그 조건이 어긋나면 이 예외가 발생해요.

출처: BadBooleanError (Elixir v1.20.4)

본문

andor는 첫 인자가 불리언이 아니면 이 예외를 던져요. 예를 들어 정수 123trueand로 연결해 볼게요.

iex> 123 and true
** (BadBooleanError) expected a boolean on left-side of "and", got:
...

에러 메시지를 보면 "and의 왼쪽에 불리언이 와야 하는데, 다른 값이 왔다"고 알려줘요. 123은 불리언이 아니니까 바로 예외가 터지는 거예요.

여기서 중요한 점은, 다른 언어와 다르게 Elixir의 and/or가 진짜 불리언만 받는다는 거예요. 예를 들어 어떤 언어에서는 0이나 빈 문자열을 거짓으로 취급하기도 하지만, Elixir에서는 truefalse 외에는 모두 "불리언이 아님"으로 보기 때문에 이 예외가 나오죠.

이 예외는 보통 가드(guard) 안에서 논리 값을 다룰 때 자주 마주쳐요. 예를 들어 when x and y처럼 쓰려는데 x가 불리언이 아니면 문제가 되겠죠. 그래서 검사하려는 값이 정말 true/false인지 먼저 확인하거나, is_boolean/1로 걸러내는 습관을 들이면 좋아요.

만약 true/false가 아닌 값을 참/거짓처럼 평가하고 싶다면 and/or 대신 &&/||를 쓰면 돼요. &&||는 첫 인자가 falsenil인지만 확인하고 나머지 값은 그대로 통과시키거든요. 그래서 "nil이 아니면 계속 진행" 같은 로직을 만들 때 훨씬 편해요.

더 알아보기