|
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
|
|
Избавится от switch case17.12.2019, 18:53. Показов 5673. Ответов 20
Метки нет (Все метки)
Всё задание в заголовке, видел способ как можно заменить свитч с помощью словаря и делегат, хочу узнать может есть еще какие-то способы?
0
|
|
| 17.12.2019, 18:53 | |
|
Ответы с готовыми решениями:
20
Можно ли избавится от switch? |
|
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
|
|
| 17.12.2019, 19:22 | |
|
Паттерн Стратегия
Добавлено через 40 секунд Про if/else https://habr.com/ru/company/microsoft/blog/423229/
0
|
|
|
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
|
|
| 17.12.2019, 19:22 [ТС] | |
|
Элд Хасп, Что-то более заумное нужно, заменять одну условную конструкцию другой это конечно хорошо, но думаю не то что от меня ожидают :/
0
|
|
|
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
|
|
| 17.12.2019, 19:26 [ТС] | |
|
Элд Хасп, Получил такое задание,
0
|
|
|
1846 / 1188 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
|
|
| 17.12.2019, 19:27 | |
|
Anvean, а можно хотя бы часть кода? может какие идеи да появятся. Или хотя бы знать, что перебирать будем
0
|
|
|
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
|
|
| 17.12.2019, 19:30 [ТС] | |
|
Enifan, https://github.com/Anvean21/Cs... arrator.cs Надеюсь тут можно ссылки на репы кидать:)
0
|
|
|
68 / 38 / 11
Регистрация: 07.11.2019
Сообщений: 136
|
||||||||||||||||
| 17.12.2019, 19:54 | ||||||||||||||||
|
Пусть есть код
Нам он почему-то не нравится. Попробуем перевести его в стратегию, и чтобы было более приближенно к реальности, добавим фабрику.
Можно ли их задать динамически, подгрузив в рантайме из некоторого источника данных. Ответ можно. Но тогда и значения словаря придется создавать на уровне рефлексии, и то в случае если паттерн будет соответствовать некоторой конвенции по названиям классов в программе. Поддерживать такой код тоже достаточно неприятно. Конечно есть случаи, когда такой подход имеет плюсы. Но если говорить обобщенно, то следует хорошо подумать и взвесить, а нужно ли такое делать.
1
|
||||||||||||||||
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
| 17.12.2019, 20:34 | |
|
0
|
|
|
1846 / 1188 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
|
||
| 17.12.2019, 20:46 | ||
|
0
|
||
|
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
|
|
| 17.12.2019, 21:06 [ТС] | |
|
КОП, я уже слушал критику, все полотно с класса Narrator будет разбито на методы и тд, поэтому и спросил как избавится от свича и соответственно от тысячи вложений
0
|
|
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
||||
| 17.12.2019, 21:08 | ||||
|
Добавлено через 1 минуту Anvean, а, ну вот как раз ответил
0
|
||||
|
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
|
|
| 17.12.2019, 21:16 [ТС] | |
|
КОП, Возможно не правильно выразился, нужно увеличить уровень кода, соответственно избавится от элементарных конструкций которые в избытке и использовать более профессиональные инструменты
Добавлено через 4 минуты КОП, Немного не понятно почему данные должны быть отдельно от кода, а о деревьях пока не знаю, надо бы разобраться:)
0
|
|
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
| 17.12.2019, 21:33 | |
|
Anvean, хороший код прост и понятен.
Почему данные отдельно от кода? Ну вот решили вы нанять сценариста для истории. Он же не будет райтлайны писать. Ему текстовый файл и он там строк наваляет. Вот и разделение уже есть. Кроме того как только сделаете, поймёте что это гораздо быстрее и проще написать чем вашу стену текста. Просто нужно 1 раз разобраться. Если не знаете о деревьях, то хотя бы просто в методы внести все случаи в свичах и уже норм
0
|
|
|
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
|
|
| 17.12.2019, 21:43 [ТС] | |
|
КОП, Спасибо вам большое за фидбэк
0
|
|
|
2 / 2 / 0
Регистрация: 07.03.2014
Сообщений: 47
|
|
| 28.08.2020, 08:39 | |
|
Вот сколько читаю объяснения как избавится от switch нигде не нахожу ответа. Вот поменяли мы код в данном месте на шаблон Стратегия или ещё как либо избавились. Но в конечном итоге исходный клас для этого полиморфизма все равно придется создавать по switch, Если знаете как решить эту проблему буду благодарен за пояснения
Добавлено через 4 минуты Я к тому что может есть другие паттерны для красивой связки вместо switch или dictionary
0
|
|
|
Пора на C++?
370 / 264 / 99
Регистрация: 10.04.2020
Сообщений: 1,275
|
|
| 28.08.2020, 10:13 | |
|
0
|
|
|
Жесток & Наивен
483 / 188 / 91
Регистрация: 02.02.2017
Сообщений: 427
|
||||||
| 28.08.2020, 10:15 | ||||||
|
Возможно эта задача из серии "на развития логике", так сказать до чего доведут игры разума испытуемого субъекта.
Про максимально усложнить, значит скорее всего что о правильности архитектурного подхода речи не идет. Самое простое что лично мне пришло в голову это массив и перечисление. Код
0
|
||||||
| 28.08.2020, 10:15 | |
|
Помогаю со студенческими работами здесь
20
Switch case 'Ш' Switch - case и файл Switch case в C# как? Switch Case на байтах Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc
О Господи, Вечный, Ты . . .
Я помоги, Бесконечный. . .
Я прошу Ты. . .
Я погибаю, спаси. . .
Я прошу Тебя Вечный. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|