Za manj kričanja v kodi
Coding style Nette doživlja drobno spremembo: za konstante razredov se po novem uporablja notacija PascalCase namesto prvotne SCREAMING_SNAKE_CASE.

Tradicija uporabe velikih črk za konstante izvira iz jezika C, kjer so se tako označevale t.i. makrokonstante predprocesorja. Bilo je koristno nepregledljivo ločiti kodo za parser od kode za predprocesor. PHP te ločitve ne potrebuje, saj predprocesorja nima. Nasprotno pa je prekomerno poudarjanje konstant kontraproduktivno. Zakaj bi morala konstanta kričati in opozarjati nase, biti izstopajoč element v toku programa? Ni razloga za to.
Primer realne kode s SCREAMING_SNAKE_CASE konstantami, ki agresivno izstopajo iz kode in se tudi težje berejo:
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;
}
}
Primer iste kode s PascalCase konstantami, ki deluje veliko bolj kompaktno:
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;
}
}
Združljivost
Nette seveda skrbi za povratno združljivost. Vse javne konstante še naprej
ostajajo tudi v prvotni obliki in služijo kot aliasi za preferirane PascalCase
konstante. Obstajale bodo tudi v naslednji glavni različici in bodo imele
oznako @deprecated
.
Vse novo dodane konstante razredov so že samo v različici PascalCase. Globalnih konstant Nette ne uporablja.
Enumerations
PHP 8.1 prinaša naštevne tipe, ki se bodo nekoč uporabljali tudi v Nette. Prej so se enum-i posnemali s pomočjo konstant. Sama dokumentacija PHP za “enum cases” uporablja PascalCase notacijo, prav tako PHP-FIG ali prejšnja eksperimentalna implementacija SplEnum.
Naštevni tipi so v bistvu sintaktični sladkor za konstante, z vidika PHP ni med „enum case“ in razredno konstanto nobene razlike. In zato bi kombiniranje PascalCase enumov in SCREAMING_SNAKE_CASE konstant izgledalo nekonsistentno, kar je še en razlog za spremembo sloga zapisa konstant.
Kako spremeniti lastno kodo?
Vsaka kozmetična sprememba vedno sproži veliko nejevolje. Ampak če
poskusite mesec dni uporabljati PascalCase konstante, boste nad njimi navdušeni
in ne bo poti nazaj. In boste želeli uvesti novo notacijo tudi v lastno kodo.
Kako na to? Idealna pot je preimenovati konstante v PhpStormu s pomočjo
funkcije Refactor > Rename
. Namestite si tudi vtičnik String
Manipulation in mu v nastavitvah dodelite tipkovno bližnjico za
Switch Case > To Pascal Case
.
Potem bo dovolj postaviti kurzor na konstanto, pritisniti
Ctrl-F6
(rename) in nato bližnjico za To Pascal Case
in PhpStorm bo spremenil konstanto v celotnem projektu.
Srečno kodiranje!
Če želite oddati komentar, se prijavite