Kódolási szabvány

Ez a dokumentum leírja a Nette fejlesztésére vonatkozó szabályokat és ajánlásokat. Amikor kódot járulsz hozzá a Nette-hez, be kell tartanod őket. Ennek legegyszerűbb módja a meglévő kód utánzása. A lényeg az, hogy minden kód úgy nézzen ki, mintha egyetlen ember írta volna.

A Nette Kódolási Szabvány megfelel a PSR-12 Extended Coding Style-nak, két fő kivétellel: a behúzáshoz tabulátorokat használ szóközök helyett, és az osztály konstansokhoz PascalCase-t használ.

Általános szabályok

  • Minden PHP fájlnak tartalmaznia kell a declare(strict_types=1) deklarációt.
  • Két üres sort használunk a metódusok elválasztására a jobb olvashatóság érdekében.
  • A shut-up operátor használatának okát dokumentálni kell: @mkdir($dir); // @ - a könyvtár létezhet.
  • Ha gyengén típusos összehasonlító operátort használunk (pl. ==, !=, …), a szándékot dokumentálni kell: // == elfogadja a null-t
  • Egy exceptions.php fájlba több kivételt is írhatsz.
  • Az interfészeknél nem adjuk meg a metódusok láthatóságát, mivel azok mindig public-ok.
  • Minden property-nek, visszatérési értéknek és paraméternek meg kell adni a típusát. Ezzel szemben a final konstansoknál soha nem adjuk meg a típust, mert az nyilvánvaló.
  • A stringek határolására aposztrófokat kell használni, kivéve, ha maga a literál tartalmaz aposztrófokat.

Elnevezési konvenciók

Tördelés és zárójelek

A Nette Kódolási Szabvány megfelel a PSR-12-nek (illetve a PER Coding Style-nak), néhány pontban kiegészíti vagy módosítja azt:

  • az arrow függvényeket szóköz nélkül írjuk a zárójel előtt, azaz fn($a) => $b
  • nem szükséges üres sor a különböző típusú use import utasítások között
  • a függvény/metódus visszatérési típusa és a nyitó kapcsos zárójel mindig külön sorokban vannak:
public function find(	string $dir,	array $options,	): array	{	// metódus törzse	} 

A nyitó kapcsos zárójel külön sorban fontos a függvény/metódus szignatúrájának és törzsének vizuális elválasztásához. Ha a szignatúra egy sorban van, az elválasztás egyértelmű (bal oldali kép), ha több sorban van, a PSR-ben a szignatúra és a törzs egybefolyik (középen), míg a Nette szabványban továbbra is elkülönülnek (jobbra):

Dokumentációs blokkok (phpDoc)

Fő szabály: Soha ne duplikálj semmilyen információt a szignatúrában, mint például a paraméter típusa vagy a visszatérési típus, hozzáadott érték nélkül.

Dokumentációs blokk egy osztály definíciójához:

  • Az osztály leírásával kezdődik.
  • Üres sor következik.
  • Az @property (vagy @property-read, @property-write) annotációk következnek, egymás után. Szintaxis: annotáció, szóköz, típus, szóköz, $név.
  • Az @method annotációk következnek, egymás után. Szintaxis: annotáció, szóköz, visszatérési típus, szóköz, név(típus $param, …).
  • Az @author annotációt kihagyjuk. A szerzőiséget a forráskód története őrzi meg.
  • Használhatók az @internal vagy @deprecated annotációk.
/** * MIME üzenet rész. * * @property string $encoding * @property-read array $headers * @method string getSomething(string $name) * @method static bool isEnabled() */ 

Egy property dokumentációs blokkja, amely csak az @var annotációt tartalmazza, egysoros legyen:

/** @var string[] */ private array $name; 

Dokumentációs blokk egy metódus definíciójához:

  • Rövid metódusleírással kezdődik.
  • Nincs üres sor.
  • Az @param annotációk külön sorokban.
  • Az @return annotáció.
  • Az @throws annotációk, egymás után.
  • Használhatók az @internal vagy @deprecated annotációk.

Minden annotációt egy szóköz követ, kivéve az @param-ot, amelyet a jobb olvashatóság érdekében két szóköz követ.

/** * Fájlt keres egy könyvtárban. * @param string[] $options * @return string[] * @throws DirectoryNotFoundException */ public function find(string $dir, array $options): array 

Tabulátorok szóközök helyett

A tabulátoroknak számos előnyük van a szóközökkel szemben:

  • a behúzás mérete a szerkesztőkben és a weben testreszabható
  • nem erőltetik a kódra a felhasználó behúzásméret-preferenciáját, így a kód jobban hordozható
  • egyetlen billentyűleütéssel írhatók (bárhol, nem csak azokban a szerkesztőkben, amelyek a tabulátorokat szóközökre cserélik)
  • a behúzás a céljuk
  • tiszteletben tartják a látássérült és vak kollégák igényeit

A tabulátorok használatával projektjeinkben lehetővé tesszük a szélesség testreszabását, ami a legtöbb ember számára feleslegesnek tűnhet, de a látássérültek számára elengedhetetlen.

A Braille-kijelzőket használó vak programozók számára minden szóköz egy Braille-cellát jelent. Tehát ha az alapértelmezett behúzás 4 szóköz, a 3. szintű behúzás 12 értékes Braille-cellát pazarol el még a kód kezdete előtt. Egy 40 cellás kijelzőn, amelyet a laptopoknál leggyakrabban használnak, ez a rendelkezésre álló cellák több mint negyede, amelyet információ nélkül pazarolnak el.