ettaluni
@ettaluni
ERROR MEME

Множественный if then else, как заменить, упростить и простить?

Как вы решаете множественные if then else? В любом языке.
Вот у вас ситуация на каждый из 85 субъектов РФ выполнить свое действие. Что будете делать? Разматывать портянку?
Вариант со switch мало интересен так как схожая блочная структура.
  • Вопрос задан
  • 463 просмотра
Пригласить эксперта
Ответы на вопрос 5
samodum
@samodum
Какой вопрос - такой и ответ
Паттерн Strategy.
Или Reflection.
Или HashMap.
Или Dictionary.
Или switch... case
В зависимости от деталей задачи.
Ответ написан
Комментировать
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Ну в python к примеру так можно решить
# некий набор функций для каждого региона
def region1():
    ....

def region2():
     ...

def defaultregion():
    ...

# соответствие номеров функциям
func = {
   '1': region1,
   '2': region2,
   ...
}.get(region_number, defaultregion)

func()   # в func - нужная функция, обусловленная выбором номера региона. выполняем ее
Ответ написан
Adamos
@Adamos
Если на каждый только одно простое действие - либо switch, либо вообще таблица.
Размер портянки, по большому счету, неважен - важна читаемость и очевидность, особенно при изменениях.
Более сложные случаи зависят от языка. Намудрить паттернов или крутое наследование можно во многих языках, а вот читаться это будет далеко не везде, и кое-где такое решение создаст проблемы при первой же правке... уж лучше портянка, но простая, как портянка.
Ответ написан
GavriKos
@GavriKos
Словарь\ассоциативный массив\map (ну и прочие варианты коллекции ключ-значение), где ключ - субъект, значение - действие.
Останется только кратко заполнить, тут в помощь средства языка типа рефлексии, аттрибутов (например).
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Программирование
software engineer
паттерн executor что-то типа:

array { id, name, function}
[ 0, 'объект1', 'function1' ],
[ 1, 'объект2', 'function2'],
[3, 'объект3', 'function1;function3']

while ID in array(id) {
eval array(function)
}

или switch/case
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы