![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 29.10.2009
Сообщений: 259
|
![]()
Приветствую, многоуважаемый народ! На работе встала задача разобраться и исправить чужой код. Полез, вроди бы все ясно и понятно, но дойдя до последнего метода буквально сломал голову. Причиной этому стало то, что в этом методе используется миллион и одна строчка кода if-else из разряда:
Код:
Возникает закономерный вопрос (прошу простить меня цензуру): "What a fuck?", неужели нельзя было использовать switch?! Посидел, покавырялся, распичатал это чудо и теперь сижу и матюгаю автора! Почитал отдельные отечественные форумы, где люди спрашивают: "Что лучше - switch или гора if'ов?", на которых ответы разнятся, но все же преимущество за switch. Набрал в Google поисковую строку: "Switch vs If" и получил целую гору ссылок, где сравниваются указанные операторы (ссылка 1, ссылка 2) и явное преимущество по скорости работы имеет switch - так на кой черт тогда люди используют гору if'ов, она не только ни быстрее, но еще и читать ее невозможно? Кто что думает по этому вопросу? Кто что сам использует? Если кому интересно, то иерархии из if-else в своем коде строю с максимальной глубиной приблизительно равной 3, если нужно больше, то тогда только switch.
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Последний раз редактировалось Mixim; 19.02.2013 в 12:01. |
![]() |
![]() |
![]() |
#2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Код:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
![]() Цитата:
И вообще, несколько десятков операторов с ветвлениями, с разной логикой при разных a - типичное показание к тому, что данный метод должен заниматься только диспетчеризацией. Кстати, если значения идут (почти) подряд, можно обойтись без явных ветвлений: Код:
|
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 16.04.2011
Сообщений: 126
|
![]()
я бы использовал switch.
Хотя на каждую ситуацию по разному. Если ты используешь потоки и обращаешься к одной и той же информации в разных потоках (а ведь данные могут меняться), то могут сработать два if или больше. + время выполнения гораздо важнее! |
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#6 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 12.11.2008
Сообщений: 17
|
![]()
Лично мое мнение, что switch, как оператор выбора, понятнее смотрится в коде, нежели if, оператор условия.
Для перечислений, целых - всегда его юзаю. Другое дело - производительность. Не стоит искать тестов и сравнений, они все синтетические. Да и ощутимого выигрыша вы не добьетесь, особенно если приложение особо ничем не ворочает. Не занимайтесь преждевременными микрооптимизациями, вам за это не платят только время потеряете. Навскидку схожий функционал можно получить if-ами, switch-ом, Dictionary, наследованием с переопределением методов, перегрузкой методов (если аргументы разного типа, имеющие общий базовый класс), паттерном состояние/конечным автоматом, и тд. Каждый будет иметь свои выигрыши в разных ситуациях, в т.ч. и производительности. Ну а к топику - это скорее вопрос стиля, я бы, конечно, использовал в данном случае оператор выбора switch, так как он здесь и подразумевается. |
![]() |
![]() |
![]() |
#8 | |
Форумчанин
Регистрация: 29.10.2009
Сообщений: 259
|
![]() Цитата:
А универсальность вообще какая? Имеете ввиду, что можно написать следующее: Код:
Код:
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
|
|
![]() |
![]() |
![]() |
#9 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Вот тебе и универсальность. Цитата:
Цитата:
![]()
I'm learning to live...
|
|||
![]() |
![]() |
![]() |
#10 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
switch | MasterSporta | Общие вопросы C/C++ | 4 | 05.04.2012 22:05 |
Switch в C++ | Inv1s | Visual C++ | 2 | 28.01.2012 14:37 |
C# switch | Sna1L | Помощь студентам | 2 | 07.07.2011 15:00 |
switch | Артэс | Общие вопросы C/C++ | 40 | 29.05.2010 20:11 |
switch | Dimarik | Общие вопросы C/C++ | 4 | 11.04.2010 15:56 |