유명한 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으로 했다.
==> 블록과 탭 구조를 가장 직관적으로 파악하기 쉽다고 생각한다.