А зачем Вам понадобилось вставлять его "в любое другое место"? Даже по логике, его единственное место в самом низу. Он сработает тогда, когда все варианты уже перебранные.
С жирным согласен. Я не смог придумать ситуацию, когда он мог бы иметь смысл в другом месте.
Соответственно и практической нужды нет. Понадобилось для красоты.
Увидел в хелпе эту возможность - решил попробовать. А не работает...
Концептуально, это хреново, когда хэлп с компилятором разные песни поют.
Как на заборе. Написано одно, а фактически совсем даже наоборот.
Но... Но. Зачем-то понадобилось вводить в смущение и описывать эту возможность в манах?...
.
Извиняюсь, что вынужден "поднимать" тему.
Уважаемые разработчики, прокомментируйте, плз.
Вопросы заданы. Кому молчим?
Из справки:
-
Вариант default не обязательно должен быть последним. Если ни одна константа не соответствует значению выражения и вариант default отсутствует, то не выполняется никаких действий. Ключевое слово case вместе с константой служат просто метками, и если будут выполняться операторы для некоторого варианта case, то далее будут выполняться операторы всех последующих вариантов до тех пор, пока не встретится оператор break, что позволяет связывать одну последовательность операторов с несколькими вариантами.
-
"Не обязательно должен быть последним" можно понимать и как то, что не обязательно, чтобы switch заканчивался оператором default'om, как раз это и расталковывается в справке в следущем предложении - "Если ни одна константа не соответствует значению выражения и вариант default отсутствует, то не выполняется никаких действий"
Из справки:
-
Вариант default не обязательно должен быть последним. Если ни одна константа не соответствует значению выражения и вариант default отсутствует, то не выполняется никаких действий. Ключевое слово case вместе с константой служат просто метками, и если будут выполняться операторы для некоторого варианта case, то далее будут выполняться операторы всех последующих вариантов до тех пор, пока не встретится оператор break, что позволяет связывать одну последовательность операторов с несколькими вариантами.
-
"Не обязательно должен быть последним" можно понимать и как то, что не обязательно, чтобы switch заканчивался оператором default'om, как раз это и расталковывается в справке в следущем предложении - "Если ни одна константа не соответствует значению выражения и вариант default отсутствует, то не выполняется никаких действий"
Хм... Действительно, можно и так прочитать :) Но только при большой симпатии к написателям этого мана. Или если хочешь прочитать и понять написанное именно так, в одном, определенном контексте. А это желание свойственно любому читателю, теи более уже отягощенному знанием (и не малым; респект) о предмете.
Я, конечно, был неправ, что дернул голую цитату, без обвязки (поправил). Только это обстоятельство сути самого дела не меняет. Мне важно было понять смысл, а не обсосать ее, дернутую.
А вот ты в своем ответе:
во-первых, расширив цитату, опустил первое предложение;
во-вторых, проигнорировал ссылку на Ковалева.
Что касается первого. Цитата состоит из трех предложений. Если читаем слева направо, то логика понимания строится по схеме
Знание = Предложение_1;
Знание = Знание + Предложение_2;
Знание = Знание + Предложение_3;
Не всегда, но обычно в подобных текстах важность и приоритет последовательных утверждений понижается. И хоть здесь все три утверждения равнозеачны, мое прочтение более естественно, чем предложенная тобой синтетика.
Что касается второго. У Ковалева утверждение идет открытым текстом, без разночтений. И здесь, симпатизируя автору, я склонен искать ему оправдания. Я считаю, что именно правильное, с точки зрения правильного русккого технического, прочтение привело его к ложному утверждению. Он просто не проверился, я полагаю ...
В итоге. После обращения к первоисточникам для меня ответ на вопрос: "Можно ли разместить default в другом месте, кроме как в конце (или не использовать его вовсе)?" был однозначен: "Да. Можно."
Нижайшая просьба к разработчикам - учитывйте, плз, эти замечания при документировании пятерки. Сегодняшняя документация по четверке не выдерживает никакой критики. Впрочем - и за это спасибо. Могло быть гораздо хуже.
Может это и смахивает на буквоедство в обывательском смысле этого слова, но мы ведь занимаемся программированием, а это есть буквоедство чистейшей воды. Все понятия и утыерждения должны быть сугубо формализованы и абсолютно однозначны. Лирике типа "может быть" (а может и не быть) здесь не место.
Visual Studio 2008 позволяет конструкцию без case (генерируется только Warning)
switch(i) { default: ...; }она может пригодиться ненадолго, во время написания программы. Когда есть единственный проработанный вариант, но уже хочется обозначить в программе место для перебора вариантов.
Visual Studio 2008 позволяет конструкцию без case (генерируется только Warning)
она может пригодиться ненадолго, во время написания программы. Когда есть единственный проработанный вариант, но уже хочется обозначить в программе место для перебора вариантов.Я примерно с такими намерениями и начал эксперимент :)
Признаться, я ждал реакции от авторов упомянутых документов. И жду. Придется в лоб:
Уважаемые авторы, будьте так добры, обратите внимание, прокомментируйте.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте.
Про Switch в документации сказано, в частности:
"Вариант default не обязательно должен быть последним" - из встроенной справки
Дополняю, чтобы не вырывать из контекста:
Операторы, связанные с меткой default, выполняются, если ни одна из констант в операторах case не равна значению выражения. Вариант default не обязательно должен быть последним. Если ни одна константа не соответствует значению выражения и вариант default отсутствует, то не выполняется никаких действий.
"Обычно вариант default указывается в теле оператора switch последним, но он может находиться и в любом другом месте тела или вообще отсутствовать" - из учебника С.Ковалева
Дополняю, чтобы не вырывать из контекста:
Вариант default состоит из ключевого слова default, : (знака двоеточие) и операторов. Обычно вариант default указывается в теле оператора switch последним, но он может находиться и в любом другом месте тела или вообще отсутствовать.
К сожалению, в действительности попытки вставить его "в любое другое место" дают ошибку.
В случае:
компилятор выдает:
'default' - no 'case' statement before ..\experts\scripts\_s_Switch.mq4 (29, 7)
'case' - unexpected token ..\experts\scripts\_s_Switch.mq4 (31, 7)
'case' - unexpected token ..\experts\scripts\_s_Switch.mq4 (33, 7)
'case' - unexpected token ..\experts\scripts\_s_Switch.mq4 (35, 7)
В случае:
компилятор выдает:
'case' - unexpected token ..\experts\scripts\_s_Switch.mq4 (35, 7)
Примечательно выделенное жирным... Я правильно понимаю, что: типа без 'case' спереди делать неча?
Ну поставили 'case' перед. Результат все равно отрицательный.
Вот такие дела. Может я где-то ошибся?
.