Здравствуйте, AlexRK, Вы писали:
S>>>>Аргументы?
ARK>>>Точно такие же скачки сквозь разные ветки управления. Сишный оператор switch не является оператором структурного программирования.
S>>Нет. При отсутствии break он будет выполняться строго сверху вниз, начиная от сработавшего case.
ARK>Строго вниз, строго вверх, нестрого назад — не имеет значения. Это разные ветки управления.
С этого места поподробнее: с какого времени порядок следования инструкций перестал иметь значение?
ARK>>>Чтобы "код выполнялся не полностью", существуют функции.
S>>Ну да, вместо читаемого кода плодить кучу функций и оборачивать всё if'ами. Годный подход, ага.
ARK>Какую кучу функций?
Функций должно быть столько, сколько надо.
ARK>Вместо вашего монстра код должен быть таким:
ARK>ARK>void DoFullWork()
ARK>{
ARK> checkLastWork();
ARK> clearTemp();
ARK> DoOptimizedWork();
ARK>}
ARK>void DoOptimizedWork()
ARK>{
ARK> ClearCaches();
ARK> DoWork();
ARK>}
ARK>void DoWork()
ARK>{
ARK> ...
ARK>}
ARK>
А чего это забываем, что эти функции вызывать, обернув if'ами? Давай я за тебя
void DoFullWork()
{
checkLastWork();
clearTemp();
DoOptimizedWork();
}
void DoOptimizedWork()
{
ClearCaches();
DoWork();
}
void DoWork()
{
...
}
int main()
{
someFlagEnum flag = getFlag();
if(flag==doFullWork) { DoFullWork(); }
if(flag==doOptimizedWork) { DoOptimizedWork(); }
if(flag==justDoIt) { DoWork(); }
}
Неужели ты будешь жертвовать читабельностью кода, будешь запутывать код только ради того чтобы свитч не применять? Да ладно?
Неужели вариант со свичем
НАСТОЛЬКО хуже?
switch(getFlag())
{
case doFullWork: { checkLastWork(); clearTemp(); }
case doOptimizedWork: { clearCaches(); }
case justDoIt: { doWork(); }
}
Более того, добавляем еще три флага и рисуем еще три функции? Еще больше запутываем?
Ты случаем не споришь только ради спора?
S>>switch в данном случае не при чём. Надо быть просто внимательным.
ARK>Абсолютно все языковые конструкции — это об удобстве и внимательности. Некоторые удобны, некоторые нет. А некоторые просто уродливы, как сишный switch.
он такой везде.
ARK>UPD. Сейчас посмотрел, в Java и JavaScript break необязателен, хотя мне казалось, что был обязателен. Теперь я знаю 4 языка с таким оператором. 
Проверил? Да ладно? о0
Я вот действительно проверил:
http://www.sergos.ru/player/js.html
function sw(val)
{
$( "#dd" ).append( "without break. val: " + val + "<br />---<br />" );
switch(val)
{
case 1: { $( "#dd" ).append( "case 1<br />" ); }
case 2: { $( "#dd" ).append( "case 2<br />" ); }
case 3: { $( "#dd" ).append( "case 3<br />" ); }
}
$( "#dd" ).append( "-----------------------------<br />" );
}
function swb(val)
{
$( "#dd" ).append( "with break. val: " + val + "<br />---<br />" );
switch(val)
{
case 1: { $( "#dd" ).append( "case 1<br />" ); break; }
case 2: { $( "#dd" ).append( "case 2<br />" ); break; }
case 3: { $( "#dd" ).append( "case 3<br />" ); break; }
}
$( "#dd" ).append( "-----------------------------<br />" );
}
for (i=1; i<=3; i++)
{
sw(i);
swb(i);
}
ARK>>>Да нет, такого нет больше нигде (ну, лично я не помню других подобных языков).
S>>Примеры?
ARK>C#, Go, Ruby, Pascal, Ada, Eiffel...
Точно так же проверял, как и жабаскрипт?