На этом шаге мы рассмотрим использование оператора GOTO.
Э. Дейкстра выразил это таким образом: "Уже давно было замечено, что квалификация программистов является убывающей функцией от плотности предложений GOTO в создаваемых ими программах". Причина этого заключается в том, что основные конструкции структурного программирования гораздо более лаконичны и просты, чем их аналоги на неструктурном языке программирования, например MSX-BASIC. Отсюда сразу следует, что программы, написанные на MSX-BASIC, будут насыщены предложениями GOTO (написанными как явно, так и неявно!).
Четыре предложения структурного программирования на приведенной ниже схеме в той или иной форме используются во многих языках программирования (приведены примеры конструкций языка программирования Turbo Pascal).
Предложения структурного программирования | Неформальное описание | Соответствующая последовательность операторов на языке MSX-BASIC |
---|---|---|
If C Then S1 Else S2; | Если условие истинно, то выполнить предложение S1; в противном случае выполнить предложение S2. | IF C THEN S1 ELSE S2 |
While C Do S; | Повторить предложение S, пока условие С останется истинным (0 или более раз). | GOTO n m: S n: IF C THEN GOTO m |
Repeat S Until C; | Повторять последовательность S(один или более раз) до тех пор, пока условие С не станет истинным. | m: S IF NOT C THEN GOTO m |
Case K Of 1: S1; 2: S2; .... m: Sm; Else Sn; End; |
Выполнить предложение Si при K=i, где i изменяется от 1 до m. В противном случае выполнить предложение Sn. | ON K GOTO N1,N2,...,Nm Sn; GOTO s N1:S1; GOTO s N2:S2; GOTO s . . . . Nm:Sm s:... |
Обратим Ваше внимание на то, что при программировании конструкций структурного программирования на языке MSX-BASIC невозможно обойтись без оператора GOTO, с помощью которого осуществляется переход на ту или иную ветвь условной конструкции. Однако следует иметь в виду, что оператор GOTO используется только для передачи управления внутри конструкции, что не противоречит идеям структурного программирования.
Дейкстра продолжает: "Я пришел к убеждению, что предложение GOTO должно быть устранено из всех языков программирования "высокого уровня" (то есть отовсюду, за исключением, возможно, простых машинных кодов)".
Например, правила структурного программирования часто предписывают повторять одинаковые фрагменты программы в разных участках модуля, чтобы избавиться от употребления оператора GOTO. В этом случае "лекарство хуже болезни", т.к. дублирование резко увеличивает возможность внесения ошибок при изменении модуля в будущем.
Д.Кнут в работе [1] показал, что можно говорить о структурном программировании и при использовании оператора GOTO! Структурное программирование на языках FORTRAN или BASIC возможно, хотя с большими трудностями и некоторыми нежелательными последствиями. Так, например, Чармонмен и Ведженер [2] показали, что можно сделать программу на языке FORTRAN похожей на структурную!
На следующем шаге мы рассмотрим восходящее и нисходящее проектирование.