alt
Home 논리연산자(&&, ||)와 단축평가
Post
Cancel

논리연산자(&&, ||)와 단축평가


단축평가?

  • &&, 에서 왼쪽부터 오른쪽으로 가면서 결과 발생 시 더이상의 논리 평가를 하지 않음

    e.g.) C++에서 if(!Q.empty() && Q.front() > 1) 이 상황에서 Q가 비어있어도 Q.front()에서 segmentation fault 발생하지 않던 이유


논리합 ||

  • 왼쪽 피연산자 true 시 바로 왼쪽 것 그대로 반환

    • 바꿔 말하면, 왼쪽 false 시 오른쪽 것 그대로 반환
  • 예시

    • true || false : 왼쪽 것 true, 오른쪽 보지 않고 true 반환
    • req.body || newBody : req.body 있으면 req.body 반환, 없으면 newBody 반환
    • true || body : true 반환
    • body1 || body2 : body1 있을 시 body1 반환, 없으면 body2 반환

    헷갈릴만한 것 : “??”

    • 이것 또한 처럼 쓰임.
    •  : falsy를 판단(0, “”, false, null, undefined 모두 해당)
    • ??: null이나 undefined인지를 판단


논리곱 &&

  • 왼쪽 피연산자 false 시 오른쪽 보지 않고 왼쪽 것 그대로 반환
    • 바꿔말하면, 왼쪽 true 시 오른쪽 값 그대로 반환
  • 예시
    • true && false : 왼쪽 것 true, 오른쪽 반환 false
    • req.body && newBody : req.body 있으면 newBody 반환, 없으면 req.body 반환
    • true && body : body 반환
    • body1 && body2 : body1 있을 시 body2 반환, 없으면 body1 반환


단축평가 쓰임 예시

  1. null, undefined 체크

    1
    2
    3
    4
    5
    6
    
    const req = null;
    1. const foo = req.body; // TypeError
       
    2. const foo = req && req.body; // 에러 발생 x 
       
    출처: https://curryyou.tistory.com/193 [카레유]
    
  2. 매개변수 기본값 세팅(디폴트 값을 만들어줌)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    function getName(name){
        const yourName = name || "무명";
        return yourName;
    };
       
    getName('정우성') // "정우성"
    getName(); // "무명"
       
    출처: https://curryyou.tistory.com/193 [카레유]
    
  3. 변수 초기화(if vs 단축평가)

    1
    2
    3
    4
    5
    6
    7
    8
    
    let res = :"";
    let cond = true;
       
    1. if(cond) res = 'DD';
       
    2. res = cond && 'DD';
       
    출처: https://curryyou.tistory.com/193 [카레유]
    



Reference)

https://curryyou.tistory.com/193

This post is licensed under CC BY 4.0 by the author.