Aby mniej krzyczeć w kodzie
Styl kodowania Nette przechodzi drobną modyfikację: do stałych klasowych używana jest teraz notacja PascalCase zamiast oryginalnego SCREAMING_SNAKE_CASE.
Tradycja używania wielkich liter dla stałych pochodzi z języka C, gdzie tak oznaczano tzw. stałe makr preprocesora. Było to przydatne, aby nie przeoczyć rozróżnienia między kodem parsera a kodem preprocesora. PHP nie potrzebuje tego rozróżnienia, ponieważ nie posiada preprocesora. Z drugiej strony, nadmierne podkreślanie stałych przynosi efekt przeciwny do zamierzonego. Dlaczego stała ma krzyczeć i zwracać na siebie uwagę, być wyróżniającym się elementem w przepływie programu? Nie ma ku temu żadnego powodu.
Przykład prawdziwego kodu ze stałymi SCREAMING_SNAKE_CASE, które agresywnie wyróżniają się w kodzie, a także są trudniejsze do odczytania:
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 wygląda znacznie bardziej kompaktowo:
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 jest oczywiście ostrożny w kwestii kompatybilności wstecznej.
Wszystkie publiczne stałe również pozostają w swojej oryginalnej formie
i służą jako aliasy dla preferowanych stałych PascalCase. Będą one nadal
istnieć w następnym dużym wydaniu i będą miały flagę
@deprecated
.
Wszystkie nowo dodane stałe klasowe są teraz tylko w wariancie PascalCase. Stałe globalne nie są używane przez Nette.
Enumeracje
W PHP 8.1 pojawiły się enumy, które będą wykorzystywane również w Nette. Enumy zastąpią dotychczasowe rozwiązanie wykorzystujące stałe. Nie ma jeszcze standardu kodowania jak pisać enumy, organizacja PHP-FIG już dawno zawiodła w tej kwestii i wychodzi z zaleceniami z wieloletnim opóźnieniem. Sama dokumentacja PHP pełni rolę przewodnika. Dla “przypadków enum” używa wyłącznie notacji PascalCase, dotyczy to również wcześniejszej eksperymentalnej implementacji SplEnum.
Łączenie wyliczeń PascalCase ze stałymi SCREAMING_SNAKE_CASE wyglądałoby niespójnie, więc jest to również powód do zmiany stylu pisania stałych.
*Uwaga techniczna: wyliczenia to cukier syntaktyczny dla stałych, z punktu widzenia PHP nie ma różnicy między “enum case” a stałą klasową.
Jak zmienić własny kod?
Każda kosmetyczna zmiana zawsze wywoła wiele pretensji. Ale jeśli
spróbujesz przez miesiąc używać stałych PascalCase, będziesz nimi
zachwycony i nie będzie już odwrotu. I będziesz chciał wprowadzić nową
notację także do własnego kodu. Jak to zrobić? Idealnym sposobem jest zmiana
nazwy stałych w PhpStormie za pomocą funkcji
Refactor > Rename
. Zainstaluj również wtyczkę String
Manipulation i przypisz jej skrót w ustawieniach dla
Switch Case > To Pascal Case
.
Następnie wystarczy umieścić kursor na stałej, nacisnąć
Ctrl-F6
(zmiana nazwy), a następnie skrót dla
To Pascal Case
i PhpStorm zmieni stałą w całym projekcie.
Szczęśliwego kodowania!
Aby przesłać komentarz, proszę się zalogować