본문 바로가기

Tech

코드 정리 #4

유명한 jsoncpp 라이브러리의 소스를 보다가 생각나는 점을 포스트한다.

 

 

 

 

출처 : https://github.com/open-source-parsers/jsoncpp/blob/master/src/jsontestrunner/main.cpp

 

 

이렇게 수정하면 어떨까?

 

int main(int argc, const char* argv[]) 
{
	Options opts;
	int 	exitCode;
	
	
	try 
	{
		exitCode = parseCommandLine(argc, argv, &opts);
		if (exitCode != 0) 	    printf("Failed to parse command-line.");
		else			        exitCode = runTest();
  	}
  	catch (const std::exception& e) 
  	{
		printf("Unhandled exception:\n%s\n", e.what());
		exitCode = 1;
  	}
  	
  	return	exitCode;
}

 

코드 수정의 촛점은 중간 return을 최소화하고 값을 정규화 하는 것이다.

이것은 input과 output을 단순화하는 방향이 코드가 쉽기 때문이다.

 

 

코드 수정은

 

1. 변수 exitCode의 분리하여 변수 블록화.

==> 변수는 변수대로 모아서 선언하면 직관적인 코드 구조 이해가 더 쉬워진다.

==> 이것은 마치 Code Segment와 Data Segment가 분리된 구조와 같다고 보면 된다.

==> 그래서 스코프 내에서 로직 블록과 데이터 블록을 나누고 서로 2줄 띄우는 것을 선호한다.

==> 다만 블로그에서 코드를 보니 사이가 너무 넓은 것 같아 1줄 띄우기도 고려중이다.

 

2. 코드 중간 return이 3번이던것을 마지막 1번으로 바꿨다.

 

==> 로직을 볼 때 흐름을 방해하는 요소를 없애준다.

==> 로직이 복잡해졌을 때, 진출 시점이 많아졌을 때, 코드를 다시 볼때 좀 더 주의해야 한다.

==> 그러나 진출 코드가 하나라면 그리고 하나의 변수로 제어된다면 그 변수만 추적하면 된다.

==> 그리고 Trace할 때 실수로 중간 리턴에서 코드 탈출 하는 것을 막아준다.

 

3. 괄호 코딩 스타일은 Allman으로 했다.

==> 블록과 탭 구조를 가장 직관적으로 파악하기 쉽다고 생각한다.

 

'Tech' 카테고리의 다른 글

코드 정리 #6  (0) 2018.07.28
코드 정리 #5  (0) 2018.07.28
다양한 LBP 소스가 있는 깃허브 레포지토리  (0) 2018.07.27
코드 정리 #3  (0) 2018.07.27
코드 정리 #2  (0) 2018.07.26