| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > Особенности конструкции switch в C# |
| Автор: Idsa 7.10.2007, 23:08 | ||
Вот цитата из MSDN по поводу switch:
Мне не очень понятно, зачем понадобилось требовать от разработчиков писать break в каждом case, раз "сквозной" проход по case'ам запрещен и отлавливается на этапе компиляции. Или, может, это сделано для большей прозрачности кода? P. S. Есть ли разумное объяснение тому, что в C++ разрешено "implicit fall through from one case label to another"? Сколько помню, это вызывало только проблемы... |
| Автор: zaver 7.10.2007, 23:20 |
| ну иногда ты можещь break не писать. например тебе надо сделать такую конструкцию: case 0: if (predicate) break else throw new Exception(""); |
| Автор: Kuvaldis 7.10.2007, 23:20 | ||||
Idsa,
В шарпе, чтобы "проваливаться" сквозь метки нужно ЯВНО указать это при помощи ключевого слова goto в нужную метку Таким образом гарантируется осознанность такого шага Конечно, кода больше чем в С++, но от потенциальных ошибок спасает Помнится, я как-то после default в С++ break не поставил, а потом дописал еще один обработчик после default... и не очень понял поначалу, отчего проблемы :(
В С++ (и в шарпе) в отличие от паскаля с дельфи нельзя указывать перечислимые типы в качестве меток, т.е. case 1..20 не пройдет: нужно указывать все явно вот для этого ИМХО это и было сделано |
| Автор: mihryak 8.10.2007, 13:08 |
| обсуждалось много раз, вроде даже здесь 1. break оставили, чтобы легче переход с плюсов проходил 2. обязали писать, чтобы исключить потенциальные ошибки, шарп совершенно справедливо позиционируется как весьма строгий, надёжный и однозначный язык |
| Автор: snav 8.10.2007, 18:05 | ||
Не похоже, чтобы легкость перехода с плюсов особо заботила разработчиков шарпа. Иначе они сохранили бы в шарпе многие удобства и полезности синтаксиса C++. Что касается вопроса, почему сделано именно так?... На мой взгляд, шарп - это вообще один сплошной вопрос "ПОЧЕМУ?". Я еще не встречал человека, которому бы удалось понять логику его создателей. Судя по всему, её там просто нет. Это нужно принять как факт и смириться. Альтернативы шарпу всё-равно нет. Может когда-нибудь появится C++ для .NET (не C++/CLI, а нормальный C++, адаптированный под .NET), тогда можно будет выбирать. |
| Автор: tol05 8.10.2007, 21:18 | ||||
Очень самонадеянное заяление. Логика есть и я во многом с ней согласен (хотя скучаю по кое-чему с плюсов Конкретно по поводу брейков - мне нравится в шарпе его более строгий тон. Пара лишних строк кода глаза, руки и голову не испортят, но сквозное выполнение ... особенно если switch имеет более 10 меток, да не просто маршрутиризует в функцию, а содержит в каждой метке блоки кода... Это непросто не только новому девелоперу объяснить, но и самому потестить Да к тому не будем забывать, что сам синтаксис языка усложняется. Если добавлять в switch анонимные методы, с их непросто читаемым синтаксисом и проникающим доступом к переменным... Лямда-функции с 3.0... ИМХО все это черезмерно запарит код проверять. Лично мое мнение. |
| Автор: Idsa 8.10.2007, 23:21 |
| Всем спасибо за обсуждение. Kuvaldis, +1 по репе |