2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여iamprogrammerofficial왜 프로그래머가 가독성을 향상시키는 수련을 평생 해야 하는지를 알려준다. 단지 상투적인 이유만 들먹이는 게 아니다. 좋은 가독성은 프로그래머를 프로로 만들어주고, 큰 기쁨을 주며, 성장할 기회를 준다고 역설한다. 가독성을 향상시키려면 눈에 보이는 것들부터 신경을 써야 하며, 코드 자체가 프로그램을 설명해야 하며, 흐름을 단순화하고 주석을 잘 쓰고 퇴고해야 한다는 간단한 원칙부터 지켜나가야 한다.
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여iamprogrammerofficial왜 프로그래머가 가독성을 향상시키는 수련을 평생 해야 하는지를 알려준다. 단지 상투적인 이유만 들먹이는 게 아니다. 좋은 가독성은 프로그래머를 프로로 만들어주고, 큰 기쁨을 주며, 성장할 기회를 준다고 역설한다. 가독성을 향상시키려면 눈에 보이는 것들부터 신경을 써야 하며, 코드 자체가 프로그램을 설명해야 하며, 흐름을 단순화하고 주석을 잘 쓰고 퇴고해야 한다는 간단한 원칙부터 지켜나가야 한다.
The Art Of Readable Code.Unyong (Sheldon) ChoiThe Art Of Readable Code 라는 책의 Part One 부분을
책을 읽으면서 알게된 내용을 정리하고, 내가 겪은 사례들을 첨가해서 정리한 자료입니다.
상업적 목적이 아닌 내부 세미나용으로 자료를 정리했습니다.
Multi-thread : producer - consumerChang Yoon Oh기본적인 thread에 대한 접근법에서 Producer - Consumer의 여러가지 형태를 설명
2014-07-22 게시
2014-07-24 readwritelock 수정
2014-08-30 내용 추가
12. If / else 블록의 순서
조건문 표현에 대한 이야기.
1. 부정이 아닌 긍정을 다루어라.
if ( !debug ) -> if ( debug )
2. 간단한 것을 먼저 처리하라. 이렇게 하면 동시
에 같은 화면에 if와 else 구문을 나타낼 수도
있다. (먼말…??) 두개의 주문을 동시에 보는
게 더 좋다.
3. 더 흥미롭고, 확실한 것을 먼저 다루어라.
13. If / else 블록의 순서
3. 더 흥미롭고, 확실한 것을 먼저 다루어라.
If( !url.HasQueryParameter(“expand_all”))
{
“확장하지 않은 처리”
}
Else
{
“확장 처리”
}
If( url.HasQueryParameter(“expand_all”))
{
“확장 처리”
}
Else
{
“확장하지 않은 처리”
}
14. If / else 블록의 순서
더 흥미롭고, 확실한 것을 먼저 다루어라!!
If( !url.HasQueryParameter(“expand_all”))
{
“확장하지 않은 처리”
}
Else
{
“확장 처리”
}
If( url.HasQueryParameter(“expand_all”))
{
“확장 처리”
}
Else
{
“확장하지 않은 처리”
}
15. If / else 블록의 순서
빨간색 조건에 집중하느라 정작 중요
한 “! NOT” 조건을 놓침.
16. If / else 블록의 순서
조건문에는 부정이 아닌 긍정을 다루
되, 더 흥미롭고 중요한 것을 먼저 다루
어라.
25. do/ while 루프를 피하라.
do {
(실행)
}
while ( --max_length > 0 );
26. do/ while 루프를 피하라.
While ( max_length-- > 0)
{
(실행 )
}
27. do/ while 루프를 피하라.
do/while 문의 do 에서 한번 실행되는
것을 while문 조건을 수정하여 실행하
게 만듦.
28. do/ while 루프를 피하라.
(--max_length) 전위 연산자에서
(max_length--)후위 연산자로 조건을
수정하여,
값을 감소시키고 0과 비교하는 조건에
서, 0과 비교하고 값을 감소하는 조건
으로 수정.
29. do/ while 루프를 피하라.
하지만… 완벽하게 동작이 같은 것이 아
니다.
(의도만 비슷하게 맞춘 것 뿐.. Do/while
문과 while문에 대한 이야기는 현재
chapter의 내용에서 많이 벗어나므로 뒤
에 추가..)
30. do/ while 루프를 피하라.
결국, c++의 창시자인 반얀 스트라우스트
럽을 내세우며 마무리…
“내 경험으로 에러와 혼동의 원인은 do문에
있다. 그래서 나는 조건이 ‘눈에 뜨이는 곳
에 미리’ 나타나도록 만드는 것을 선호한
다. 결과적으로 나는 do문을 피하는 경향
이 있다.”
44. 중첩을 최소화하기
continue는 논리의 흐름을 건너뛰기
때문에 혼란스러워보일 수 있지만, 중
첩문을 쓰는 것 보다는 낫다.
45. 실행 흐름을 따라 올 수 있는가?
자신의 프로그램에 존재하는 흐름을 상위
수준에서 조망해 볼 필요가 있다.
흐름을 파악하기 힘들게 만드는 구조가
있다.
스레딩, 시그널/인터럽트 핸들러, 예외, 함
수 포인터 & 익명 함수 , 가상 메소드
이러한 것을 최대한 줄이자.
46. 요약
조건문에서의 인수 순서 , If / else 블록
의 순서, 삼항 연산자, do / while, 중첩
최소 등 결국 자연스럽게 코드를 작성
하는 것이 중요.
47. do/ while 루프를 피하라.
만약 max_length가 0이하의 값이었다
면 do/while문에서는 한번 실행되고
while문에서는 한번도 실행되지 않는
다.
while문과 같게 동작하게 만들려면
do/while문에 조건을 추가해야 한다.
48. do/ while 루프를 피하라.
do {
if( max_length > 0 ) 추가
(실행)
}
while ( --max_length > 0 );
49. do/ while 루프를 피하라.
하지만, 이것은 do/while을 추가 수정하
는 것이기 때문에 본래 취지에서 벗어
난다….
(우리가 하려는 것은 do / while문은 그
대로 두고 while문으로 전환하는 것 이
었음… )
50. do/ while 루프를 피하라.
기존에 존재하는 do/while문을 수정 없이 while문
으로 전환하려면, 코드 중복 밖엔 방법이 없을 것
이다.
do/while의 do block은 무조건 실행되는 block이고
while문 block은 조건을 확인하고 실행되기 때문
에.
(물론.. Whlie(1) 조건을 주고 내부에서 비슷하게
구현하면 가능 할지도… 하지만 내부 구현에서 코
드 중복이 발생할 것이고..너무…억지..억지..)