![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Sunvas |
|
|||
![]() Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: нет Всего: 89 |
Начал учить C#. Когда наткнулся на синтаксис оператора switch, меня удивило, зачем после каждого case-a разработчики придумали лепить Break;? Зачем с логической точки зрения?
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Потому что шарп не поддерживает сквозного выполнения switch. Так уж разработчики его решили, чтоб не путались программеры
![]() ![]() Поддерживает только в том случае, если case, идущие за ним, пустые
даже в последнем case, даже в default нужен break. вот насколько все было плохо ![]() Это сообщение отредактировал(а) tol05 - 26.6.2007, 09:54 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
Sunvas |
|
|||
![]() Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: нет Всего: 89 |
Вот именно! Не поддерживает! Если бы поддерживал - тогда понятно, а так - не поддерживает и не понятно, почему разработчики придумали его туда лепить. Чтобы программеры не путались? Хм. А до этого они путались? Шарп от С++ и так очень отличается, так что не думаю что еще одни грабли что-то бы изменили.... -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
0000 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.7.2006 Где: Нижний Новгород Репутация: 2 Всего: 5 |
ну свитч - это же как аналог if (...) {...} else {...}
чтобы из всех возможных твоих вариантов выполнился один - и как только выполнился - сразу вышел, чтобы экономить время, не проверяя остальные |
|||
|
||||
Sunvas |
|
|||
![]() Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: нет Всего: 89 |
0000, Брр. Ну написал же уже:
!!! -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
Shaggie |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 570 Регистрация: 21.12.2006 Где: outer space Репутация: нет Всего: 72 |
Видимо, чтобы С++ программерам проще было на шарп переходить.
Хотя, согласен, решение гениальностью не отличается, меня тоже покоробило. |
|||
|
||||
Sunvas |
|
|||
![]() Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: нет Всего: 89 |
Честно говоря простоты в этом не вижу. Зачем бесполезный рудимент?. -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
anthony |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 25.6.2007 Где: Украина Репутация: 1 Всего: 5 |
Вывод: явное написание break увеличивает ясность кода (в C# этому вопросу уделено довольно большое внимание, в частности, явный синтаксис при перекрытии или сокрытии метода), а сквозное выполнение не оправдывает себя практически ни в каких случаях. |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
ну, они считают, что когда ты юзаешь switch, то постоянно забываешь break и на каждом шагу у тебя получаются непредсказуемые результаты (не те, что ты ожидал, когда писал case)
![]() типа такого: хочу, чтоб если i=1, то j было 10, если i=2, то j было 20 и т.д. пишешь (в С++), ты индус, ты логику вписал, а про break - забыл!
выполняешь и: i=1 j=100; //что такое? i=2 j=100; //да, елки-палки, что такое?!! ![]() i=3 j=100; //э, шайтан проклятый, что такое?!!!!!! ![]() ![]() -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
Sunvas |
|
||||
![]() Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: нет Всего: 89 |
anthony, я же и говорю, что нет сквозного выполнения, так зачем бряку оставлять!
Чем? Почему?
И снова привыкли... Не в превычке тут дело (!) т.к. отличия С++ и С# уж очень велики из без этой бряки. Я вот не привык, и использование бряки в конце кейса мне кажется бредом (снова таки ссылаясь на то, что нет в шарпе сквозного выполнения). И почему сложно отказаться? Это дело принципа или маразма? А по-моиму наоборот: хз для чего эта бряка там нужна. tol05, мы за шарп говорим, а не за ++. -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
||||
|
|||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
А я как раз за шарп и говорил как бы. Повторяю: у мелкомягких накопилось множество жалоб от программистов (не будем говорить о них плохо) о том, что они слишком часто сталкиваются с ситуацией, разрисованной мной в моем предыдущем посте. ПОЭТОМУ При разработке C#, чтобы не повторялись многочисленные critical reports по поводу выполнения switch было принято решение вынуждать разработчика ставить break всегда. -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
Sunvas |
|
|||
![]() Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: нет Всего: 89 |
Понятно... Одно слово мелкософт... Нет, чтоб хэлпы нормальные написать, они в детство ударились... Брр.. Но спасибо за разъяснения. ЗЫ. Вряд-ли я продолжу учить шарп. -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
вот, специально для тебя, Sunvas, нашел
![]()
Ecma-334 стр.233 "15.7.2 The switch statement" скачать можно отсюда ну, это хозяйское дело. Я вот java учить начинаю. Нафига? ![]() -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Мои пять копеек:
Отказавшись от сквозного выполнения, можно было и изменить синтаксис. Лично мне эти двоеточия и break очень напоминают лейблы и goto..
Обычные фигурные скобки (или просто точка с занятой, если вариант записывается в одну строку) сделают конструкцию похожей на другие (if, do, etc), более привычной и читаемой. Также я заменил default на else, потому что моему человеческому разуму ближе именно "не 1 и не 2, значит иначе", а не "не 1 и не 2, значит по умолчанию". |
|||
|
||||
stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
что забавно действительно есть конструкция goto case X. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |