|
4 / 4 / 1
Регистрация: 09.08.2010
Сообщений: 125
|
|
Почему участки кода со "switch-case" - это плохо и реплейсятся при рефакторинге?20.12.2014, 00:34. Показов 7171. Ответов 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 / 1574 / 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 / 1574 / 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 / 1574 / 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 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 21.12.2014, 05:19 | |||
|
0
|
|||
| 21.12.2014, 05:19 | |
|
0
|
|
|
2083 / 1574 / 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?
Помощь в рефакторинге кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|