Читайте также: |
|
Если некоторое средство представляет собой плохую идею, то средства, построенные поверх его, оказываются еще хуже. Это правило можно продемонстрировать на переключателе, который, по существу, представляет собой массив меток. Например, в предположении наличия меток L1,: L5 объявление переключателя в языке Algol могло бы выглядеть следующим образом:
switch S:= L1, L2, if x < 5 then L3 else L4, L5
Тогда несомненно простой оператор goto S[i] является эквивалентным следующему:
if i = 1 then goto L1 else
if i = 2 then goto L2 else
if i = 3 then
if x < 5 then goto L3 else goto L4 else
if i = 4 then goto L5
Если goto стимулирует беспорядок в программировании, то переключатель делает его неизбежным.
В 1965 г. Хоар предложил наиболее подходящую замену переключателя - оператор case. Эта конструкция представляет собой правильную структуру, в которой операторы-компоненты выбираются в соответствии со значением i:
case i of
1: S1 | 2: S2 |........... | n: Sn
end
Однако разработчики современных языков программирования решили игнорировать это элегантное решение в пользу гибрида переключателя языка Algol и структурного оператора case:
case statement:
switch (i) {
case 1: S1; break;
case 2: S2; break;
:;
case n: Sn; break; }
Символ break либо обозначает разделитель между последовательными операторами Si, либо действует как goto на конец конструкции переключателя. В первом случае он является избыточным, а во втором - это замаскированный goto. Этот пример происходит из языка C - плохая концепция в плохой нотации,
Дата добавления: 2015-07-10; просмотров: 134 | Нарушение авторских прав