Re[9]: семантика switch/case
От: ononim  
Дата: 17.12.15 14:38
Оценка:
__>безусловно, но использовать более одного return — это моветон
Это многое объясняет Впрочем возможно для С это действительно не комильфо, но тут... та-да! на сцену на белом ишаке выезжает С++ с RAII наперевес
Как много веселых ребят, и все делают велосипед...
Re[11]: семантика switch/case
От: ononim  
Дата: 17.12.15 14:45
Оценка: +1
S>>Это НЕ недоработки, друг мой. Такое поведение заложено в свитч изначально. И оно, наравне с if, позволяет гибко управлять обработкой условий.
TB>Разве не очевидно, что можно придумать куда менее травмоопасные способы добиться той же или даже большей гибкости?
TB>Зачем такие грабли жирные повесили? Ради чего? Только по скудоумию двух кульных какир из 70го года.
Ни разу не помню чтоб напарывался на эти грабли. То есть если и напарывался — то совершенно несеръезно. В тоже время пользуюсь этой гибкостью регулярно. ИМХО это примерно грабли такого же рода как "ух ты, а оказывается поинтер после free не становится равным нулю"
Как много веселых ребят, и все делают велосипед...
Re[9]: о0
От: Sheridan Россия  
Дата: 17.12.15 14:48
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>Здравствуйте, Sheridan, Вы писали:


ARK>>>Строго вниз, строго вверх, нестрого назад — не имеет значения. Это разные ветки управления.

S>>С этого места поподробнее: с какого времени порядок следования инструкций перестал иметь значение?
ARK>Секунду, причем тут порядок следования инструкций?

Строго вниз, строго вверх, нестрого назад — не имеет значения.


S>>А чего это забываем, что эти функции вызывать, обернув if'ами?

ARK>С того, что их не надо оборачивать if'ами. В изначальном коде про if'ы ничего не было. Мой вариант полностью эквивалентен вашему первому варианту.
Дааа? switch у меня обрабатывает условие, а не if. Или ты не в курсе, что свич по условию работает?

S>>Неужели ты будешь жертвовать читабельностью кода, будешь запутывать код только ради того чтобы свитч не применять? Да ладно?

ARK>Я использую switch, когда надо. Но всегда без переходов в соседние ветки.
В подавляющем большинстве случаев его так и используют

S>>Более того, добавляем еще три флага и рисуем еще три функции? Еще больше запутываем?

ARK>Флаги это вообще зло. И если мы "добавляем еще три флага", то это повод задуматься о рефакторинге говнокода.
Да и код вообще зло. Лучше на канары, правда?

ARK>Кстати, а если мы вдруг заходим добавить в DoFullWork в самом конце еще Print (но не в doOptimizedWork и не в justDoIt)?

Про подобные варианты разворачивания событий я писал уже давно
Автор: Sheridan
Дата: 27.08.15

Я в курсе, что когда возразить нечего — один из вариантов попробовать положить соперника на лопатки — усложнять задачу до тех пор, пока собеседник не скажет "В этом случае да, мой инструмент не подходит". Обычно после этого инструмент соперника объявляется гавном.


ARK>>>UPD. Сейчас посмотрел, в Java и JavaScript break необязателен, хотя мне казалось, что был обязателен. Теперь я знаю 4 языка с таким оператором.

S>>Проверил? Да ладно? о0
S>>Я вот действительно проверил
ARK>И? Результат проверки чем-то отличается?
По поведению от c\c++? Нет. О чём я тебе и говорил

ARK>>>>>Да нет, такого нет больше нигде (ну, лично я не помню других подобных языков).

S>>>>Примеры?
ARK>>>C#, Go, Ruby, Pascal, Ada, Eiffel...
S>>Точно так же проверял, как и жабаскрипт?
ARK>По сути есть что сказать?
По сути я только и говорю. А у тебя?
Matrix has you...
Re[11]: мда...
От: Sheridan Россия  
Дата: 17.12.15 14:52
Оценка:
Здравствуйте, T4r4sB, Вы писали:

S>>Это НЕ недоработки, друг мой. Такое поведение заложено в свитч изначально. И оно, наравне с if, позволяет гибко управлять обработкой условий.

TB>Разве не очевидно, что можно придумать куда менее травмоопасные способы добиться той же или даже большей гибкости?
TB>Зачем такие грабли жирные повесили? Ради чего? Только по скудоумию двух кульных какир из 70го года.

Я не могу понять что в switch не так, чем он травмоопасен? Или ты про ситуацию "студент недоучка спотыкается об switch и ломает ногу каждые три часа"? Ради этого надо вонь поднимать и switch ругать? А может всётаки студенту вторую ногу сломать, чтобы выучил наконец язык, на котором собрался писать?
А когда "студент" споткнется об
if(val=16) {...}

, тогда нужно еще и обработку условий коричнево помазать, так что ли?
Matrix has you...
Re[10]: о0
От: AlexRK  
Дата: 17.12.15 15:04
Оценка:
Здравствуйте, Sheridan, Вы писали:

ARK>>>>Строго вниз, строго вверх, нестрого назад — не имеет значения. Это разные ветки управления.

S>>>С этого места поподробнее: с какого времени порядок следования инструкций перестал иметь значение?
ARK>>Секунду, причем тут порядок следования инструкций?
S>

S>Строго вниз, строго вверх, нестрого назад — не имеет значения.


Ну вы представляете, что такое структурное программирование?
Понимаете, что "порядок следования инструкций" и "направление безусловного перехода" — это вещи не связанные?

S>>>А чего это забываем, что эти функции вызывать, обернув if'ами?

ARK>>С того, что их не надо оборачивать if'ами. В изначальном коде про if'ы ничего не было. Мой вариант полностью эквивалентен вашему первому варианту.
S>Дааа? switch у меня обрабатывает условие, а не if. Или ты не в курсе, что свич по условию работает?

Причем тут "switch у меня обрабатывает условие"?
У вас нет _вызова_ функции и в вашем коде нет ничего, что указывало бы на то, откуда этот флаг берется.

S>>>Неужели ты будешь жертвовать читабельностью кода, будешь запутывать код только ради того чтобы свитч не применять? Да ладно?

ARK>>Я использую switch, когда надо. Но всегда без переходов в соседние ветки.
S>В подавляющем большинстве случаев его так и используют

Нет, в подавляющем большинстве случаев его так не используют.

S>>>Более того, добавляем еще три флага и рисуем еще три функции? Еще больше запутываем?

ARK>>Флаги это вообще зло. И если мы "добавляем еще три флага", то это повод задуматься о рефакторинге говнокода.
S>Да и код вообще зло. Лучше на канары, правда?

Демагогия. Могу только лишь еще раз сказать, что флаги — это зло.

ARK>>Кстати, а если мы вдруг заходим добавить в DoFullWork в самом конце еще Print (но не в doOptimizedWork и не в justDoIt)?

S>Про подобные варианты разворачивания событий я писал уже давно
Автор: Sheridan
Дата: 27.08.15

S>

S>Я в курсе, что когда возразить нечего — один из вариантов попробовать положить соперника на лопатки — усложнять задачу до тех пор, пока собеседник не скажет "В этом случае да, мой инструмент не подходит". Обычно после этого инструмент соперника объявляется гавном.


Да-да. А кто начал усложнять про "добавляем еще три флага"? "Не лучше ль, кума, на себя оборотиться?" (с)

ARK>>>>UPD. Сейчас посмотрел, в Java и JavaScript break необязателен, хотя мне казалось, что был обязателен. Теперь я знаю 4 языка с таким оператором.

S>>>Проверил? Да ладно? о0
S>>>Я вот действительно проверил
ARK>>И? Результат проверки чем-то отличается?
S>По поведению от c\c++? Нет. О чём я тебе и говорил

Так вот, языков таких мне известно 4 штуки. Языков с другим поведением — гораздо больше.

ARK>>По сути есть что сказать?

S>По сути я только и говорю. А у тебя?

По сути: C#, Go, Ruby, Pascal, Ada, Eiffel — обладают семантикой, отличной от C/C++.
Re[7]: Теперь понятно.
От: Sheridan Россия  
Дата: 17.12.15 15:05
Оценка:
Здравствуйте, _hum_, Вы писали:

X>>А можно реальный пример, где Вы решили сэкономить в угоду читабельности, убрав пару break.

__>да в любом коде лишняя торчащая и затеняющая основное значение конструкция — это вред. а тут этот break:
__>

__>swicth(a)
__>{
__>case 1: x = 1001; break;
__>case 2: x = 4002; break;
__>};

__>swicth(a)
__>{
__>case 1: x = 1001; 
__>case 2: x = 4002; 
__>};
__>

__>(особенно, когда кейсов много, и ошибиться в них ни в коем случае нельзя)


Друг мой, изучай инструмент, с которым работаешь, мой тебе совет.
И тогда у тебя не будет случаться таких факапов, как случился в твоём проекте с switch. Надеюсь, ты успел понять где у тебя ошибка перед сдачей релиза, а не после...
Matrix has you...
Re[12]: мда...
От: ononim  
Дата: 17.12.15 15:15
Оценка: +1
S>>>Это НЕ недоработки, друг мой. Такое поведение заложено в свитч изначально. И оно, наравне с if, позволяет гибко управлять обработкой условий.
TB>>Разве не очевидно, что можно придумать куда менее травмоопасные способы добиться той же или даже большей гибкости?
TB>>Зачем такие грабли жирные повесили? Ради чего? Только по скудоумию двух кульных какир из 70го года.
S>Я не могу понять что в switch не так, чем он травмоопасен?

Это холивар "либерализм рулит" vs "а вот при Сталине case-ы не проваливались бы"
Как много веселых ребят, и все делают велосипед...
Re[11]: о0
От: Sheridan Россия  
Дата: 17.12.15 15:19
Оценка:
Здравствуйте, AlexRK, Вы писали:

S>>

S>>Строго вниз, строго вверх, нестрого назад — не имеет значения.

ARK>Ну вы представляете, что такое структурное программирование?
ARK>Понимаете, что "порядок следования инструкций" и "направление безусловного перехода" — это вещи не связанные?
Я — да. А ты понимаешь, что код не следует загромождать лишними сущностями, если можно написать лакончно, это будет читабельно и будет работать?

S>>Дааа? switch у меня обрабатывает условие, а не if. Или ты не в курсе, что свич по условию работает?

ARK>Причем тут "switch у меня обрабатывает условие"?
ARK>У вас нет _вызова_ функции и в вашем коде нет ничего, что указывало бы на то, откуда этот флаг берется.
То есть мне нужно создать новый проект, написать кучу кода, обложить тестами и выложить на гитхаб дабы было понятно откуда в переменной появляется значение? Или мы всетаки опустим незначащие сущности?

S>>>>Неужели ты будешь жертвовать читабельностью кода, будешь запутывать код только ради того чтобы свитч не применять? Да ладно?

ARK>>>Я использую switch, когда надо. Но всегда без переходов в соседние ветки.
S>>В подавляющем большинстве случаев его так и используют
ARK>Нет, в подавляющем большинстве случаев его так не используют.
Погоди. Давай расставим точки везде. Я соглашаюсь с тобой, что в подавляющем большинстве случаев везде в case'ах присутствует break, что делает невозможным переход в низлежайший case.
А ты ВНЕЗАПНО со мной не соглашаешься.
Спор ради спора?

S>>>>Более того, добавляем еще три флага и рисуем еще три функции? Еще больше запутываем?

ARK>>>Флаги это вообще зло. И если мы "добавляем еще три флага", то это повод задуматься о рефакторинге говнокода.
S>>Да и код вообще зло. Лучше на канары, правда?
ARK>Демагогия. Могу только лишь еще раз сказать, что флаги — это зло.
И переменные — зло. И функции — зло. Классы тоже зло... Строго говоря, ООП целиком зло. А по чесноку — программирование зло из зол. Лучше на канары. Да?

ARK>>>Кстати, а если мы вдруг заходим добавить в DoFullWork в самом конце еще Print (но не в doOptimizedWork и не в justDoIt)?

S>>Про подобные варианты разворачивания событий я писал уже давно
Автор: Sheridan
Дата: 27.08.15

S>>

S>>Я в курсе, что когда возразить нечего — один из вариантов попробовать положить соперника на лопатки — усложнять задачу до тех пор, пока собеседник не скажет "В этом случае да, мой инструмент не подходит". Обычно после этого инструмент соперника объявляется гавном.

ARK>Да-да. А кто начал усложнять про "добавляем еще три флага"? "Не лучше ль, кума, на себя оборотиться?" (с)
У меня нет цели доказать что switch истина в последней инстанции и все обязаны его применять. Я всего лишь пытаюсь рассказать о том, что его семантика имеет смысл и что есть варианты использовать эту семантику на пользу себе. А тут же в ветках, в том числе и у тебя, просматривается "свитч — гавно, его клепали неучи и вообще его использовать — зло как и goto"

ARK>>>>>UPD. Сейчас посмотрел, в Java и JavaScript break необязателен, хотя мне казалось, что был обязателен. Теперь я знаю 4 языка с таким оператором.

S>>>>Проверил? Да ладно? о0
S>>>>Я вот действительно проверил
ARK>>>И? Результат проверки чем-то отличается?
S>>По поведению от c\c++? Нет. О чём я тебе и говорил
ARK>Так вот, языков таких мне известно 4 штуки. Языков с другим поведением — гораздо больше.
ARK>По сути: C#, Go, Ruby, Pascal, Ada, Eiffel — обладают семантикой, отличной от C/C++.
Примеры, камрад, примеры. Наговнокодь, как я, немножко кода по типу того что я показал. А лучше 1-в-1. И покажи результат.
Matrix has you...
Re[11]: семантика switch/case
От: neFormal Россия  
Дата: 17.12.15 15:25
Оценка:
Здравствуйте, T4r4sB, Вы писали:

F>>а как же?

F>>https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%94%D0%B0%D1%84%D1%84%D0%B0
TB>Оно компилируется в Студии-2003 О_О

ага, лёгкий способ завалить человека на собеседовании.
наравне с `a[b]==b[a]`
...coding for chaos...
Re[8]: о0
От: _hum_ Беларусь  
Дата: 17.12.15 15:25
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Здравствуйте, AlexRK, Вы писали:


S>>>>>Аргументы?


S>А чего это забываем, что эти функции вызывать, обернув if'ами? Давай я за тебя

S>
S>void DoFullWork()
S>{
S>    checkLastWork();
S>    clearTemp();
S>    DoOptimizedWork();
S>}

S>void DoOptimizedWork()
S>{
S>    ClearCaches();
S>    DoWork();
S>}

S>void DoWork()
S>{
S>    ...
S>}

S>int main()
S>{
S>    someFlagEnum flag = getFlag();
S>    if(flag==doFullWork)      { DoFullWork(); }
S>        if(flag==doOptimizedWork) { DoOptimizedWork(); }
S>        if(flag==justDoIt)        { DoWork(); }
S>}
S>

S>Неужели ты будешь жертвовать читабельностью кода, будешь запутывать код только ради того чтобы свитч не применять? Да ладно?
S>Неужели вариант со свичем НАСТОЛЬКО хуже?
S>
S>switch(getFlag())
S>{
S>    case doFullWork:      { checkLastWork(); clearTemp(); }
S>    case doOptimizedWork: { clearCaches(); }
S>    case justDoIt:        { doWork(); }
S>}
S>

S>Более того, добавляем еще три флага и рисуем еще три функции? Еще больше запутываем?
S>Ты случаем не споришь только ради спора?

Ваш код ужасен для чтения и сопровождения (в нем логика работы завязана на goto-style, из-за чего фрагменты кода становятся сильно связанными между собою). И не надо плодить лишних процедур, достаточно поступить следующим образом:

void VoidLastWork(void){ checkLastWork(); clearTemp(); }
 void ClearCashes(){ clearCaches(); }
 void LaunchWorkProcedure(){doWork();}

int main()
{
    someFlagEnum flag = getFlag();

    if(flag == doFullWork)      { VoidLastWork(); ClearCashes(); LaunchWorkProcedure();}
    else
    if(flag == doOptimizedWork) { ClearCashes();LaunchWorkProcedure(); }    
    else 
    if(flag == justDoIt)        { LaunchWorkProcedure(); }
}


Теперь представьте, что у вас добавился флаг "doSpecialWork", предполагающий выполнение полной работы, но с пропуском этапа очистки кэша. В каком варианте его легче будет реализовать?
Re[9]: о0
От: Sheridan Россия  
Дата: 17.12.15 15:36
Оценка:
Здравствуйте, _hum_, Вы писали:

__>Ваш код ужасен для чтения и сопровождения (в нем логика работы завязана на goto-style, из-за чего фрагменты кода становятся сильно связанными между собою). И не надо плодить лишних процедур, достаточно поступить следующим образом:

Да я уже понял. Наилучшее ружжо — ваше. Остальные — брёвна.

__>Теперь представьте, что у вас добавился флаг "doSpecialWork", предполагающий выполнение полной работы, но с пропуском этапа очистки кэша. В каком варианте его легче будет реализовать?

А теперь представьте, что спор не о флагах, а о возможностях switch. Ой, погодите, а ведь именно так оно и есть о0
Matrix has you...
Re[12]: о0
От: AlexRK  
Дата: 17.12.15 16:05
Оценка:
Здравствуйте, Sheridan, Вы писали:

ARK>>Ну вы представляете, что такое структурное программирование?

ARK>>Понимаете, что "порядок следования инструкций" и "направление безусловного перехода" — это вещи не связанные?
S>Я — да. А ты понимаешь, что код не следует загромождать лишними сущностями, если можно написать лакончно, это будет читабельно и будет работать?

То, что сегодня лаконично и читабельно, завтра окажется говнокодом.
Для того, чтобы формализовать правила, что лаконично, а что нет, изобрели структурное программирование. Сишный свитч нарушает правила структурного программирования.

S>То есть мне нужно создать новый проект, написать кучу кода, обложить тестами и выложить на гитхаб дабы было понятно откуда в переменной появляется значение? Или мы всетаки опустим незначащие сущности?


Мой код _полностью_ эквивалентен вашему первоначальному варианту. Этот факт вам понятен?

Если выбор осуществляется именно флагом, то да, можно и нужно использовать и свитч. В сочетании с набором функций. Fallthrough при этом не нужен.

S>Погоди. Давай расставим точки везде. Я соглашаюсь с тобой, что в подавляющем большинстве случаев везде в case'ах присутствует break, что делает невозможным переход в низлежайший case.

S>А ты ВНЕЗАПНО со мной не соглашаешься.

А, да. Тут моя ошибка, прошу прощения. Я неправильно понял.

S>У меня нет цели доказать что switch истина в последней инстанции и все обязаны его применять. Я всего лишь пытаюсь рассказать о том, что его семантика имеет смысл и что есть варианты использовать эту семантику на пользу себе. А тут же в ветках, в том числе и у тебя, просматривается "свитч — гавно, его клепали неучи и вообще его использовать — зло как и goto"


Ну, смысл можно найти во всем. Всегда найдется некоторый контекст, в котором некоторое средство будет удобно и адекватно.
А здесь говорится, что выбор создателей С был, по мнению некоторых людей, не вполне удачен. Для языка общего назначения, которым С и стал по факту.

S>Примеры, камрад, примеры. Наговнокодь, как я, немножко кода по типу того что я показал. А лучше 1-в-1. И покажи результат.


Хорошо. Я сделаю это сегодня, чуть позже.
Re[10]: о0
От: _hum_ Беларусь  
Дата: 17.12.15 16:11
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Здравствуйте, _hum_, Вы писали:



__>>Теперь представьте, что у вас добавился флаг "doSpecialWork", предполагающий выполнение полной работы, но с пропуском этапа очистки кэша. В каком варианте его легче будет реализовать?

S>А теперь представьте, что спор не о флагах, а о возможностях switch. Ой, погодите, а ведь именно так оно и есть о0

вопрос не о возможностях switch, а о его семантике — насколько она удачна, чтобы писать легко читаемый и модифицируемый код.
вы привели пример, который, по-вашему, хорошо иллюстрирует достоинства свитча. я вам показал, что такой код не обладает модифицируемостью, и в то же время не намного сокращает объем кода (в отличие от if-подхода). что еще?
Re[4]: семантика switch/case
От: DarkEld3r  
Дата: 17.12.15 16:46
Оценка: 8 (1)
Здравствуйте, Sheridan, Вы писали:

ARK>>Вообще, конструкция switch в том виде, в каком она есть в С/C++,

S>Он такой везде
Нет.

В D каждый case должен оканчиваться или break или "goto case" (явное указание провалиться дальше). То есть случайно пропустить break не получится. Ну и там есть некоторое количество специальных случаев когда break не требуется, например, если выбрасывается исключение.
В Swift и Go есть специальное ключевое слово fallthrough, а break используется по умолчанию и явно писать его не требуется.
В C#, опять же, неявного fallthrough нет, зато есть goto на любой case.
Некоторые языки (например, Rust) обходятся без switch как такового и вместе этого предлагают паттерн матчинг. Естественно, без fallthrough.
Отредактировано 17.12.2015 17:41 DarkEld3r . Предыдущая версия .
Re[10]: семантика switch/case
От: DarkEld3r  
Дата: 17.12.15 17:01
Оценка:
Здравствуйте, neFormal, Вы писали:

F>а как же?

F>https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%94%D0%B0%D1%84%D1%84%D0%B0
А ничего что там написано следующее?

В современных решениях польза от применения метода Даффа сомнительна. Метод затрудняет работу оптимизирующих компиляторов и предсказателя переходов.[1] Например, после удаления кода Даффа из XFree86 версии 4.0, бинарные файлы уменьшились примерно на 0,5 МБ, и сервер стал загружаться быстрее.


Да и разве тут кто-то ратует за полный запрет такой возможности? Просто можно было бы ввести ключевое слово типа fallthrough для явного указания намерений.
Re[13]: о0
От: Sheridan Россия  
Дата: 17.12.15 17:24
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>А, да. Тут моя ошибка, прошу прощения. Я неправильно понял.



ARK>Ну, смысл можно найти во всем. Всегда найдется некоторый контекст, в котором некоторое средство будет удобно и адекватно.



S>>Примеры, камрад, примеры. Наговнокодь, как я, немножко кода по типу того что я показал. А лучше 1-в-1. И покажи результат.

ARK>Хорошо. Я сделаю это сегодня, чуть позже.


зы Сначала начал писать много текста, но потом дочитал до адекватных ответов и потёр все нафиг. Спасибо.
Matrix has you...
Re[11]: о0
От: Sheridan Россия  
Дата: 17.12.15 17:28
Оценка:
Здравствуйте, _hum_, Вы писали:

__>вопрос не о возможностях switch, а о его семантике — насколько она удачна, чтобы писать легко читаемый и модифицируемый код.

Ну есть свич и есть if. У нас есть выбор, это же хорошо!

__>вы привели пример, который, по-вашему, хорошо иллюстрирует достоинства свитча. я вам показал, что такой код не обладает модифицируемостью, и в то же время не намного сокращает объем кода (в отличие от if-подхода). что еще?

Естественно, на каждую хитрую ... найдется ... с винтом, это отрицать нельзя. Да и языки, в том числе и ц++, достаточно выразительные, чтобы одно и то же можно было сделать множеством способов.
Я всего лишь показал наглядный пример. Не больше, не меньше.
Matrix has you...
Re[5]: семантика switch/case
От: VladFein США  
Дата: 17.12.15 17:29
Оценка: +2 :)
Здравствуйте, _hum_, Вы писали:

__>... и на тебе — "все, что вы знали о switch — неправда" . потому и предупреждаю других граждан


Спасибо, конечно. Но "другие граждане" на этом форуме уже знают как работает switch
Отредактировано 17.12.2015 17:29 VladFein . Предыдущая версия .
Re[11]: семантика switch/case
От: neFormal Россия  
Дата: 17.12.15 17:36
Оценка:
Здравствуйте, DarkEld3r, Вы писали:

F>>а как же?

F>>https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%94%D0%B0%D1%84%D1%84%D0%B0
DE>А ничего что там написано следующее?

ничего, я разрешаю.
...coding for chaos...
Re[5]: семантика switch/case
От: Sheridan Россия  
Дата: 17.12.15 18:30
Оценка:
Здравствуйте, DarkEld3r, Вы писали:

DE>Здравствуйте, Sheridan, Вы писали:


ARK>>>Вообще, конструкция switch в том виде, в каком она есть в С/C++,

S>>Он такой везде
DE>Нет.

DE>В D каждый case должен оканчиваться или break или "goto case" (явное указание провалиться дальше). То есть случайно пропустить break не получится. Ну и там есть некоторое количество специальных случаев когда break не требуется, например, если выбрасывается исключение.

Тогда там switch не нужен, он становится if'ом при таком раскладе, но с другим синтаксисом и позволяет не писать города из if else.

DE>В Swift и Go есть специальное ключевое слово fallthrough, а break используется по умолчанию и явно писать его не требуется.

То есть просто зеркальное поведение от ц++, так? Левая и правая руки. Если так, то пример не показателен. В ц++ надо явно проставлять бряки, когда хочешь сработку только одного case, а тут наоборот, надо явно указать fallthrough если нужна сработка нескольких по порядку.

DE>Некоторые языки (например, Rust) обходятся без switch как такового и вместе этого предлагают паттерн матчинг. Естественно, без fallthrough.

Интересный язык. Буду чего нибудь писать в плане скриптов — попробую как нибудь.
Впрочем, ихний match хотя и мощный, но fallthrough действительно, похоже, нет и они этим показательно гордятся, гм.

Что ж. Я погорячился про "все". Пусть будет "многие"
Matrix has you...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.