개요

조건 문의 형태는 보통 가지다.

하나는 또는 거짓 분기 모두 정상동작인 경우

다른 하나는 분기 쪽만 정상 동작인 경우다.

 

또는 거짓이 모두 정상 동작인 경우 if/else 쓰자

 

쪽만 정상인 경우 비정상인 분기에서 return문으로 함수를 탈출한다. 이를 보호구문이라 한다.

 

함수는 진입점과 반환점이 하나여야만 한다는 규칙을 반드시 준수할 필요 없다.

반환점이 여러 개일 코드가 명확해진다면 반환점을 여러 두는 것을 피하지 말자

진입점은 어차피 언어 차원에서 강제한다.

 

예시

직원 급여 계산하는 코드

function payAmount(employee){
    let result;
    if(employee.isSeparated){//퇴사한 직원
        result = {amount:0,reasonCode:"SEP"};
    }else{
        if(employee.isRetired){//은퇴한 직원
            result = {amount:0, reasonCode:"RET"};
        }else{//급여 계산 로직
            lorem.ipsum(dolor.sitAmet);
            consectetur(adipiscing).elit();
            sed.do.eiusmod = tempor.incididunt.ut(labore) && dolore(magna.aliqua);
            ut.enim.ad(minim.veniam);
            result = someFinalComputation();
        }
    }
}


function payAmount(employee){
    let result;
    //가장 바깥조건부터 보호구문으로 변경
    if(employee.isSeparated){return {amount:0,reasonCode:"SEP"};}
    if(employee.isRetired){
        result = {amount:0, reasonCode:"RET"};
    }else{//급여 계산 로직
        lorem.ipsum(dolor.sitAmet);
        consectetur(adipiscing).elit();
        sed.do.eiusmod = tempor.incididunt.ut(labore) && dolore(magna.aliqua);
        ut.enim.ad(minim.veniam);
        result = someFinalComputation();
    }
}


function payAmount(employee){
    let result;
    if(employee.isSeparated){return {amount:0,reasonCode:"SEP"};}
    if(employee.isRetired){  return {amount:0, reasonCode:"RET"};}
    //급여 계산 로직
    lorem.ipsum(dolor.sitAmet);
    consectetur(adipiscing).elit();
    sed.do.eiusmod = tempor.incididunt.ut(labore) && dolore(magna.aliqua);
    ut.enim.ad(minim.veniam);
    result = someFinalComputation();
}


function payAmount(employee){
    if(employee.isSeparated){return {amount:0,reasonCode:"SEP"};}
    if(employee.isRetired){  return {amount:0, reasonCode:"RET"};}
    //급여 계산 로직
    lorem.ipsum(dolor.sitAmet);
    consectetur(adipiscing).elit();
    sed.do.eiusmod = tempor.incididunt.ut(labore) && dolore(magna.aliqua);
    ut.enim.ad(minim.veniam);
    return someFinalComputation();
}

 

예시:조건 반대로 만들기



function adjustedCapital(anInstrument){
    let result = 0;
    if(anInstrument.capital > 0){
        if(anInstrument.interestRate > 0 && anInstrument.duration > 0){
            result = (anInstrument.income / anInstrument.duration) * anInstrument.adjustmentFactor;
        }
    }
    return result;
}


function adjustedCapital(anInstrument){
    let result = 0;
    //반대로 해서 보호구문으로 만듦
    if(anInstrument.capital <= 0){ return result;}
    if(anInstrument.interestRate > 0 && anInstrument.duration > 0){
        result = (anInstrument.income / anInstrument.duration) * anInstrument.adjustmentFactor;
    }
    return result;
}


function adjustedCapital(anInstrument){
    let result = 0;
    if(anInstrument.capital <= 0){ return result;}
    if(!(anInstrument.interestRate > 0 && anInstrument.duration > 0)){
        return result;
    }
    result = (anInstrument.income / anInstrument.duration) * anInstrument.adjustmentFactor;
    return result
}


function adjustedCapital(anInstrument){
    let result = 0;
    if(anInstrument.capital <= 0){ return result;}
    //not 조건 제거
    if(anInstrument.interestRate <= 0 || anInstrument.duration <= 0){
        return result;
    }
    result = (anInstrument.income / anInstrument.duration) * anInstrument.adjustmentFactor;
    return result
}


function adjustedCapital(anInstrument){
    let result = 0;
    //조건식 통합
    if(anInstrument.capital <= 0
        || anInstrument.interestRate <= 0
        || anInstrument.duration <= 0){ return result;}
    result = (anInstrument.income / anInstrument.duration) * anInstrument.adjustmentFactor;
    return result
}


function adjustedCapital(anInstrument){
    if(anInstrument.capital <= 0
        || anInstrument.interestRate <= 0
        || anInstrument.duration <= 0){ return 0;}
    return (anInstrument.income / anInstrument.duration) * anInstrument.adjustmentFactor;
}

+ Recent posts