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블록의 순서
조건문에는 부정이 아닌 긍정을 다루
되, 더 흥미롭고 중요한 것을 먼저 다루
어라.
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문을 피하는 경향
이 있다.”
중첩을 최소화하기
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) 조건을 주고 내부에서 비슷하게
구현하면 가능 할지도… 하지만 내부 구현에서 코
드 중복이 발생할 것이고..너무…억지..억지..)