Ответ
Грязный код — это код с низкой читаемостью и сопровождаемостью, который нарушает принципы чистого кода (Clean Code) и проектирования. Я сталкивался с такими основными признаками:
- Неинформативные имена:
$data,$tmp,function process(). Вместо этого я использую$userOrders,$cachedResponse,function calculateMonthlyRevenue(). - Дублирование (DRY-нарушение): Одна и та же логика валидации email в 5 разных местах. Я выношу это в отдельный метод или класс
EmailValidator. - Длинные методы и классы: Метод на 200 строк или класс, отвечающий за всё. Я стремлюсь к методам, которые помещаются на экран (~20-30 строк), и классам с одной ответственностью (SRP).
- Магические числа и строки:
// Плохо (грязно) if ($user->status == 3) { ... } // Хорошо (чисто) class UserStatus { public const ACTIVE = 3; } if ($user->status == UserStatus::ACTIVE) { ... } - Глубокие вложенности: Цепочки
ifвнутриifвнутриfor. Я рефакторю это через ранний возврат (early return), вынос в отдельные методы или использование полиморфизма. - Отсутствие типизации (в PHP): Использование массивов
arrayвместо DTO или отсутствие объявлений типов для аргументов и возвращаемых значений. Я всегда включаюstrict_types=1и использую типизацию.
Пример рефакторинга:
// Было (грязно)
function f($a) {
if ($a > 10) {
$b = $a * 2;
echo $b;
} else {
echo "no";
}
}
// Стало (чисто)
class DiscountCalculator {
private const THRESHOLD = 10;
private const MULTIPLIER = 2;
public function calculateAndOutput(int $price): void {
if (!$this->isEligibleForDiscount($price)) {
echo "No discount applied";
return;
}
$discountedPrice = $this->applyDiscount($price);
echo $discountedPrice;
}
private function isEligibleForDiscount(int $price): bool {
return $price > self::THRESHOLD;
}
private function applyDiscount(int $price): int {
return $price * self::MULTIPLIER;
}
}