Информация об изменениях

Сообщение Re[5]: семантика switch/case от 30.12.2015 19:34

Изменено 30.12.2015 19:36 ononim

ARK>>>Вот не понимаю, почему нельзя было сделать так, без этих break-костылей (разумеется, это не валидная программа на C):
O>>Потому что вот этот вот код будет более громоздко выглядеть
Автор: ononim
Дата: 17.12.15

ARK>Этот код плох и провоцирует ошибки при модификации, его необходимо переписать на функциях.
Это при модификации теми, кто привык к pascal-style switch'у. Ну так привыкли — и оставайтесь на нем, незачем ходить гулять в С-лес, ведь известно что там обезъяны, кашалоты ииии зеленый попугай

O>>Поймите, break — это абстракция более высокого уровня

ARK> Да, я действительно не понимаю, почему goto, добавленный в оператор выбора, делает его абстракцией более высокого уровня. Ну и потребности в такой абстракции (если ее можно так назвать) я пока не вижу. Примеры типа приведенного выше иллюстрируют, по моему скромному мнению, скорее вред этой "высокоуровневой абстракции".
Потому что goto, работающий снизу вверх не так уж и плох. Вот если бы можно было сделать так (надо сказать я в свое время был удивлен и немного подавлен от того что так делать нельзя, ну да ладно, идеальной симметрии в этом мире не найти):
switch (v)
{
case 1:
foo1();
break;

case 2:
foo2();
break;

case 3:
foo3();
goto case 1: //hehehe
}

Вот тогда это был бы "плохой" goto. А учитывая навязанный порядок исполнения сверху вниз — эти goto ничуть не хуже чем goto реализованные скажем обычным вашим "высокоурвневым" (без-break-ововым) switch'ем, код в кейсах которого склонен кидаться исключениями (чуть менее чем любой продакшен код). Ну так брейки хоть видно то сразу..
Re[5]: семантика switch/case
ARK>>>Вот не понимаю, почему нельзя было сделать так, без этих break-костылей (разумеется, это не валидная программа на C):
O>>Потому что вот этот вот код будет более громоздко выглядеть
Автор: ononim
Дата: 17.12.15

ARK>Этот код плох и провоцирует ошибки при модификации, его необходимо переписать на функциях.
Это при модификации теми, кто привык к pascal-style switch'у. Ну так привыкли — и оставайтесь на нем, незачем ходить гулять в С-лес, ведь известно что там обезъяны, кашалоты ииии зеленый попугай

O>>Поймите, break — это абстракция более высокого уровня

ARK> Да, я действительно не понимаю, почему goto, добавленный в оператор выбора, делает его абстракцией более высокого уровня. Ну и потребности в такой абстракции (если ее можно так назвать) я пока не вижу. Примеры типа приведенного выше иллюстрируют, по моему скромному мнению, скорее вред этой "высокоуровневой абстракции".
Потому что goto, работающий сключительно сверху вниз не так уж и плох. Вот если бы можно было сделать так (надо сказать я в свое время был удивлен и немного подавлен от того что так делать нельзя, ну да ладно, идеальной симметрии в этом мире не найти):
switch (v)
{
case 1:
foo1();
break;

case 2:
foo2();
break;

case 3:
foo3();
goto case 1: //hehehe
}

Вот тогда это был бы "плохой" goto. А учитывая навязанный порядок исполнения сверху вниз — эти goto ничуть не хуже чем goto реализованные скажем обычным вашим "высокоурвневым" (без-break-ововым) switch'ем, код в кейсах которого склонен кидаться исключениями (чуть менее чем любой продакшен код). Ну так брейки хоть видно то сразу..