11. 쇼트 서킷 논리 오용 말기
쇼트 서킷 논리?
: 합선 논리?
=> 절연되지 않아 연결된 논리?
Ex )
if ( (!( bucket = findBucket(key) )) || !bucket->IsOccupied()))
{
}
12. 쇼트 서킷 논리 오용 말기
(!( bucket = findBucket(key))
이 조건 만족 시
!bucket->IsOccupied()
이 조건은 평가 되지 않는다.
if ( (!( bucket = findBucket(key) )) || !bucket->IsOccupied()))
{
//처리
}
13. 쇼트 서킷 논리 오용 말기
코드를 정리 하면
bucket = findBucket(key);
if(bucket != NULL)
{
if( !bucket->IsOccupied() )
{
// 처리
}
}
14. 쇼트 서킷 논리 오용 말기
‘영리하게’ 작성된 코드에 유의하라.
나중에 다른 사람이 읽으면 그런 코드가 종종
혼란을 초래한다.
( “허세 자제…”)
15. 쇼트 서킷 논리 오용 말기
사용 자체를 하지 말라는 것은 아님.
if( object && object->method() )
이정도 깔끔할 경우 사용 권장.
( 오용 말기지 사용 말기는 아님 )
16. 복잡한 논리와 씨름하기
Range 클래스 구현.
- this의 범위가 Other의 범위에 속하는지 판별하
는 로직.
Ex) -------this--------
---------------Other-----------------
17. 복잡한 논리와 씨름하기
// this의 range가 other의 range에 겹친다.( 포함된
다)
Bool Range::OverlapsWith( Range other )
{
return ( begin >= other.begin && begin < other.end )
||
( end > other.begin && end <= other.end ) ||
( begin <= other.begin && end >= other.end );
}
23. 거대한 구문 나누기
Page 129
Var vote_value = $(“#vote_value” + message_num).html();
Var thumbs_up = $(“#thumbs_up” + message_num);
Var thumbs_donw = $(“#thumbs_down + message_num);
앞의 요약 변수 내용과 개념의 같음.
24. 표현을 단순화하는 다른 창의적인
방법들
Page 130 상단의 코드를 하단의 코드처럼
매크로를 이용하여 요약.
25. 표현을 단순화하는 다른 창의적인
방법들
매크로 사용을 권장하는 것이 아니다.
하지만! 이 예처럼 때에 따라서 매크로가 간단하
게 사용되고, 이로 인해 코드의 가독성이 좋아
진다면 사용!!
26. 요약
“많은 내용을 담은 코드를 나누어 핵심 로직에 집중할 수
있게 한다.”
- 설명 변수 ( 추가 변수 )
- 요약 변수
- 드모르간 법칙 사용
- 쇼트 서킷 논리 오용 말기
- 복잡한 논리와 씨름
- 거대한 구문 나누기 ( 요약 변수 )
- 표현을 단순화하는 다른 창의적인 방법들