[Javascript] 단락 평가(Short-circuit Evaluation)

2024. 5. 14. 18:22Javascript

728x90

and나 or 같은 논리연산식에서 첫 번째 피연산자 값만으로도 답을 확정할 수 있으면 두 번째 값은 접근하지 않는 특징

 

 

function funcFalse() {
  console.log("False 함수 입니다");
  return false;
}
function funcTrue() {
  console.log("True함수 입니다");
  return true;
}

 

console.log(funcFalse() && funcTrue());

 

라는 함수와 연산식이 존재할 때 결과값을 예상해 보면

 False 함수입니다

True함수입니다

False 일 거 같지만 실제 결괏값은

 

False 함수입니다

false

 

Why?  단락 평가가 작동했기 때문에
and 연산식에서 첫 번째 피연산자 값이 false라 뒤에와 상관없이 연산식 결과가 false → 두 번째 피연산자는 처리도 안 함

 

그러면 위에 함수에서 두 연산자의 자리를 바꾼다면?

console.log( funcTrue() &&  funcFalse() );

 

첫 번째 피연산자 값만으로 전체 결과를 예상할 수 없음 → 단락 평가가 작동하지 않음

결괏값은

  True함수입니다
  False 함수 입니다
  false

 

 

단락평가는 Falsy와 Truthy값에도 적용됨

 

 

 

이거 도대체 언제 사용해..?

 

바로 전 글의 사례를 그대로 가져오면

 

function userName(user) {
  console.log(user.name);
}
let user; = { name: "mm_스터디" };
userName(user);

 

이때 name을 사용자가 제대로 작성 안 하거나, 오류로 값이 제대로 저장되지 않는 걸 확인하기 위해 아래의 함수를 짬

 

function userName(user) {
  if (!user) {
    console.log("user의 값이 올바른 값이 아님");
    return;
  }
  console.log(user.name);
}

 

위의 식을 단락 평가 활용하면 더 간결하게 표현 가능

 

function userName(user) {
  const name =  user && user.name;
  console.log(name || "name의 값이 없음");
}
userName ();

728x90

'Javascript' 카테고리의 다른 글

[Javascript] Spread 연산자와 Rest 매개변수  (0) 2024.05.16
[Javascript] 구조 분해 할당  (0) 2024.05.15
[Javascript] Truthy 와Falsy  (0) 2024.05.13
[Javascript] 배열  (0) 2024.05.12
[Javascript] 객체  (0) 2024.05.11