![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 6 Всего: 62 |
Вот цитата из MSDN по поводу switch:
Мне не очень понятно, зачем понадобилось требовать от разработчиков писать break в каждом case, раз "сквозной" проход по case'ам запрещен и отлавливается на этапе компиляции. Или, может, это сделано для большей прозрачности кода? P. S. Есть ли разумное объяснение тому, что в C++ разрешено "implicit fall through from one case label to another"? Сколько помню, это вызывало только проблемы... |
|||
|
||||
| zaver |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 204 Регистрация: 15.8.2005 Репутация: 1 Всего: 3 |
ну иногда ты можещь break не писать. например тебе надо сделать такую конструкцию: case 0: if (predicate) break else throw new Exception("");
|
|||
|
||||
| Kuvaldis |
|
||||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 1 Всего: 61 |
Idsa,
В шарпе, чтобы "проваливаться" сквозь метки нужно ЯВНО указать это при помощи ключевого слова goto в нужную метку Таким образом гарантируется осознанность такого шага Конечно, кода больше чем в С++, но от потенциальных ошибок спасает Помнится, я как-то после default в С++ break не поставил, а потом дописал еще один обработчик после default... и не очень понял поначалу, отчего проблемы :(
В С++ (и в шарпе) в отличие от паскаля с дельфи нельзя указывать перечислимые типы в качестве меток, т.е. case 1..20 не пройдет: нужно указывать все явно вот для этого ИМХО это и было сделано -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 1 Всего: 25 |
вопрос, как понимаю в том состоит, ЗАЧЕМ при всем этом писать еще и break? Если для С++ все ясно, то почему это осталось в шарпе? Я ответа не знаю, потому присоединяюсь к вопросу |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 10 Всего: 36 |
обсуждалось много раз, вроде даже здесь
1. break оставили, чтобы легче переход с плюсов проходил 2. обязали писать, чтобы исключить потенциальные ошибки, шарп совершенно справедливо позиционируется как весьма строгий, надёжный и однозначный язык |
|||
|
||||
| snav |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 8.9.2007 Репутация: нет Всего: 4 |
Не похоже, чтобы легкость перехода с плюсов особо заботила разработчиков шарпа. Иначе они сохранили бы в шарпе многие удобства и полезности синтаксиса C++. Что касается вопроса, почему сделано именно так?... На мой взгляд, шарп - это вообще один сплошной вопрос "ПОЧЕМУ?". Я еще не встречал человека, которому бы удалось понять логику его создателей. Судя по всему, её там просто нет. Это нужно принять как факт и смириться. Альтернативы шарпу всё-равно нет. Может когда-нибудь появится C++ для .NET (не C++/CLI, а нормальный C++, адаптированный под .NET), тогда можно будет выбирать. Это сообщение отредактировал(а) snav - 8.10.2007, 18:07 |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
Очень самонадеянное заяление. Логика есть и я во многом с ней согласен (хотя скучаю по кое-чему с плюсов Конкретно по поводу брейков - мне нравится в шарпе его более строгий тон. Пара лишних строк кода глаза, руки и голову не испортят, но сквозное выполнение ... особенно если switch имеет более 10 меток, да не просто маршрутиризует в функцию, а содержит в каждой метке блоки кода... Это непросто не только новому девелоперу объяснить, но и самому потестить Да к тому не будем забывать, что сам синтаксис языка усложняется. Если добавлять в switch анонимные методы, с их непросто читаемым синтаксисом и проникающим доступом к переменным... Лямда-функции с 3.0... ИМХО все это черезмерно запарит код проверять. Лично мое мнение. Это сообщение отредактировал(а) tol05 - 8.10.2007, 21:20 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 6 Всего: 62 |
Всем спасибо за обсуждение.
Kuvaldis, +1 по репе |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |