|
4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
|
|
Почему участки кода со "switch-case" - это плохо и реплейсятся при рефакторинге?20.12.2014, 00:34. Показов 7181. Ответов 19
Метки нет (Все метки)
Попалась мне статейка одна на Хабре, где давались рекомендации по грамотному написанию кода. Одним из пунктов в ней был отказ от использования switch-case? Естественно автор поленился объяснить и оставил меня в недоумении. Чем плох switch-case? Почему при рефакторинге его рекомендуется менять? Почему даже решарпер switch-case рекомендует менять такую конструкцию на кучу аналогичных if'ов?
0
|
|
| 20.12.2014, 00:34 | |
|
Ответы с готовыми решениями:
19
Внутри участки кода. Прошу опытных сказать что это за вид языка
Структура кода (допускается ли частое использование if - else и switch - case) |
|
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
|
|
| 20.12.2014, 01:14 | |
|
0
|
|
|
4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
|
|||
| 20.12.2014, 01:24 [ТС] | |||
|
0
|
|||
|
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
|
||||||||||||||||
| 20.12.2014, 01:36 | ||||||||||||||||
|
SLiTHER, ан нет, оказывается в иле по разному выглядит. а ведь в я какой то книге читал обратное... мда доверяй но проверяй (это я про инфу которую получаешь из разных источников)
if Кликните здесь для просмотра всего текста
switch Кликните здесь для просмотра всего текста
метод свитч выглядит так
как видим свитч в ИЛе короче выглядит, и применяется команда switch, что за команда хз , возможно и есть та более оптимальная таблица переходов. эксперты подскажут Добавлено через 1 минуту а по поводу решарпера не правда, когда это он рекомендует менять свитч на ифы?
0
|
||||||||||||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||||
| 20.12.2014, 06:53 | ||||||
|
Потому что так гораздо быстрее:
0
|
||||||
|
4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
|
|||||||||||||||
| 20.12.2014, 07:55 [ТС] | |||||||||||||||
|
Не по теме: Да и вообще, ReSharper хоть и шикарная штука, но иногда все мое мировоззрение с ног на голову переворачивает. Вот меня, например, в универе учили, что если ты знаешь тип, то явно его и указывай, а ReSharper всегда предлагает явное указание типа на var менять. Учили, что всякие goto, break, continue - это ооооочень плохо и их не стоит использовать. А вот ReSharper конструкции с несколькими вложенными друг в друга if'ами всегда предлагает преобразовать в конструкцию с последовательно идущими if'ами и этими continue или break.
Добавлено через 3 минуты
0
|
|||||||||||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 20.12.2014, 08:23 | |||
|
Добавлено через 16 минут Не по теме:
0
|
|||
|
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
|
||||
| 20.12.2014, 12:22 | ||||
|
в общем решарпер это не панацея и не эталон правильного кода , а лишь инструмент, и вполне хороший инструмент
0
|
||||
|
4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
|
||||
| 21.12.2014, 00:57 [ТС] | ||||
|
Вариант с ассемблером опустим. Там j**, call - это единственный способ передачи управления. А по поводу break и continue. Опустим case - там они обязательная часть синтаксиса. Но во всех остальных случаях их использование мне всегда казалось необоснованным. Лично нас когда-то учили, что если вам нужно досрочно выйти из цикла например, то делать это надо по условию. Т.е. завести какой-нибудь флаг или переменную состояния и добавить ее в условие.
0
|
||||
|
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
|
||||
| 21.12.2014, 01:08 | ||||
|
а continue помогает избежать большой вложенности блоков кода с ИФом например (как советовал правильно решарпер) или просто досрочно перейти к следующему итератору в общем без break и continue это как раз и есть
0
|
||||
|
Master of Orion
|
|||
| 21.12.2014, 01:18 | |||
В книге все расписано, смысл пересказывать её словами, тратя время других людей?
0
|
|||
|
4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
|
||
| 21.12.2014, 01:51 [ТС] | ||
![]() Одни делегируют, другие это исполняют (один из основных принципов тайм-менеджмента). А еще - выживает сильнейшая и наиболее приспособленная особь (закон эволюции).
0
|
||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 21.12.2014, 04:03 | ||
|
Вы бы в блок-сехме эти дополнительные флаги нарисовали и помотрели бы что тот же препод скадет по этому поводу.
1
|
||
|
4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
|
|||
| 21.12.2014, 04:49 [ТС] | |||
|
В жизни такой подход к людям мне помогает добиваться результата! На текущем этапе моей жизни результат - главное для меня. А чувствуют люди себя потом использованными или нет, мне по большому счету все равно! Вас никто не заставляет здесь отвечать и вы делаете это по собственной воле. Просто потому, что вам нравится помогать людям, или нравится умничать, или сам процесс ответов нравится, или пообщаться хотите, или, или, или... У каждого своя мотивация. А значит добровольно соглашаетесь на то, что кто-то использует ваши знания для решения своих целей. Что же вы тогда обижаетесь, если сами на это подписались? А вот к друзьям, близким и любимой женщине у меня иное отношение. Эти люди - важная часть моей жизни, поэтому их чувства я уважаю и их мнение всегда выслушаю. Да и вообще, лично я стараюсь окружать себя людьми, подобными мне. Людьми, которые четко знают что хотят от жизни. Людьми, которые умеют ставить цели и добиваться их. Людьми амбициозными, властными, тщеславными. Людьми, являющимися по натуре волками, а не овцам. Людьми, не боящимися брать на себя ответственность. Вот моей душе такие люди ближе! Именно за такими людьми народ пойдет куда угодно. Да собственно такие властные личности и управляют сейчас нашей страной. А с "рубаха-парнями" мне не по пути! Разделяете вы мое мнение или нет - это ваше право! Я вас не сужу за ваше мнение и вы меня не судите за мое! Добавлено через 15 минут Но те времена давно прошли! Break, continue и return я как тогда использовал, так и сейчас использую. Вот попалась статейка на хабре, где говорят, что switch-case не айс - тоже проигнорирую и буду использовать дальше. Ну а goto как не использовал никогда, так и не буду! Лично мое мнение, что любой, я подчеркну, ЛЮБОЙ код, в котором замечен оператор goto, должен автоматически размещаться на говнокод.ру! Не существует ситуации, в которой без goto нельзя было бы обойтись! А по поводу переменных состояния и флагов вы не правы! В последнее время часто приходится что-то параллелить в проекте у нас. А если знакомы с многопоточным программированием, то знаете, что там на таких переменных и флагах все держится.
0
|
|||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 21.12.2014, 05:19 | |||
|
0
|
|||
| 21.12.2014, 05:19 | |
|
0
|
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 21.12.2014, 10:59 | ||
|
Добавлено через 16 минут PS:вспомните лабораторки по ASM и как и каким способом, вы там реализовывали case в каждом из случаев.
0
|
||
|
Master of Orion
|
||
| 21.12.2014, 12:25 | ||
|
1. "Ну, я конечно, не ходил, потому что немного проболел, мне очень жаль, можно мне все-таки как-то получить этот зачет?" 2. "Здравствуйте. Я не ходил на лекции, потому что мне сказали, что вы нахаляву ставите оценки, так что вот зачетка, ставьте и я пошел, я с друганами уже заказал билеты на 5 часов". посыл один и тот же, но угадайте, какой из них будет успешным. Или по-вашему другие люди идиоты и не делают ничего в своих целях? Этакое стадо альтруистов. Просто они используют принцип достаточности, когда нужно приложить 5% усилий для получения 95% результата, но человек даже их перекладывает на других, то таким людям трудно жить вне своей семьи, где их любят просто as is. Впрочем, это не форум психологической помощи. Так что я просто отписываюсь и всё.
2
|
||
| 21.12.2014, 12:25 | |
|
Помогаю со студенческими работами здесь
20
Почему switch case начал работать неправильно?
Почему не может использоваться command в качестве case для switch?
Помощь в рефакторинге кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|