Mniej krzyku w kodzie
Styl kodowania Nette przechodzi drobną modyfikację: dla stałych klasowych nowo używana jest notacja PascalCase zamiast pierwotnej SCREAMING_SNAKE_CASE.

Tradycja używania wielkich liter dla stałych pochodzi z języka C, gdzie w ten sposób oznaczano tzw. makrostałe preprocesora. Było użyteczne nieprzegapialne odróżnienie kodu dla parsera od kodu dla preprocesora. PHP tego rozróżnienia nie potrzebuje, ponieważ nie ma preprocesora. Wręcz przeciwnie, zbyt duże wyróżnienie stałych jest kontrproduktywne. Dlaczego stała miałaby krzyczeć i zwracać na siebie uwagę, być wyróżniającym się elementem w przepływie programu? Nie ma ku temu powodu.
Przykład rzeczywistego kodu ze stałymi SCREAMING_SNAKE_CASE, które agresywnie wyróżniają się z kodu i również gorzej się czytają:
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;
}
}
Przykład tego samego kodu ze stałymi PascalCase, który wydaje się znacznie bardziej zwarty:
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;
}
}
Kompatybilność
Nette oczywiście dba o kompatybilność wsteczną. Wszystkie publiczne
stałe nadal pozostają również w pierwotnej formie i służą jako aliasy
dla preferowanych stałych PascalCase. Będą istnieć również w następnej
wersji major i będą miały flagę @deprecated
.
Wszystkie nowo dodane stałe klasowe są już tylko w wariancie PascalCase. Stałych globalnych Nette nie używa.
Wyliczenia (Enumy)
PHP 8.1 wprowadza typy wyliczeniowe, które będą kiedyś używane również w Nette. Wcześniej enumy naśladowano za pomocą stałych. Sama dokumentacja PHP dla “enum cases” używa notacji PascalCase, podobnie jak PHP-FIG czy wcześniejsza eksperymentalna implementacja SplEnum.
Wyliczenia są w zasadzie cukrem syntaktycznym dla stałych, z punktu widzenia PHP nie ma żadnej różnicy między „enum case” a stałą klasową. Dlatego łączenie enumów PascalCase i stałych SCREAMING_SNAKE_CASE wyglądałoby niespójnie, co jest kolejnym powodem zmiany stylu zapisu stałych.
Jak zmienić własny kod?
Każda kosmetyczna zmiana zawsze wywołuje wiele niechęci. Ale jeśli
spróbujesz przez miesiąc używać stałych PascalCase, będziesz nimi
zachwycony i nie będzie powrotu. I będziesz chciał wprowadzić nową
notację również do własnego kodu. Jak to zrobić? Idealnym sposobem jest
zmiana nazw stałych w PhpStorm za pomocą funkcji
Refactor > Rename
. Zainstaluj również wtyczkę String
Manipulation i przypisz jej w ustawieniach skrót klawiszowy dla
Switch Case > To Pascal Case
.
Wtedy wystarczy umieścić kursor na stałej, nacisnąć Ctrl-F6
(rename), a następnie skrót dla To Pascal Case
i PhpStorm zmieni
stałą w całym projekcie.
Happy coding!
Aby przesłać komentarz, proszę się zalogować