Kevesebb sikolyért a kódban
A Nette kódolási stílusa egy kisebb módosításon megy keresztül: az osztálykonstansoknál az eredeti SCREAMING_SNAKE_CASE helyett a PascalCase jelölést használjuk.
A nagybetűs konstansok használatának hagyománya a C nyelvből származik, ahol az úgynevezett preprocesszor makró konstansokat így jelölték. Hasznos volt, hogy ne hagyjuk figyelmen kívül a különbséget a parser kód és a preprocesszor kód között. A PHP-nek nincs szüksége erre a megkülönböztetésre, mivel nincs preprocesszora. Másrészt a konstansok túlhangsúlyozása kontraproduktív. Miért kellene egy konstansnak kiabálnia és felhívnia magára a figyelmet, kiemelkedő elemnek lennie a programfolyamatban? Nincs rá semmi ok.
Példa valódi kódra SCREAMING_SNAKE_CASE konstansokkal, amelyek agresszívan kiemelkednek a kódból, és nehezebben is olvashatók:
foreach (self::SYMBOL_TO_NAME as $symbol => $name) {
$idx = self::ACTION_BASE[$state] + $symbol;
if (($idx >= 0 && $idx < count(self::ACTION) && self::ACTION_CHECK[$idx] === $symbol
|| $state < self::YY_2_TBLSTATE
&& ($idx = self::ACTION_BASE[$state + self::NUM_NON_LEAF_STATES] + $symbol) >= 0
&& $idx < count(self::ACTION) && self::ACTION_CHECK[$idx] === $symbol)
&& self::ACTION[$idx] !== self::UNEXPECTED_TOKEN_RULE
&& self::ACTION[$idx] !== self::DEFAULT_ACTION
&& $symbol === 0
) {
return true;
}
}
PascalCase konstansokkal, ami sokkal tömörebbnek tűnik:
foreach (self::SymbolToName as $symbol => $name) {
$idx = self::ActionBase[$state] + $symbol;
if (($idx >= 0 && $idx < count(self::Action) && self::ActionCheck[$idx] === $symbol
|| $state < self::Yy2Tblstate
&& ($idx = self::ActionBase[$state + self::NumNonLeafStates] + $symbol) >= 0
&& $idx < count(self::Action) && self::ActionCheck[$idx] === $symbol)
&& self::Action[$idx] !== self::UnexpectedTokenRule
&& self::Action[$idx] !== self::DefaultAction
&& $symbol === 0
) {
return true;
}
}
Kompatibilitás
A Nette természetesen ügyel a visszafelé kompatibilitásra. Minden
nyilvános konstans is megmarad eredeti formájában, és a PascalCase
preferált konstansok aliasaként szolgál. Ezek a következő nagyobb
kiadásban is létezni fognak, és a @deprecated
flaggel lesznek
ellátva.
Minden újonnan hozzáadott osztálykonstans mostantól csak a PascalCase változatban van. A globális konstansokat a Nette nem használja.
Felsorolások
A PHP 8.1 enumerációkkal érkezik, amelyeket a Nette-ben is használni fogunk. Az enumerációk felváltják a korábbi, konstansokat használó megoldást. Még nincs kódolási szabvány arra, hogy hogyan kell enumerációkat írni, a PHP-FIG szervezet már régóta kudarcot vallott e tekintetben, és sok év késéssel áll elő ajánlásokkal. Maga a PHP dokumentáció egy útmutató. Az “enum esetekre” kizárólag PascalCase jelölést használ, és ez vonatkozik a korábbi kísérleti SplEnum implementációra is.
A PascalCase enumerációk és a SCREAMING_SNAKE_CASE konstansok kombinálása következetlenül nézne ki, így ez is egy ok arra, hogy a konstansok írásmódját megváltoztassuk.
*Technikai megjegyzés: a felsorolások szintaktikai cukrot jelentenek a konstansok számára, PHP szempontból nincs különbség az “enum case” és az osztálykonstans között.
Hogyan változtassuk meg a saját kódot?
Bármilyen kozmetikai változtatás mindig sok neheztelést fog okozni. De ha
egy hónapig kipróbálod a PascalCase konstansok használatát, el leszel
ragadtatva tőlük, és nem lesz visszaút. És a saját kódodba is be akarod
majd vezetni az új jelölést. Hogyan kell ezt megtenni? Az ideális megoldás
az, ha átnevezzük a konstansokat a PhpStormban a
Refactor > Rename
függvény segítségével. Továbbá
telepítsd a String
Manipulation nevű plugint, és rendelj hozzá egy parancsikont a
Switch Case > To Pascal Case
beállításaiban.
Ezután csak annyit kell tennie, hogy a kurzort a konstansra helyezi,
megnyomja a Ctrl-F6
(átnevezés) gombot, majd a
To Pascal Case
parancsikonját, és a PhpStorm az egész projektben
megváltoztatja a konstanst.
Boldog kódolást!
A hozzászólás elküldéséhez kérjük, jelentkezzen be