goto decision table

새 코드의 goto는 마지막 예외인지 표로 확인한다

판단은 감정적으로 “쓰지 말자”가 아니라, 더 좁고 읽기 쉬운 구조가 있는지 순서대로 제거하는 과정입니다.

질문
예라면
아니라면
권장 결론
현재 블록만 벗어나면 되는가?
breakcontinue로 충분하다.
다음 질문으로 내려간다.
goto를 만들지 않는다.
함수 단위 작업을 끝내는가?
조건을 앞쪽 guard clause로 빼고 return한다.
작업 단위를 함수로 자를 수 있는지 본다.
출구를 함수 경계로 좁힌다.
자원 정리 때문에 점프하는가?
RAII로 정리를 소멸자에 맡긴다.
레이블이 문제의 의미를 설명하는지 확인한다.
정리 코드를 한 레이블에 모으지 않는다.
저수준 예외 경로인가?
범위, 불변식, 건너뛰는 코드를 주석으로 고정한다.
구조화된 제어문으로 되돌린다.
대부분의 새 코드에서는 사용하지 않는다.
레거시 코드를 읽을 때출발 조건, 도착 레이블, 중간에 건너뛰는 초기화와 정리 코드를 먼저 표시합니다.
새 코드를 쓸 때반복문, 함수, RAII 중 하나로 범위를 좁힐 수 있으면 그쪽이 A급 구조입니다.