Как лучше поступить с условиями?

166
20 ноября 2020, 02:50

У меня есть переменная d которую пользователь задает сам, она принимает значения от 1 до 99, каждое число должно исполнять свою роль, например если 1 вывести в Toast уведомление , если 88 то уже что-то другое , как лучше такое сделать? Если не использовать 99 if

Answer 1

Вам следует использовать оператор switch:

switch(intVariable) {
    case 1: 
        // действие;
        break;
    case 2: 
        // действие;
        break;
    case 3: 
        // действие;
        break;
    //...
    case 99: 
        // действие;
        break;
}

Это если все действия разные и не зависят от значения переменной(именно действия, а не их выполнение). Если все действия однотипные - возможно, их можно оптимизировать.

Можно сделать так, как предлагает Stranger. С Java 8 можно использовать лямбды:

Сначала создаем Map<Integer, Consumer> switchMap, или с каким нибудь другоим функциональным интерфейсом(сейчас - Consumer), зависит от действий, пишите в комментариях какие конкретно действия нужно сделать, я подкорректирую код.
От ФИ зависит то, какое именно действие будет - возвращающее значение, не возвращающее значение, какое именно будет возвращаться значение, сколько параметров приниматься, и т.п. Действие - это все что угодно, что можно написать в обычном методе

Заполняем его лямбдами:

switchMap.put(1, m -> System.out.println("Введена "+m+", проверка проверка"));
//...
switchMap.put(99, m -> System.out.println("Введена "+m+", (: "));

А потом просто вызывать switchMap.get(myIntVariable).accept(myIntVariable);.

Answer 2

Я бы сделал как-то так...

Вместо чисел лучше использовать перечисления enum, это добавляет в код читабельность, куда понятнее когда встречаешь название действия, чем его порядковыq номер

Типы событий:

public enum HandlerType {
    ALPHA,
    BETA,
    GAMMA,
    DELTA
}

Класс с обработчиками:

public class Handlers extends HashMap<HandlerType, Runnable> {
    public void run(HandlerType t){
        Runnable handler = get(t);
        if (null == handler)
            return;
        get(t).run();
    }
}

Вариант использования:

 public static void main(String[] args) {
    Handlers handlers = new Handlers();
    handlers.put(HandlerType.ALPHA, () -> {
        System.out.println("running ALPHA");
    });
    handlers.put(HandlerType.BETA, () -> {
        System.out.println("running BETA");
    });
    handlers.put(HandlerType.GAMMA, () -> {
        System.out.println("running GAMMA");
    });
    handlers.put(HandlerType.DELTA, () -> {
        System.out.println("running DELTA");
    });
    handlers.run(HandlerType.ALPHA);
    handlers.run(HandlerType.BETA);
    handlers.run(HandlerType.GAMMA);
    handlers.run(HandlerType.DELTA);
}

Результат:

running ALPHA
running BETA
running GAMMA
running DELTA
READ ALSO
.length переменной обнуляется

.length переменной обнуляется

Пишу окно ввода для калькулятора - ограничиваю 15 по длине

134
Django. Как сделать зависимый выпадающий список с помощью JS?

Django. Как сделать зависимый выпадающий список с помощью JS?

Подскажите, пожалуйста, если не сложно, как правильно написать скрипт, чтобы при выборе региона отображались города только этого региона,...

137
Как работает память в js

Как работает память в js

Существует 2 упрощения - к доступу объектам по ссылкам

157
Vue JS. Сохранение данных формы

Vue JS. Сохранение данных формы

Всем приветРаботаю с Vue JS

190