|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.02.2013, 11:55 | #1 |
Форумчанин
Регистрация: 29.10.2009
Сообщений: 259
|
Switch vs If-Else
Приветствую, многоуважаемый народ! На работе встала задача разобраться и исправить чужой код. Полез, вроди бы все ясно и понятно, но дойдя до последнего метода буквально сломал голову. Причиной этому стало то, что в этом методе используется миллион и одна строчка кода 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. |
19.02.2013, 12:16 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Код:
I'm learning to live...
|
|
19.02.2013, 12:24 | #3 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
И вообще, несколько десятков операторов с ветвлениями, с разной логикой при разных a - типичное показание к тому, что данный метод должен заниматься только диспетчеризацией. Кстати, если значения идут (почти) подряд, можно обойтись без явных ветвлений: Код:
|
|
19.02.2013, 12:39 | #4 |
Форумчанин
Регистрация: 16.04.2011
Сообщений: 126
|
я бы использовал switch.
Хотя на каждую ситуацию по разному. Если ты используешь потоки и обращаешься к одной и той же информации в разных потоках (а ведь данные могут меняться), то могут сработать два if или больше. + время выполнения гораздо важнее! |
19.02.2013, 12:48 | #5 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
|
|
19.02.2013, 14:05 | #6 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
19.02.2013, 22:54 | #7 |
Пользователь
Регистрация: 12.11.2008
Сообщений: 17
|
Лично мое мнение, что switch, как оператор выбора, понятнее смотрится в коде, нежели if, оператор условия.
Для перечислений, целых - всегда его юзаю. Другое дело - производительность. Не стоит искать тестов и сравнений, они все синтетические. Да и ощутимого выигрыша вы не добьетесь, особенно если приложение особо ничем не ворочает. Не занимайтесь преждевременными микрооптимизациями, вам за это не платят только время потеряете. Навскидку схожий функционал можно получить if-ами, switch-ом, Dictionary, наследованием с переопределением методов, перегрузкой методов (если аргументы разного типа, имеющие общий базовый класс), паттерном состояние/конечным автоматом, и тд. Каждый будет иметь свои выигрыши в разных ситуациях, в т.ч. и производительности. Ну а к топику - это скорее вопрос стиля, я бы, конечно, использовал в данном случае оператор выбора switch, так как он здесь и подразумевается. |
20.02.2013, 02:26 | #8 | |
Форумчанин
Регистрация: 29.10.2009
Сообщений: 259
|
Цитата:
А универсальность вообще какая? Имеете ввиду, что можно написать следующее: Код:
Код:
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
|
|
20.02.2013, 09:34 | #9 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Вот тебе и универсальность. Цитата:
Цитата:
I'm learning to live...
|
|||
20.02.2013, 11:07 | #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 |