[CleanCode] else을 왜 지양할까?

    else if 피하기

    const NUMBER = 5;
    if(NUMBER >= 0){
      console.log("0보다 크거나 같다.") // "0보다 크거나 같다."
    } else if( NUMBER > 0){
      consoel.log("0보다 크다.")
    }
    • 콘솔창엔 "0보다 크거나 같다." 이 출력된다.
    • 왜냐하면 else if는 else 한 후 다시 if 조건문을 만들기 때문이다.
      const NUMBER = 5;
      if(NUMBER >= 0){
      console.log("0보다 크거나 같다.") 
      } else {
      if( NUMBER > 0){
        consoel.log("0보다 크다.")
      }
      }
    • else if문은 사실 위 코드처럼 실행되고 있다.
    • 그래서 NUMBER는 0보다 크거나 같기도 하고 0보다 크기도 하므로 두 가지 조건을 통과해야한다.해결
    • 조건이 많아질땐 차라리 swich case로 하는 것이 더 낫다.

    else 피하기

    • 항상 else문을 쓸 필요는 없다. 의식적으로 판단할 것.
    // 20세 미만인 사람에겐 reprot함수가 발생하고 모든 유저들에게 인사를 하는 함수.
    
    function getHelloCustomer(user) {
      if(user.age < 20) {
        report(user);
      } else {
        return '안녕하세요.';
      }
    }
    • 위 코드의 문제점은?
    • 20세 미만인 유저가 들어올때 report함수를 발생하지만 인사를 하지 않는다.
    • 해결 코드

       

    function getHelloCustomer(user) { 
    	if(user.age < 20>) {
    		report(user); 
    	} return '안녕하세요.'; 
    }
    • Early Return

      • 하나의 if문에 의존성이 많을때 사용

    예제1

    1. 로그인 여부
    2. 토큰 존재
    3. 기가입자 확인
      3-1. 가입
      3-2. 로그인 성공
    function loginService(isLogin, user) {
      if(!isLogin) {
        if(checkToken()) {
          if(!user.nickName) {
            return registerUser(user);
          } else {
            refrechToken();
            return '로그인 성공';
          }
        } else {
          throw new Error('NO Token');
        }
      }
    }

    early return으로 예제코드1 정리

    function login(){
      refrechToken();
      return '로그인 성공';
    }
    
    function loginService(isLogin, user) {
      // Early Return
      /**
       * 함수를 미리 종료
       * 사고하기 편하다.
       */
      if (isLogin) { // 이미 로그인 한 사람들 로직에서 뺀다.
        return
      }
    
      if (!checkToken()){
        return new Error("NO Token");
      }
    
      if(!user.nickName) {
        return registerUser(user);
      }
    
      login(); // 어느 부분이 실행되는지 명확하게 알 수 있다.
    }

    예제코드2

    function 오늘하루(condition, weather, isJob) {
      if (condition === 'GOOD') {
        공부();
        게임();
        유튜브보기();
    
        if (weather === 'GOOD'){
          운동();
          빨래();
        }
    
        if (isJob === 'GOOD'){
          야간업무();
          조기취침();
        }
      }
    }
    • condition이 GOOD일때만 동작하는 코드

    early return 예제코드2 정리

    function 오늘하루(condition, weather, isJob) {
      if (condition !== 'GOOD') { // 최상위에 거르는 조건을 넣는다.
        return
      }
    
      공부();
      게임();
      유튜브보기();
    
      if (weather === 'GOOD'){
        운동();
        빨래();
      }
    
      if (isJob === 'GOOD'){
        야간업무();
        조기취침();
      }
    }

    부정 조건문 지양하기

    1. 생각을 여러번 해야하기 때문에
    2. 프로그래밍 언어 자체로 if문이 처음부터오고 true부터 실행시킨다.
    • 부정 조건 예외
      1. Early Return
      2. Form validation
      3. 보안 혹은 검사하는 로직
        // 숫자일때만
        if (isNaN(3)) {
        console.log('숫자입니다.')
        }
        if (!isNaN(3)) {
        console.log('숫자입니다.') //숫자입니다.
        }
    • isNaN이 반대의 결과가 나오기 때문에 많이 헷갈린다.
      function isNumber(num) {
      	return !NUMBer.isNaN(num) && typeOf num === 'number'
      }
      
      if (isNumber(3)) {
      	consolel.log('숫자입니다.'); //숫자입니다.
      }

     Default Case 고려하기

    • 사용자에게 값을 얻지 못했을때 기본값을 설정하여 어떠한 정책을 고려한다
    • .더욱 더 안전하게 개발하기 위한다.
    • '엣지 케이스'라고도 불림 
    function sum(x,y){
      x = x || 1 // 기본값을 설정
      y = y || 1
      return x + y
    }
    
    console.log(sum())

    이 글은 https://www.udemy.com/course/clean-code-js 클린코드 강의를 보고 작성한 글입니다.

     

    댓글