Для меня все сводится к удобочитаемости (и, следовательно, к более простому обслуживанию в дальнейшем).
Когда я смотрю на 2 сегмента кода в вашем вопросе, я нахожу блок IF
гораздо более читабельным.
За 22 года программирования на Cobol я никогда не использовал ALSO
в EVALUATE
.И использование блока EVALUATE
для простого бинарного теста истина / ложь кажется мне немного тупым.
Но не поймите меня неправильно, я люблю EVALUATE
s при правильном использовании.Когда я начал программировать на Java 6 лет назад, мне больше всего не хватало EVALUATE
.Конечно, у Java есть switch
, но его нельзя использовать так же гибко, как EVALUATE
.
Рассмотрим следующий сегмент кода:
IF ACTION = "START"
PERFORM START
ELSE IF ACTION = "STOP"
PERFORM STOP
ELSE IF ACTION = "PROCESS" AND FILE-NAME = "A"
PERFORM PROCESS-A-FILE
ELSE IF ACTION = "PROCESS" AND FILE-NAME = "B"
PERFORM PROCESS-B-FILE
ELSE IF ACTION = "RESET"
PERFORM RESET
ELSE
PERFORM INVALID-ACTION-ERROR.
Этот набор операторов IF
есть некоторые реальные проблемы.Не добавляя 5 END-IF
s к его концу, вы должны завершить блок с полной остановкой.Но вы бы не смогли этого сделать, если бы, скажем, код был внутри блока PERFORM UNTIL
... END-PERFORM
.Хотя этот пример довольно прост, в более сложном (и более длинном) примере было бы сложно определить, с каким ELSE
идет, а с каким IF
.
.Блок EVALUATE TRUE
, таким образом:
EVALUATE TRUE
WHEN ACTION = "START"
PERFORM START
WHEN ACTION = "STOP"
PERFORM STOP
WHEN ACTION = "PROCESS" AND FILE-NAME = "A"
PERFORM PROCESS-A-FILE
WHEN ACTION = "PROCESS" AND FILE-NAME = "B"
PERFORM PROCESS-B-FILE
WHEN ACTION = "RESET"
PERFORM RESET
WHEN OTHER
PERFORM INVALID-ACTION-ERROR
END-EVALUATE
Изменение этого EVALUATE
на TRUE ALSO TRUE
сделает его гораздо менее читабельным, и это действительно не нужно.