Bad example of using if-clause

이런 저런 코드를 많이 보아왔고, 현재도 보고 있는데, 보면 볼 수록 참 답답한 인사들이 많다. 과연 이 사람들이 무슨 생각을 하고 코딩을 하는지 모르겠다.
자 한번 코드를 보자.

if ( ( videoFormat.FORMAT == MX_VIDEO_FORMAT_MPEG2_MpMl ) && ( iSystemTypeEx > VIDEO_SIZE_SD ) && !bPixelAspect )
{
	if( ( temp_videoBitRate >= 20 ) && ( temp_videoBitRate <= 40 ) )
		return _T("Type1-1");
}

if (videoFormat.FORMAT == MX_VIDEO_FORMAT_MPEG2_MpPl && iSystemTypeEx > VIDEO_SIZE_SD && temp_videoBitRate == 50 && videoM == 3 && videoN == ( g_Encoding == ENC_NTSC ? 15 : 12 ) )
   return _T("Type2");

if ( ( videoFormat.FORMAT == MX_VIDEO_FORMAT_MPEG2_MpMl ) && temp_videoBitRate < 50
	&& iSystemTypeEx == VIDEO_SIZE_1080 && bPixelAspect )
	return _T("Type1-2");

if (videoFormat.FORMAT == MX_VIDEO_FORMAT_TYPE3 && iSystemTypeEx > VIDEO_SIZE_SD)
	return _T("Type3");

뭔가 느껴지는게 있지 않은가?

“참 알아보기 힘들다”

바로 그거다. 각 조건들이 마구 널부러져 있다. 이런 상황에선 어떤 조건이 빠지기도 참 쉽고, 알아보기도 힘들다.
더군다나 두번째 if 문을 보자. 도대체가 괄호도 없이 막 되어 있다. 연산자 우선 순위에 맞으니 괜찮다고? 지금 그런 이야기를 하는게 아니다. 이렇게 너저분하고 알아먹기 힘들게 만든 코드는 관리를 무척이나 어렵게 한다.

우선 첫째와 셋제 if 문을 보자. 흠.. 뭔가 공통점이 있다. 둘다 Type1에 관련된 것인데, 저래서는 도무지 알아보기 힘들다.
자 그럼 정리해보자.

if( videoFormat.FORMAT == MX_VIDEO_FORMAT_MPEG2_MpMl ) 
{
	if( !bPixelAspect )
	{
		if( iSystemTypeEx > VIDEO_SIZE_SD )
		{
			if( ( temp_videoBitRate >= 20 ) && ( temp_videoBitRate <= 40 ) )
				return _T("Type1-1");
		}	
	}
	else
	{
		if( iSystemTypeEx == VIDEO_SIZE_1080 )
		{
			if( temp_videoBitRate < 50 )
				return _T("Type1-2");
		}
	}
}

자 이렇게 되면 훨씬 알아보기 쉽지 않을까?
Type1-1과 Type1-2는 bPixelAspect로 일단 갈리고, iSystemTypeEx와 temp_videoBitRate가 서로 다르다는게 명확해진다.
그럼 이 사이에 뭔가를 넣을 때도 훨씬 편하고, 조건 중 빠진게 뭔지 파악도 쉽다.

원래의 코드를 작성한 사람이 대체 무슨 생각으로 한 건지 알 수가 없다.

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: