Za manj kričanja v kodi
Stil kodiranja Nette je doživel manjšo spremembo: za konstante razredov se zdaj uporablja zapis PascalCase namesto prvotnega SCREAMING_SNAKE_CASE.
Tradicija uporabe velikih črk za konstante izhaja iz jezika C, kjer so bile tako označene tako imenovane makrokonstante predprocesorja. Koristno je bilo, da nismo spregledali razlike med kodo razhroščevalnika in kodo predprocesorja. PHP tega razlikovanja ne potrebuje, saj nima predprocesorja. Po drugi strani pa je pretirano poudarjanje konstant kontraproduktivno. Zakaj bi morala konstanta kričati in opozarjati nase, biti pomemben element v poteku programa? Za to ni nobenega razloga.
Primer prave kode s konstantami SCREAMING_SNAKE_CASE, ki v kodi agresivno izstopajo in jih je tudi težje brati:
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 konstantami PascalCase, ki je videti veliko bolj kompaktna:
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 je seveda pozoren na združljivost za nazaj. Vse javne konstante prav
tako ostanejo v svoji prvotni obliki in služijo kot vzdevki za prednostne
konstante PascalCase. Obstajale bodo tudi v naslednji večji izdaji in bodo
imele zastavico @deprecated
.
Vse na novo dodane konstante razredov so zdaj samo v različici PascalCase. Globalnih konstant Nette ne uporablja.
Izštevanje
PHP 8.1 ima na voljo naštevanja, ki jih bomo uporabljali tudi v Nette. Številke bodo nadomestile prejšnjo rešitev z uporabo konstant. Kodirnega standarda za to, kako zapisati naštevanja, še ni, organizacija PHP-FIG je v zvezi s tem že dolgo neuspešna in s priporočili prihaja z večletno zamudo. Dokumentacija PHP je sama po sebi vodilo. Za “primere enumov” uporablja izključno zapis PascalCase, kar velja tudi za prejšnjo eksperimentalno implementacijo SplEnum.
Kombinacija naštevanj PascalCase s konstantami SCREAMING_SNAKE_CASE bi bila videti nekonsistentna, zato je tudi to razlog za spremembo sloga zapisovanja konstant.
Tehnična opomba: naštevanja so sintaktični sladkor za konstante, z vidika PHP ni razlike med “enum case” in konstanto razreda.
Kako spremeniti lastno kodo?
Vsaka kozmetična sprememba bo vedno povzročila veliko neodobravanja. Toda
če boste en mesec poskušali uporabljati konstante PascalCase, boste nad njimi
navdušeni in ne bo več poti nazaj. In nov zapis boste želeli uvesti tudi
v svojo lastno kodo. Kako to storiti? Idealen način je preimenovanje konstant
v programu PhpStorm z uporabo funkcije Refactor > Rename
. Prav
tako namestite vtičnik String
Manipulation in mu v nastavitvah določite bližnjico za
Switch Case > To Pascal Case
.
Potem morate le postaviti kurzor na konstanto, pritisniti
Ctrl-F6
(preimenovanje) 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