코드 품질 향상, 관념에서 실천까지 - Clean Code 교육 요약

6080 단어 학습 노트

프로그래밍 가치관


이전에 나는 항상 좋은 코드를 간소화하는 것이 첫 번째라고 생각했다. 이렇게 해야만'우아하다'고 생각했다. 내가 20줄의 코드를 쓰는 기능은 다른 사람이 10줄로 실현할 수 있는 것이 바로 나보다 대단하다.그러나 프로젝트의 세계에서 프로그래머가 코드를 쓰는 것은 자신에게 보여주는 것이 아니라 뒤에 동료가 당신의 코드를 유지해야 한다는 것을 고려해야 한다.따라서 좋은 코드가 무엇인지 다시 정의해야 한다. 코드의 줄 수를 최소화하지 말고, 코드를 읽는 데 걸리는 시간을 최소화하는 것을 최우선으로 해야 한다.아래 나열된 조직 코드 지침을 통해 이러한 핵심 목표를 달성할 수 있습니다.
  • 공유 방법은 목록처럼 절차 논리를 보여주고 구체적으로 사유로 봉인하는 방법
  • 을 실현해야 한다.
  • 조회와 조작 분리
  • 한 줄 코드는 한 가지 일만 한다
  • 한 가지 방법으로 한 가지 일만 한다.query DataAndPrint () 와 같은 방법을 추상화하지 마십시오
  • 하나의 순환 중 하나만 하기
  • 각 변수는 단일 용도로만 사용
  • 중첩 깊이가 3층을 초과하지 않음
  • 한 방법의 길이가 30줄을 넘지 않는다
  • 모든 함수 호출은 불필요한 부담을 증가시킨다고 자주 말한다.사실상 일류 편집기 최적화는 보통 짧은 코드 세그먼트를 내연 함수로 자동으로 바꾼다.현대 컴퓨터에서 함수 호출의 대가는 0에 가깝다.

    프로그래밍 기술(건제품)


    다음은 코드의 질을 향상시키는 구체적인 기교를 소개한다.

    1, 위구문 사용


    Replace Nested Conditional with Guard Clauses (끼워 넣는 조건 표현식 대신 위문구) 의 정수는 특정한 부분에 특별한 중시를 한다는 것이다.그것은 읽는 사람에게 이런 상황은 매우 보기 드물기 때문에 만약 그것이 실제로 발생한다면 필요한 정리 작업을 하고 물러나라고 말했다.다음 두 가지 쓰기 방법을 비교하십시오.
    //     ,     
    double getPayAmount(){
        double result;
        if(_isDead){
            result = deadAmount();
        } else {
            if (_isSeparated){
                result = separatedAmount();
            } else {
                if (_isRetired){
                    result = retiredAmount();
                } else {
                    result = normalPayAmount()
                }
            }
        }
        return result;
    }
    //      
    double getPayAmount(){
        if(_isDead){
            return deadAmount();
        }
        if(_isSeparated){
            return separatedAmount();
        }
        if(_isRetired){
            return retiredAmount();
        }
        return normalPayAmount();
    }

    이를 통해 알 수 있듯이 위문구를 이용하여 복잡한 조건 표현식을 여러 조건 표현식으로 나누자 구조가 많이 뚜렷해졌다.

    2, 정상 코드와 비정상 처리 분리


    먼저 너도 이런 코드를 썼는지 살펴보고 여러 층의 조건 표현식을 끼워 넣었는데, 단지 정상적인 조건하의 비공식 값을 얻기 위해서였다
    //         
    queryCustCashAmout(){
        QueryCustResponse response = thirdPartyFacade.getCustInfo();
        if(response != null) {
            CustomerLoanInfo cust = response.getCustLoanInfo();
            if(cust != null){
                return cust.getCashAmount();
            }
        }
        return -1;
    }

    일종의 효과적인 방식은 정상적인 처리 프로세스와 이상한 프로세스를 분리하여 아래의 코드가 구조가 훨씬 뚜렷한지 보는 것이다
    queryCustCashAmout(){
        try{
            QueryCustResponse response = thirdPartyFacade.getCustInfo();
            CustomerLoanInfo cust = response.getCustLoanInfo();
            return cust.getCashAmount();
        }catch(Exception e){
            log.error('          ',e);
            return -1;
        }
    }

    3, 제어 태그 제거


    코드를 먼저 볼게요.
    var remove_one = function(array,value_to_remove){
        var index_to_remove = null;
        for(var i=0; i< array.length; i++){
            if(array[i] === value_to_remove){
                if(array[i] === value_to_remove){
                    index_to_remove = i;
                    break;
                }
            }
        }
        if(index_to_remove !== null) {
            array.splice(index_to_remove,1);
        }
    }
    

    이 방법의 indexto_remove는 어떤 조작을 실행할지 여부를 판단하기 위한 제어 표시입니다.그것이 가져온 번거로움은 그것이 가져온 편리함을 훨씬 능가한다.코드에 제어 표시가 있는지 확인해 보세요. 조건 문구를 제거하면 정말 용도가 뚜렷해질 것입니다.
    var remove_one = function(array,value_to_remove){
        for(var i=0; i< array.length; i++){
            if(array[i] === value_to_remove){
                if(array[i] === value_to_remove){
                    array.splice(index_to_remove,1);
                    return;
                }
            }
        }
    
    }
    

    4, 제3자 포장 방법


    공정의 세계에서 수요는 항상 변하고 코드도 끊임없이 교체된다.당신이 사용하는 제3자 방법도 바뀔 수 있음을 감안하여 그것을 봉하여 제3자 코드가 바뀔 때 한 곳만 바꾸면 된다.

    좋은 웹페이지 즐겨찾기