JavaScript - 단락평가(Short-circuit Evaluation) (13)
단락평가(Short-circuit Evaluation)
1. 단락평가(Short-circuit Evaluation)란
- 논리연산자 &&, || 가 평가 도중에 불필요한 연산을 생락하는 것으로 성능을 최적화하고 코드를 간결하게 작성하는데 유용하다.
- 논지연산자가 좌항의 값만으로 결과를 결정할 수 있을 경우 우항의 표현식은 평가하지 않고 결과를 반환하는 것을 의미한다.
let varA = false;
let varB = true;
console.log(varA && varB);
console.log(varA || varB);
- varA && varB
- varA가 false이기 때문에 varB는 평가되지 않고 결과는 false가 된다.
- varA || varB
- varA가 false이기 때문에 varB가 평가되고 결과는 true가 된다.
- &&(AND) 연산자는 좌항이 Falsy 값일 경우, 우항을 평가하지 않고 바로 좌항의 값을 반환합니다. 좌항이 Truthy 값일 경우, 우항을 평가하여 그 결과를 반환합니다.
- ||(OR) 연산자는 좌항이 Truthy 값일 경우, 우항을 평가하지 않고 바로 좌항의 값을 반환합니다. 좌항이 Falsy 값일 경우, 우항을 평가하여 그 결과를 반환합니다.
2. || (OR) 연산자의 단락 평가
function returnFalse() {
console.log("False함수");
return false;
}
function returnTrue() {
console.log("True함수");
return true;
}
console.log(returnFalse() && returnTrue());
- returnFalse 함수가 먼저 호출되어 False함수 메시지를 출력후 false를 반환한다.
- 좌항이 Falsy값이기 때문에 우항을 평가하지 않아 returnTrue()함수는 호출되지 않는다.
console.log(returnTrue() && returnFalse());
- returnTrue 함수가 먼저 호출되어 True함수 메시지를 출력한 후 true를 반환한다.
- && 연산자는 좌항이 Truthy값일 경우 우항을 평가해 returnFasle() 함수도 호출된다.
function returnFalse() {
console.log("False함수");
return undefined;
}
function returnTrue() {
console.log("True함수");
return 100;
}
console.log(returnTrue() || returnFalse());
returnFalse()
- False함수 메시지를 출력하고 undefined를 반환한다.
returnTrue()
- True함수 메시지를 출력하고 100을 반환한다.
returnTrue()함수가 먼저 호출되고 True함수 메시지를 출력한후 100을 반환하는데 좌항이 Truthy값이라면 우항을 평가하지 않는다. 100은 Truthy값으로 returnFalse함수는 호출되지 않는다.
3. 단락평가 예제
function printUserName(person) {
const name = person && person.name;
console.log(name || "person의 값이 없습니다.");
}
printUserName();
printUserName({ name: "AR" });
person && person.name
- persion이 전달되었을 때만 persion.name을 사용한다.
- name이 없다면 person의 값이 없습니다. 라는 기본 메시지를 출력하게된다.
printUserName();
- person을 전달하지 않아 undefined가 된다.
&&연산자
- person && person.name 에서 person이 존재하면 person.name의 값을 그렇지 않을 경우 undefined로 처리된다.
||연산자
- console.log(name || "person의 값이 없습니다."); 에서 name이 없다면 메지시를 출력하게된다.