읽기 좋은 코드가 좋은 코드다.

1). 코드는 이해하는데 들이는 시간을 최소화 시켜야한다.


part1. 표면적 수준의 개선

2) 이름에 정보 담기.

변수의 이름은 정보를 설명하는 공간이다.

  • 따라서, 명확하게, coding convention을 따른다.
    1
    2
    3
    4
    5
    6
    
    C++에서 google의 coding convention은 다음과 같다.
    class      이름 : PascalCase (upper camel)
    function   이름 : camelCase  (lower camel)
    variable   이름 : snake_case
    member var 이름 : snake_case_
    const var  이름 : SNAKE_CASE
    
  • 단어를 구체적으로 써야한다.
    ex) get : 짧은 시간 -> fetch, retrieve,download.
    ex) start -> launch, pause, restart, kill과 같은 느낌으로.

  • 좁은 범위의 변수는 짧게, 광범한 변수는 길게 설정한다.

  • 각 변수에 단위를 넣거나 추가적인 정보를 넣는다.
    ex) time_ms, unsafe, trusted_password

3) 오해하기 쉬운 이름.

  • 경계를 포함하는 한곗값에는 min과 max를 사용한다.
  • 경계를 포함하는 범위 에는 first와 last를 사용한다.
  • 경계를 포함하고 배제하는 범위(마지막 미포함)는 begin과 end를 사용한다.
  • boolean을 저장하는 변수는 is has shoud와 같은 단어와 쓰고, 변수 이름은 긍정적인 것이 좋다. (부정의 부정이 일어날 수 있다.)

4) 미학

  • 비슷한 일을 하는 코드는 비슷하게 쓴다.
  • 연관된 코드는 comment와 함께 하나의 block으로 띄어써서 묶는다.
  • 코드의 열을 맞춰라
  • 변수의 설정 순서가 A,B,C이면, 다른 곳에서도 A,B,C로 써야한다.

5) 주석을 달아야 하는 대상

  • 부족한 이름을 보충설명하는 주석을 달지 마라, 이름을 고쳐라
  • 감독관 입장에서 생각을 기록하라.
    ex) 구조적 결함이나 큰흐름 위주로 기록하라.
    ex)
    1
    2
    3
    4
    
    // TODO  : 내일 마감이니깐, 이 기능 필요함.
    // todo  : 이 부분 다르게 하면 더 좋을 듯.
    // FIXME : xxx 부분 하다가, xx 오류나서 때려침.
    // XXX   : 큰 위험성이 있다. 이거 파라미터를 이상하게 부르면, 1시간 걸린다.
    
  • 상수는 만드시 설명하자.
  • 다른 사람들이 궁금해 할 지점을 타인의 관점에서 생각해보자.

6) 명확하고 간결하게 단다.

  • 대명사
  • 입출력을 간단한 예시로 설명한다.
  • 만약 이름을 잘못 지었다면, function call 할때, comment로 parameter를 알려줄 수 있다.
    1
    
    check(/*time_ms = */ 10, )
    
  • 모듈이나 함수의 전체적인 의도를 표시하자.

part2. 루프와 논리를 단순화

7) 읽기 쉬운 흐름제어

  • 조건문의 parameter 순서는 왼쪽을 유동적으로 오른쪽을 고정적으로 넣는다.
  • 삼항연산자 ? a:b는 간단해 지는 경우에만 사용한다.
  • do while은 추천하지 않는다
  • 중첩을 최소화 시켜서 선형적 구조로 만든다.
    ex) 함수의 중간에 return 하거나, 중첩문의 continue를 통해서 선형적으로 만든다.

8) 거대한 표현을 잘게 쪼개기.

  • 설명변수와 요약변수를 활용한다.
  • 복잡한 논리 조건은 작은 if로 나눠서 생각할 수 있다.
    ex) ||, &&를 따로 함수로 빼서 2개의 if로 쓰면 더 좋을 수 있다.
    ex) overlab range(); 느낌으로

9) 변수와 가독성

  • 필요없는 변수는 없앤다.
  • 접근의 범위를 줄인다. static, scope, 변수의 위치 선정을 통해 어디에 쓰이는지 구분한다.
    ex) if 안에서 쓰는 변수는 if 안에서 설정한다.
  • const와 같이 바뀌지 않는 값을 선호하라.

part3. 코드 재작성

10) 상관 없는 하위 문제를 추출하라.

  • 함수를 구성할 때, 목적과 관계없이 복잡하면 추출해서 따로 만든다.
  • 읽을 때 너무 자세히 알 필요 없으면 추출해서 만든다.

11) 한번에 하나만

  • 말로 논리적으로 써본 후, 문단별로 분리 가능한지 생각해보자.

12) 생각을 코드로 만들기

  • 함수의 과정을 영어로 설명 해본 뒤, 코드로 작성해보자.

13) 코드 분량 줄이기

가장 읽기 쉬운 코드는 아무 것도 없는 코드이다.

  • 기능 구현에 집착하지 말자.
  • 질문을 던지고, 나누어서 분석하자. 가장 단순한 형태의 문제는 무엇인가?
  • 필요 없는 기능은 제거하고 overengineering 하면 안 된다. (유지보수 테스트 힘듬)

part4. 선택된 주제들

14) test!

  • 유지보수 하기 쉽고 이해하기 쉬운 interface를 만든다.
  • tip : C++ boost library에서 assert 추가 기능을 이용하면 좋다.

Comments