논리 연산자
스위프트에서는 크게 3가지의 논리 연산자가 있습니다
logical and 연산자는 둘다 true일때 true가 나옵니다 그리고 logical or 연산자는 둘중 하나라도 true가 있을경우 true로 평가됩니다.
여기서 의문점이 들수있죠 왼쪽 피연산자에서 이미 false가 나오면 나머지 피연자를 평가할까?
결론은 "평가하지않는다." 입니다.
Swift는 논리식의 결과에 필요한 최소한의 코드를 평가하고 나머지는 평가하지 않습니다 이것을 단락 평가(Short-circuit Evaluation)라고 합니다.
Side Effect (부작용)
우리가 흔히 부작용이라는 용어를 들으면 뭐..당연히 일반적으로 부정적인 느낌이 강하고 사실 당연하지만 프로그래밍에서는 조금 개념이 다름니다.
자 보시면 var a2 = 1, var b2 = 1입니다 이 변수 두 개로 이렇게 boolean 값을 리턴하는 함수를 만들어서 확인해보았는데요!!
|| 이 연산자는 둘 중 하나라도 true이면 평가를true로 하다 보니 보시는 데로 오른쪽 함수는 실행되지 않았습니다 왼쪽만 실행되고 값이 a2= 2 b2 =1 이렇게 값이 도출된 것을 볼 수 있죠.
그럼 and연산자를 볼까요 둘 다 true를 만족해야 true로 평가됩니다
그렇기 때문에 왼쪽 함수만 실행되고 바로 false로 평가되면서 오른쪽 함수는 실행하지 않습니다
만약 저 코드가 id, password 같은 경우를 평가한다고 했을 때 논리적인 오류가 발생하겠죠??
그럼 저 코드를 어떻게 바꾸면 사이드 이펙트가 발생하지 않을까요?
함수를 상수에 저장해서 값을 평가만 하면 false, true로만 논리 연산자가 평가하겠죠!!
이렇게 하면 사이드 이펙트가 발생할 확률이 현저히 줄어듭니다.
이렇듯 표현식을 평가했을 때 값이 변경되거나 상태가 변경되는 것을 사이드 이펙트라 해요!!
마지막으로 논리식의 사이드 이펙트를 발생시킬 수 있는 코드가 포함되어있다면 논리적인 오류가 발생
할 가능성이 있으므로 주의해서 사용해야 합니다.