Post on 13-Apr-2017
Co to znaczy?
Ludzki mózg nie jest w stanie podążać za rozgałęzieniami
Jest liniowy Ogarnia siedem pojęć na raz – większość zdań
składa się z siedmiu wyrazów
Co to znaczy?
Brzydki kod jest pełen rozgałęzień Jest trudny w czytaniu Wymaga skupienia do zrozumienia Jest mylący, zagmatwany, nasztuczkowiony Przekracza zdolności pojmowania typowego
człowieka
Jak?
Odwróć ify Jedna rzecz na raz Nie grzeb innym w spodniach Rąbaj metody Nie gmatwaj Używaj narzędzi
Odwróć ifa
Z przodu liceum
if ($request->isMethod('post')) {
if ($request->isType('ajax')) {
$data = $request->getData();
if ($data->isValid($this->rules)) {
$order = new Order($data);
return $order;
Z tyłu groza
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
Odwróć ifafunction parseOrder($request) {
if (! $request->isMethod('post')) {
return false;
}
if (! $request->isType('ajax')) {
return false;
}
$data = $request->getData();
if (! $data->isValid($this->rules)) {
return false;
}
$order = new Order($data);
return $order;
}
Jedna rzecz na raz
return $this->messages[$status]; Takie komentarze:
// ----------- ORDER ----------------
// calculate vat
// 3. attach mouse to a cat
Zmienne $return, $ret, $result Funkcje które można scharakteryzować jako te:
Które liczą i formatują
Które pobierają, aktualizują i zapisują
Nie grzeb obiektom w spodniachif($order->getParams()->getParam('payment_type') == PaymentType::CARD) {
$order->getPayment()->getCard()->save();}
Jeden -> w linii Zamiast grzebać zapytaj:
if($order->hasCardPayment()) { $order->saveCard();}
Nie używaj tablic do przekazywania przetworzonych danych!
Nie dotyczy DQL
Siecz, rżnij, rąb!
Sztywny limit długości metody (25 linii) Sztywny limit głębokości wcięcia (2 wcięcia)
function doSomething($data) { foreach ($data as $item) { // 1 $item->doMe(); // 2 if ($item->isYou()) { $item->doYou(); // <---- Bąęł! } }}
Sztywny limit ilości metod w klasie (larva style!)
Macarena!
Nie używaj sztuczek i mało znanych metod next jako podgląd pierwszego elementu tablicy
Nie używaj pełnych nazw namespace'ów Something/OtherThing/Library/Macarena
Jedna kropka, strzałka przyrównanie na linię Warunki w if w jednej linijce
Wyliczaj przed ifem
Warunki do widoku wyliczaj w kontrolerach
Nigdy nie pisz własnego frameworka!