읽기 좋은 코드가 좋은 코드다 를 읽었다.
리팩토링이나 객체지향설계코드책보다 더 쉽게 다뤄져있어서 금방 읽은것 같다.
- 이름에 정보를 담아내자.
- 언제 그런 이름을 사용해야하는지 깨닫기
- web에서 페이지를 다운로드 하고, 파싱해야 하는 함수가있다면 getPage -> downloadPage가 더 낫다.
- 특정한 단어를 잘 고르기
- 상황에 적합한 단어를 쓰기
- send : delivery, route, dispath, announce
- send는 모호하고 구체적이지 않다. 용도에 맞게 구체적인 단어를 잘 선택하자
- 루프 반복시, index 에 의미가 있고, 그 값으로 체크를 한다면, i,j 보다 구체적인 의미가 담긴 네이밍을 하자
- 추가적인 정보를 이름에 추가하자
- 16진수 문자열인 id이면: id -> hex_id가 더 좋고
- 단위를 포함하는 경우라면 단위를 포함시켜, 보는 사람이 단위에 대한 연산을 하게 하지 ㅏㄹ자.
- 좁은 범위에서는 짧은 이름을 권장하지만, 클래스의 멤버나, 전역변수안에서는 자세한게 좋다.
- 문자의수를 변수로 표현한다면?: max_chars 처럼 자세한게 좋다.
- 경계를 포함하는 한계값을 다룰때는 변수앞에 min/max
- 경계를 포함하는 범위에는 first / last
- 경계를 포함하고.배제하는 경우에는 begin / end
- 네이밍을 하기 전에는 복수의 후보를 두고 골라. (역시 이건.. 많이 해봐야됨..)
- 편한 소스코드란?
- 일관성있는 레이아웃
- 비슷한 코드를 서로 비슷해 보이게 만들고
- 단락을 두어 하나의 블럭으로 만들어라
- 미학적으로 보기 좋은 코드가 사용하기 더 편하다.
- 주석에 담아야 하는 대상
- 머릿속에 있는 정보를 기록하라. 주석은 네머릿속에 있는 정보를 기록하는거다. 코드를 읽는 사람의 입장에서 필요한 정보가 무엇인지 유추하고, 너가 한 고민을 적으면 된다.
- 함수위에 주석을 달고싶으면
- 더 중요한, 세부사항을 적어라.
- findNodeSubtree(subtree, name, depth)라는 함수가 있다. 주석을 달고 싶으면
- name을 이용해서 노드를 찾는다가 아니라
- node 를 찾는데 일치하는 name이 없으면 null을 반환한다.
- depth <0 이면 subtree만 검색한다. 이런 주석이 의미있다.
- 정리하면, 무엇을 설명해야할까?
- 너의 생각. 중요한 동작을 기록하고
- 코드의 결함이 있거나 불완전한 내용을 설명하라.
- TODO: 더 빠른 알고리즘이 필요하다. 등의 설명이 제일 좋다.
- 상수에 대한 설명
- 보통 특정한 임계치는 사연이 존재한다. 이럴때는 상수네이밍을 구체적이고 자세하게 적고, 설명도 추가하면 좋다.
- 중첩 / 분기
- if (length > 10) / if(10 < length) : 전자 코드가 더 익숙하다.
- while( received <expected ) / while (expected > received) :전자 코드가 더 익숙하다
- 부정보다 긍정에 대해 다루어라. 예를 들어 글장성자가 아닌 경우에만 이코드를 실행하라고 되어있다면 이는 글의작성자인 경우로 if 조건문을 만드는게 좋다.
- 간단한것먼저 처리한다.
- 확실한것은 먼저 다루어라.
- 삼항연산자는 정말 간단한거 아니면 쓰지말라. if/else가 가독성이 더 좋다.
- if( user_id === owner_id) blabla... if(user_id != owner_id) 등 의 코드는
- boolean has_user_owner_doc = user_id == owner_id 의 함수를 만들고 함수를 콜하는 방식이 낫다.
- 드모르간의 법칙을 사용하기
- not을 분배하고 , not은 밖으로 꺼낸다.
- and/or 을 바꿔라
- 변수의 범위를 줄여라
- 함수 / 클래스/ 파일로 쪼개어 변수의 범위를 줄이는게 좋다.
- 변수의 값은 한번만 할당되는것이 좋고, 값이 자주 변경되는 것이라면 위처럼 분리해라.
- 변수의 정의는 사용되는 로직 바로 위에 선언하는 것이 좋다.
- 이는 SRP를 지킬수 있다.
- 여러개의 조건이 하나의 결과값을 만드는 경우라고 하면
- 기본값 =간단한것 부터 시작해서 가장 구체적인값으로 조건을 처리 하는 것이 좋다.
'이것저것(독후감같은거)' 카테고리의 다른 글
마이크로서비스아키텍처 설계기준 (1) | 2017.01.21 |
---|---|
Cping Cpong-Apache Tomcat Connector (0) | 2016.09.02 |
git push origin --delete feature/cluster_kk_server (0) | 2016.01.15 |
playframework in java (2.4.4) (0) | 2015.11.26 |
cytoscape.js : 시각화 관련된 js 트래킹 (0) | 2015.11.10 |