Рефакторинг, если утверждения для лучшей читабельности - PullRequest
0 голосов
/ 04 января 2019

В настоящее время я работаю над проектом, который уменьшит класс, используемый другими несколькими классами.

if(condition_A)
{
     doSomething();
}
else if(condition_B)
{
     classToBeRemoved();
}
else
{
     doAnother();
}

Первое решение, которое пришло мне в голову, - это отменить условие if-оператор else, который будет изменен.

if(condition_A)
{
     doSomething();
}
else if(!condition_B)
{
     doAnother();
}

Этот метод рефакторинга не влияет на функциональность кода, но иногда, если условие слишком длинное, оно влияет на читабельность кода.

Есть ли другой способ сохранить читабельность кода, кроме отрицания условия?

1 Ответ

0 голосов
/ 04 января 2019

Может быть с функциями, примерно такими:

List<BooleanSupplier> actions = new ArrayList<>();
actions.add(() -> {
    if (!condition_A) {
        return false;
    }
    doSomething();
    return true;
});
actions.add(this::canDoSomething);

if (!actions.stream().anyMatch(p::get)) {
    doAnother();
}

Я взял на себя смелость абстрагировать условие + действие в предикат, вместо использования пары или чего-то подобного.

Это уродливее,но может отделить вещи, поскольку теперь дополнение может поступать из вне класса, определяя public void addAction(BooleanSupplier action).

Хотя, вероятно, параметр необходим для предоставления данныхконтекст (Predicate<?>).

...