SOFTWARE ENGINEERING/Art Of Readable Code

Ch2 Packing Information into Names

파란실버라이트 2012. 11. 23. 10:44

가독성이 좋은 코드를 생성하는 방법을 찾다가 The Art of Readable Code라는 책을 발견

책 내용을 공부하면서 좋은 방법들은 정리 하였다. 자세하게 알고 싶으신 분들은 책을 참조하세요.

 

참조 : The Art of Readable Code

 

특정한 단어 고르기 - 구체적인 단어를 선택하자. 


    send - deliver, dispatch, announce, distribute, route 

    find - search, extract, locate, recover

    start - launch, create, begin, open

    make - create, set up, build, generate, compose, add, new

 

1.Avoid Generic Names Like tmp and retval

 

var euclidean_norm = function (v) {

    var retval = 0.0;  //에 실행된 명령들이 제대로 동작했느냐를 담아두는 변수라고
    var sum_squares = 0.0;
    for (var i = 0; i < v.length; i += 1)
    {
        retval += v[i] * v[i];
        sum_squares += v[i]; // Where's the "square" that we're summing? Bug!
    }

    return Math.sqrt(retval);
};


*만약 변수명이 sum_squares 였다면 다음 처럼 버그는 더 몇백하게 드러날 것이다. 

 sum_squares += v[i]; // 더해야 하는 '제곱'은 어디에 있다는 말인가? 버그다.  


*temp라는 이름은 대상이 짧게 임시적으로만 존재하고 , 임시적 존재 재체가 변수의 가장 중요한 용도일때 한해서 사용

 Swap 함수

  if (right, left) {

tmp = right; 

right = left;

left = tmp

}

 

2.Loop Iterators

 

var euclidean_norm = function (v) {

    for (var i = 0; i < clubs.size(); i++)
    {
        for (var j = 0; j < clubs[i].members.size(); j++)
        {
            for (var k = 0; k < users.size(); k++)
            {
                if (clubs[i].members[k] == users[j]) ;
            }


        }
    }

     //When used correctly, the first letter of the index would match the first letter of the array
    for (var ci = 0; ci < clubs.size(); ci++)
    {
        for (var mi = 0; ci < clubs[ci].members.size(); mi++)
        {
            for (var ui = 0; ui < users.size(); ui++)
            {
                if (clubs[ci].members[mi] == users[ui]) ;
            }


        }
    }

    return 0;

};

 

3.Values with Units

 

var euclidean_norm = function (v) {

    var start = (new Date()).getTime(); // top of the page
    var elapsed = (new Date()).getTime() - start; // bottom of the page
    document.writeln("Load time was: " + elapsed + " seconds");

 

    //By appending _ms to our variables, we can make everything more explicit:
    var start_ms = (new Date()).getTime(); // top of the page
    var elapsed_ms = (new Date()).getTime() - start_ms; // bottom of the
    document.writeln("Load time was: " + elapsed_ms / 1000 + " seconds");

 

    return 0;

};


/*    Function parameter Renaming parameter to encode units
    Start(int delay ) delay → delay_secs
    CreateCache(int size ) size → size_mb
    ThrottleDownload(float limit) limit → max_kbps
    Rotate(float angle) angle → degrees_cw*/


   password => plaintext_password    

   comment => unescaped_comment

   html => html_utf8

   data => data_urlenc