단락 평가(short-circuit evaluation)에 대한 깨달음

jomminii_before·2019년 12월 26일
2
post-thumbnail

이전에 코드스테이츠에서 자바스크립트를 배우면서 논리 연산이라는 개념을 접했다. 강의 자료에는 논리 연산자의 결과에 Boolean이 아닌 값이 들어갈 수 있다며 아래와 같은 설명이 더해졌다.

  • or 연산자는 truthy한 값을 만나면, 그 값을 출력한다(그 이후로는 평가하지 않는다.)
  • and 연산자는 falsy한 값을 만나면, 그 값을 출력한다.

이렇게 설명이 되어있었는데, 추가적으로 설명도 안되어있고, 강의 중에 언급을 제대로 해주지 않아 이후에 설명해주겠지 했는데 끝날 때까지 다시 만나볼 수 없었다...

이제와서 보니 저 위의 '그 이후로는 평가하지 않는다.'가 핵심이었다.

다행히 이번에 파이썬 기초 개념들을 공부하면서 논리 연산을 만났을 때는 단락 평가에 대한 개념이 보다 자세하게 적혀있어서 위의 미스테리를 풀 수 있게 되었다.

단락 평가는 첫 번째 값만으로 결과가 확실할 때 두 번째 값은 확인(평가)하지 않는 방법을 말한다. 그리고 마지막으로 단락 평가를 실시한 값을 그대로 반환한다.

and 연산자는 앞에 Falsy한 값이 나올 경우, 뒤에는 볼 것도 없이 무조건 False이므로 앞의 값을 반환하고, or 연산자는 앞에 Truthy한 값이 나올 경우, 뒤에는 볼 것도 없이 무조건 True이므로 앞의 값을 반환한다.

여기서 추가로 신경써야할건 '마지막으로 단락 평가를 실시한 값'을 그대로 반환한다는 점이다.

>>> True and 'test'
'test'

문자열 'test'는 Boolean으로 따지면 True라서 반환 값이 True가 나올 것 같지만, 단락 평가를 실시한 값 그대로 반환되기 때문에 'test'가 반환된다.

한편 위의 단락 평가 규칙은 andor이 동시에 등장할 때는 좀 다르게 볼 필요가 있다.

>>> False and not True or True
True

위의 경우 위에서 본 규칙에 따르면 and의 앞에 False가 나왔기 때문에 무조건 False를 반환할 것 같다. 하지만 이는 평가식 안에 and만 있을 때 해당한다. or이 함께 들어있을 경우, and 앞의 False만 본다고 평가를 완료할 수 없기 때문이다.

참고로 파이썬 논리 연산자에도 고려 우선순위는 다음과 같다.

not > and > or 

알고 보니 어렵지 않은 논리였지만 뭔가 깨달음이 있던 배움이었다.

profile
https://velog.io/@jomminii 로 이동했습니다.

0개의 댓글