Рубрики
Без рубрики

Давайте Почистим Какой-Нибудь Код

Что мы будем делать? Возьмите функцию, которая написана ужасно, и реорганизуйте (очистите) ее…. С пометкой “учебник”, “программирование”, “java”, “производительность”.

Что мы будем делать?

Возьмите функцию, которая написана ужасно, и реорганизуйте (очистите) ее.

Грязная Функция 🦨

public void updateQuality() {  
    for (int i = 0; i < items.length; i++) {  
        if (!items[i].name.equals("Aged Brie") // branch 1  
  && !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {  
            if (items[i].quality > 0) {  
                if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {  
                    items[i].quality = items[i].quality - 1;  
                }  
            }  
        } else { // branch 2  
  if (items[i].quality < 50) {  
                items[i].quality = items[i].quality + 1;  

                if (items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {  
                    if (items[i].sellIn < 11) {  
                        if (items[i].quality < 50) {  
                            items[i].quality = items[i].quality + 1;  
                        }  
                    }  

                    if (items[i].sellIn < 6) {  
                        if (items[i].quality < 50) {  
                            items[i].quality = items[i].quality + 1;  
                        }  
                    }  
                }  
            }  
        }  
    }  
}

Анализ кода 🕵🏾

Мы замечаем, что у нас есть два основных пути выполнения

  • Отмечен |/ветвь 1 и ветвь 2

Давайте посмотрим на первую ветвь, где у нас есть три оператора if.

  • Один с двумя логическими проверками
  • У двух других есть только один

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

Итак, мы должны абстрагировать логические проверки в функцию, а также блок кода в функцию.

Блок кода уменьшает значение поля качества, поэтому мы присваиваем функции логических проверок подходящее ей имя ( выполнены Условия Для Снижения Качества/| )

Что касается второй отрасли, мы видим, что текущие операции повышают ценность области качества. Итак, мы можем извлечь эту ветвь в функцию и вызвать ее примерно так ( выполнить Процесс Добавления Качества/| )

Переработанная (Чистая) Версия 🧽

public void updateQuality() {  
    for (Item item : items) {  
        if (conditionsAreMetForQualityReduction(item))  
            item.quality = item.quality - 1;  
        else if (item.quality < 50)  
            performQualityAdditionProcess(item);  
    }  
}  

private void performQualityAdditionProcess(Item item) {  
    item.quality = item.quality + 1;  

    if (item.name.equals("Backstage passes to a TAFKAL80ETC concert")) {  

        if (item.sellIn < 11 && item.quality < 50) {  
            item.quality = item.quality + 1;  
        }  
        if (item.sellIn < 6 && item.quality < 50) {  
            item.quality = item.quality + 1;  
        }  
    }  
}  

private boolean conditionsAreMetForQualityReduction(Item item) {  
    String name = item.name;  
    return !name.equals("Aged Brie") &&  
            !name.equals("Backstage passes to a TAFKAL80ETC concert") &&  
            item.quality > 0 &&  
            !name.equals("Sulfuras, Hand of Ragnaros");  
}

Что мы сделали? 🙌

  • Что мы сделали? 🙌 Агрегируйте логические проверки, относящиеся к одной и той же проверке, в одно выражение.
  • Что мы сделали? 🙌 Агрегируйте логические проверки, относящиеся к одной и той же проверке, в одно выражение. Извлечение сложного логического выражения в функцию

  • Что мы сделали? 🙌 Агрегируйте логические проверки, относящиеся к одной и той же проверке, в одно выражение. Извлечение сложного логического выражения в функцию Извлечение

  • сложных

Что мы сделали? 🙌 Агрегируйте логические проверки, относящиеся к одной и той же проверке, в одно выражение. Извлечение сложного

Что мы сделали? 🙌 Агрегируйте логические проверки, относящиеся к одной и той же проверке, в одно выражение. Извлечение || сложного || логического выражения в функцию Извлечение || сложных || if/else тел для выполнения функций с полезным именем, указывающим их назначение. Примечание ||: Под сложным я подразумеваю все, что выходит за рамки одной строки кода. Код один GitHub 👩 💻

Оригинал: “https://dev.to/jarjanazy/let-s-clean-some-code-4oco”