Short-circuit Evaluation

장주명·2021년 5월 18일

Operators

목록 보기
6/11

단락평가

side effect

코드의 실행결과로 인해서 값또는 상태가 변경되는것을 말한다. 의도와 다른 결과를 얻게 될수있기 때문에 예측 가능한 범위, 의도한 값을 도출할수 있도록 해야한다.

var a = 1
var b = 1

false && //뒤에 값과 상관없이 항상 false
true || // 뒤에 값과 상관없이 항상 true

func updateLeft() -> Bool {
    a += 1
    return true
}


func updateRight() -> Bool {
    b += 1
    return true
}

if updateLeft() || updateRight() {
    //여기서 사이드 이펙트가 1번 발생
    //updateRight()가 사이드 이펙트가 발생하지 않을수도 있다.
}
a // 2
b // 1
// 최소한의 평가만 진행하기 때문에 뒤에있는 updateRight를 연산하지 않는다.

var c = 1
var d = 1

func updateLeft2() -> Bool {
    c += 1
    return false
}

func updateRight2() -> Bool {
    d += 1
    return true
}

if updateLeft2() && updateRight2() {
    //여기서 사이드 이펙트 1번 발생
}

c // 2
d // 1

//최소한의 평가만 진행하기 때문에 뒤에있는 updateRight를 연산하지 않는다.

let resultA = updateLeft()
let resultB = updateRight()

if resultA && resultB {
    // 결과를 미리 도출해놓고 하게되면 호출 안되는 경우는 없기 떄문에 논리적 오류가 발생할 일이 거의없다. 
       그렇기때문에 side effect가 일어날만한 코드는 기피하는게 좋다.
}
profile
flutter & ios 개발자

0개의 댓글