Dobre praktyki tworzenia nazw
Phil Karlton
There are only two hard things in Computer Science:
- cache invalidation
- naming things.
Używaj nazw przedstawiających intencje
Przykłady:
$d; // czas trwania w dniach
$elapsedTimeInDays;
$list; // lista kategorii
$categories;
$t; // czas modyfikacji (timestamp)
$modificationTimestamp;
Przykłady:
function filterOrders()
{
$orders = [];
foreach($this->getAll() as $order) {
if($order->status == 4)
$orders[] = $order;
}
return $orders;
}
function getPaidOrders()
{
$paidOrders = [];
foreach($this->getAll() as $order) {
if($order->isPaid())
$paidOrders[] = $order;
}
return $paidOrders;
}
Unikaj niepotrzebnego nadmiaru informacji
Przykład:
class ProductList {
public function numberOfProducts(){}
}
class ProductList {
public function size(){}
}
Przykład:
class CategoryDataObject {
}
class CategoryEntity {
}
// może być w odpowiednim namespace
class Category {
}
Promuj jasność nad zwięzłością
Są wyjątki ! (kontekst ma znaczenie)
Będziesz czytał kod więcej razy niż go pisał.
Przykład
class ImportProductsCommand {
public function execute() {
$this->initializeEntityManagers();
$this->truncateProductsTable();
$this->importProductsFromLegacyDatabase();
}
}
class ImportCommand {
public function execute() {
$this->initialize();
$this->truncate();
$this->import();
}
}
Ale nie zawsze
$appointmentList
$calendar
$companyPerson
$employee
$textCorrectionByEditor
$edit
Szanuj specyfikę języka/frameworka
Nie używaj negatywnej logiki
Przykład
class Product {
public function isNotEnabled();
}
class Product {
public function isEnabled();
}
if(!$user->isNotAdmin()) {}
if(!$product->isNotEnabled()) {}
Twórz nazwy które można wymówić
Przykład
class DtaRcd {
private $modDMY;
public function rcdInt();
}
class Account {
private $modificationDate;
public function getInternalId();
}
Używaj jedno słowo na jedną pojęcie
Przykład
class UserRepository {
public function fetchAll();
public function retrieveActive();
public function getByOrganization();
public function findOneById();
}
class UserRepository {
public function findAll();
public function findActive();
public function findByOrganization();
public function findOneById();
}
Przykład
$repository->find...();
$entity->get...();
$provider->fetch...();
$storage->retrieve...();
Uwzględniaj kontekst
class Order {
private $street;
private $city;
private $postCode;
private $state;
}
class Order {
private $adrStreet;
private $adrCity;
private $adrPostCode;
private $adrState;
}
class Order {
private Address;
}
Korzystaj z dziedziny problemu
// mamy zamówienie
$order;
// w warstwie domenowej
// przyjęcie zamówienia może wyglądać tak:
$shop->placeOrder($order)
// w warstwie infrastruktury
// jego zapis może być taki:
$em->persist($order);
Im bliżej kod jest dziedziny problemu tym bardziej powinien zawierać nazwy z tej dziedziny.
Przykłady kiepskich nazw
$foo
// nie przedstawia intencji
$data
// zbyt ogólna
$a
// za krótka
$productsEditedBySuperAdminUsers
// za długa
$mod
// niejednoznaczna
class InvoiceManager {}
// nieokreślona
$state
// w złym kontekście
$products_list
// inna konwencja
Porady od zawodowych pisarzy
Dlaczego warto ?
- Są przydatne i nie dotyczą wyłącznie tworzenia nazw
- Pisarze istnieją od wieków, programiści tylko od dekad
- Ich porady są lepiej napisane i bardziej zabawne
Stephen King
programownie w zespole
Write with the door closed, rewrite with the door open
Anne Rice
hardware developera
I find the bigger the monitor, the better the concentration
Neil Gaiman
review feedback
When people tell you something’s wrong or doesn’t work for them, they are almost always right.
When they tell you exactly what they think is wrong and how to fix it, they are almost always wrong
Parę słów na temat komentarzy
Dobry kod nie wymaga komentarzy
// sprawdzenie czy pracownik jest w wieku emerytalnym
if(
($employee->gender=='F' && $employee->age > 60)
||
($employee->gender=='M' && $employee->age > 65)
)
if($employee->isInRetirementAge())
Dobre komentarze
- Komentarze prawne
- Docblock
- Ostrzeżenie o konsekwencjach
- Wyjaśnienie (np. skomplikowany regexp)
- Komentarze TODO
Złe komentarze
- Komentarze HTML
- Znaczniki pozycji
- W klamrach zamykających
- Duplikowanie informacji
- Automatycznie generowane komentarze (IDE i inne narzędzia)
Jak ulepszać swoje zdolnośći językowe
Czytaj książki
Graj
Wykorzystuj słowniki
Słownik wyrazów bliskoznacznych - synonimy
(thesaurus)
Szlifuj swój angielski
Podsumowanie
-
Tworzenie nazw jest trudne !
-
Czytaj dobry kod (GitHub)
-
Rozwiń umiejętności językowe: czytaj, opowiadaj, graj
-
Spróbuj coś napisać
- programuj !!!
- komentarze
- własny blog
- książka
THX
Dobre praktyki tworzenia nazw
By Arkadiusz Kondas
Dobre praktyki tworzenia nazw
- 1,128