Спрощення умовних виразів
Логіка умовного виконання має тенденцію ставати складною, тому ряд рефакторингів спрямований на те, щоб спростити її.
Проблема: У вас є складний умовний оператор (if-then
/else
або switch
).
Рішення: Виділіть в окремі методи усі складні частини оператора: умова, then
і else
.
Проблема: У вас є декілька умовних операторів, що ведуть до однакового результату або дії.
Рішення: Об’єднайте всі умови в одному умовному операторі.
Проблема: Однаковий фрагмент коду знаходиться в усіх гілках умовного оператора.
Рішення: Винесіть його за рамки оператора.
Проблема: У вас є булева змінна, яка грає роль керуючого флагу для декількох булевих виразів.
Рішення: Використайте break
, continue
і return
замість цієї змінної.
Проблема: У вас є група вкладених умовних операторів, серед яких складно виділити нормальний хід виконання коду.
Рішення: Виділіть усі перевірки спеціальних або граничних випадків виконання в окремі умови і поставте їх перед основними перевірками. В ідеалі, ви повинні отримати «плаский» список умовних операторів, що йдуть один за іншим.
Проблема: У вас є умовний оператор, який, залежно від типу або властивостей об’єкта, виконує різні дії.
Рішення: Створіть підкласи, яким відповідають гілки умовного оператора. У них створіть спільний метод і перемістіть в нього код з відповідної гілки умовного оператора. Згодом проведіть заміну умовного оператора на виклик цього методу. Таким чином, потрібна реалізація вибиратиметься через поліморфізм залежно від класу об’єкта.
Проблема: Через те, що деякі методи повертають null
замість реальних об’єктів, у вас в коді присутня безліч перевірок на null
.
Рішення: Замість null
повертайте Null-об’єкт, який надає поведінку за умовчанням.
Проблема: Коректна робота ділянки коду припускає наявність якихось певних умов або значень.
Рішення: Замініть ці припущення конкретними перевірками.