예
항상 괄호를 사용해야합니다 ... 우선 순위를 제어하지 않습니다 ... 컴파일러 개발자가합니다. 괄호를 사용하지 않는 것에 대해 나에게 일어난 이야기가 있습니다. 이는 2 주 동안 수백 명의 사람들에게 영향을 미쳤습니다.
실제 이유
메인 프레임 응용 프로그램을 상속했습니다. 어느 날, 청록색에서 작동이 멈췄습니다. 그게 다야 .. 멈 췄어.
내 직업은 가능한 빨리 작동시키는 것이 었습니다. 소스 코드는 2 년 동안 수정되지 않았지만 갑자기 중단되었습니다. 코드를 컴파일하려고했는데 XX 줄에서 끊어졌습니다. XX 행을 보았는데 XX 행을 중단시킬 항목을 알 수 없었습니다. 이 응용 프로그램에 대한 자세한 사양을 요청했지만 아무것도 없었습니다. XX 행은 범인이 아니 었습니다.
코드를 인쇄하여 위에서 아래로 검토하기 시작했습니다. 나는 무슨 일이 일어나고 있는지에 대한 순서도를 만들기 시작했습니다. 코드는 너무 복잡해서 이해가 거의되지 않았습니다. 나는 순서도를 포기하려고 포기했다. 특히 응용 프로그램이 수행 한 작업이나 종속성 체인의 위치에 대한 세부 정보가 없기 때문에 해당 변경 사항이 프로세스의 나머지 프로세스에 어떤 영향을 미치는지 알지 못한 채 변경하기를 두려워했습니다.
그래서 소스 코드 맨 위에서 시작하여 코드를 더 읽기 쉽게하기 위해 whitespce와 line 브레이크를 추가하기로 결정했습니다. 어떤 경우에는 어떤 조건이 결합 AND
되었고 OR
어떤 데이터가 AND
어떤 데이터와 어떤 데이터가 구별되고 있는지 명확하게 구분되지 않는 경우가 있음을 알게되었습니다 OR
. 그래서 나는 더 읽기 쉽게하기 위해 AND
and 주위에 괄호를두기 시작했습니다 OR
.
청소를 천천히 진행하면서 정기적으로 작업을 저장했습니다. 어느 시점에서 나는 코드를 컴파일하려고 시도했고 이상한 일이 일어났다. 오류가 코드의 원래 줄을 넘어서서 더 이상 내려갔습니다. 그래서 나는 계속해서, AND
그리고 OR
조건을 parens로 분리했습니다. 청소가 끝나면 효과가있었습니다. 그림을 이동.
그런 다음 운영 상점을 방문하여 최근에 메인 프레임에 새로운 구성 요소를 설치했는지 물어보기로 결정했습니다. 예, 우리는 최근에 컴파일러를 업그레이드했습니다. 흠.
이전 컴파일러는 관계없이 왼쪽에서 오른쪽으로 식을 평가했습니다. 컴파일러의 새로운 버전은 또한 불분명 조합을 의미를 잘하지만, 모호한 코드 왼쪽에서 식을 평가 AND
하고 OR
분석 할 수 없습니다입니다.
내가 배운 교훈은 ... 항상, 항상, 서로 결합하여 사용될 때 항상 AND
조건 을 분리하기 위해 Parens를 OR
사용합니다.
단순화 된 예
IF Product = 191 OR Product = 193 AND Model = "ABC" OR Product = 201 OR Product = 202 AND Model = "DEF" ...
(여러 코드로 흩어진 코드)
이것은 내가 만난 것의 단순화 된 버전입니다. 복합 부울 논리 문이있는 조건도있었습니다.
나는 그것을 추격하는 것을 기억한다.
IF ((Product = 191 OR Product = 193) AND Model = "ABC") OR ((Product = 201 OR Product = 202) AND Model = "DEF") ...
사양이 없어서 다시 쓸 수 없었습니다. 원래의 저자는 오랫동안 사라졌습니다. 나는 강한 압력을 기억합니다. 전체 화물선이 항구에 좌초되어이 작은 프로그램이 작동하지 않아서 하역 할 수 없었습니다. 경고가 없습니다. 소스 코드가 변경되지 않았습니다. Parens를 추가하면 오류가 이동 한 것을 발견 한 후 네트워크 작업에서 수정 한 것이 있는지 물어 보았습니다.