Kevesebb kiabálás a kódban
A Nette kódolási stílusa apró módosításon esik át: az osztálykonstansokhoz újonnan a PascalCase jelölést használjuk az eredeti SCREAMING_SNAKE_CASE helyett.

A konstansokhoz használt nagybetűk hagyománya a C nyelvből származik, ahol így jelölték az ún. preprocesszor makrokonstansokat. Hasznos volt feltűnően megkülönböztetni a parsernek szánt kódot a preprocesszornak szánt kódtól. A PHP-nak erre a megkülönböztetésre nincs szüksége, mivel nincs preprocesszora. Ezzel szemben a konstansok túlzott kiemelése kontraproduktív. Miért kellene egy konstansnak kiabálnia és felhívnia magára a figyelmet, kiemelkedő elemnek lennie a program folyamatában? Nincs rá ok.
Példa valós 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;
}
}
Példa ugyanarra a kódra PascalCase konstansokkal, amely sokkal kompaktabbnak 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 visszamenőleges kompatibilitásra. Minden
nyilvános konstans továbbra is megmarad az eredeti formájában is, és
aliaszként szolgál a preferált PascalCase konstansokhoz. A következő
főverzióban is létezni fognak, és @deprecated
jelzéssel
lesznek ellátva.
Minden újonnan hozzáadott osztálykonstans már csak PascalCase változatban létezik. Globális konstansokat a Nette nem használ.
Enumerációk
A PHP 8.1 bevezeti az enum típusokat, amelyeket egyszer majd a Nette-ben is használni fognak. Korábban az enumokat konstansokkal utánozták. Maga a PHP dokumentáció az “enum case”-ekhez PascalCase jelölést használ, ahogy a PHP-FIG vagy a korábbi kísérleti implementáció, az SplEnum is.
Az enumok lényegében szintaktikai cukorkák a konstansokhoz, a PHP szempontjából nincs különbség az „enum case” és az osztálykonstans között. Ezért a PascalCase enumok és a SCREAMING_SNAKE_CASE konstansok kombinálása következetlennek tűnne, ami egy további ok a konstansok írásmódjának megváltoztatására.
Hogyan változtassuk meg a saját kódunkat?
Minden kozmetikai változás mindig sok ellenérzést vált ki. De ha egy
hónapig kipróbálja a PascalCase konstansokat, le lesz nyűgözve tőlük, és
nem lesz visszaút. És be akarja majd vezetni az új jelölést a saját
kódjába is. Hogyan tegye? Az ideális út az, ha átnevezi a konstansokat a
PhpStormban a Refactor > Rename
funkcióval. Telepítse a String
Manipulation plugint is, és rendeljen hozzá egy billentyűparancsot a
beállításokban a Switch Case > To Pascal Case
funkcióhoz.
Ezután elég a kurzort a konstansra helyezni, megnyomni a
Ctrl-F6
(rename) billentyűt, majd a To Pascal Case
billentyűparancsot, és a PhpStorm megváltoztatja a konstanst az egész
projektben.
Boldog kódolást!
A hozzászólás elküldéséhez kérjük, jelentkezzen be