СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ и вложенные предложения

#cobol

#cobol

Вопрос:

Я наткнулся на этот фрагмент кода, и мне интересно, какая строка будет выполнена, если x меньше 3.

 IF (X < 3)
    NEXT SENTENCE
ELSE
    GO TO A010-DO-A.

GO TO B010-DO-B.
GO TO C010-DO-C.
  

Я не уверен, заметит ли СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ предложение, вложенное в блок ELSE. При выполнении СЛЕДУЮЩЕГО ПРЕДЛОЖЕНИЯ оно перейдет к A010-DO-A. или К B010-DO-B.?

Комментарии:

1. В COBOL нет такого понятия, как «вложенное предложение», и, следовательно, здесь также нет «вложенного предложения в блоке ELSE». Это вложенный оператор.

Ответ №1:

Не путайте область действия утверждений и предложений в COBOL.

Предложения заканчиваются точкой (или запятой, если вы британец). Следующее предложение переходит к следующему утверждению, следующему за концом текущего предложения. В вашем примере это было бы GO TO B010-DO-B

В целом использование NEXT SENTENCE в Cobol обесценилось — по крайней мере, с момента введения ограничителей области видимости, таких как END-whatever (например. END-IF ), которые произошли где-то в 1985 году! Пожалуйста, больше не используйте NEXT SENTENCE . Вам нужно знать, что это такое и что оно делает, чтобы читать устаревший код, но, пожалуйста, избегайте его использования в любом новом коде.

Лучшим способом написания кода в вашем примере было бы:

 IF (X < 3) 
    CONTINUE  
ELSE  
    GO TO A010-DO-A 
END-IF    

GO TO B010-DO-B  
GO TO C010-DO-C
  

или…

 IF (X >= 3) 
    GO TO A010-DO-A 
END-IF    

GO TO B010-DO-B  
GO TO C010-DO-C
  

Обратите внимание, что все точки ( . ) были удалены, потому что
ограничитель области END-IF делает их избыточными. Периоды
необходимы только в конце процедур (т.е. абзацы / разделы) и в нескольких других местах.
CONTINUE Оператор в основном является неоперабельным, поэтому не оказывает никакого влияния, кроме того, что
заполнитель для сохранения синтаксиса допустимым.

КСТАТИ… Насколько я могу судить, утверждение GO TO C010-DO-C логически недостижимо.

Комментарии:

1. Спасибо за это. Я просто читаю этот устаревший код, который мне нужно преобразовать в процедуру PL / SQL (я попытался переписать здесь, чтобы сделать его универсальным). Некоторые из них очень запутанны, и я понимаю, почему СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ устарело.

Ответ №2:

Если X меньше 3

 IF (X < 3)
    NEXT SENTENCE
  

В противном случае или другими словами, если X равно или меньше 3

 ELSE
GO TO A010-DO-A.
  

Комментарии:

1. да, но будет ли оператор NEXT SENTENCE переходить к B010-DO-B. или К C010-DO-C.

2. Извините за отсутствие объяснений, я имел в виду то, что сказал @NeilB, поскольку он указывает, что это приведет к переходу К B010-DO-B. потому что ПЕРЕХОД К B010-DO-C. логически недоступен.

Ответ №3:

СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ «ответвляется» (ПЕРЕХОД на любом языке, сгенерированном компилятором) на строку кода, следующую за следующей точкой, которая физически расположена после оператора NEXT SENTENCE. Фактически это ПЕРЕХОД без использования «метки».

Как уже было сказано, его не следует использовать в новом коде.