Что мы будем делать?
Возьмите функцию, которая написана ужасно, и реорганизуйте (очистите) ее.
Грязная Функция 🦨
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”