Щоб менше крику в коді
Стиль кодування Nette зазнає незначних змін: для констант класу тепер використовується нотація PascalCase замість оригінальної SCREAMING_SNAKE_CASE.
Традиція використовувати великі літери для позначення констант походить з мови C, де так позначалися так звані макроконстанти препроцесора. Корисно не забувати про різницю між кодом синтаксичного аналізатора і кодом препроцесора. PHP не потребує такого розмежування, оскільки не має препроцесора. З іншого боку, надмірна увага до констант є контрпродуктивною. Чому константа повинна кричати і привертати до себе увагу, бути помітним елементом в потоці програми? Для цього немає жодних підстав.
Приклад реального коду з константами SCREAMING_SNAKE_CASE, які агресивно виділяються в коді, а також гірше читаються:
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;
}
}
Приклад цього ж коду з константами PascalCase, який виглядає набагато компактніше:
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;
}
}
Сумісність
Звичайно, Nette дбає про зворотну
сумісність. Всі загальнодоступні константи
також залишаються у своїй початковій формі
і слугують псевдонімами для бажаних
констант PascalCase. Вони продовжать існувати у
наступному великому випуску і матимуть
прапорець @deprecated
.
Усі нові константи класів тепер доступні лише у варіанті PascalCase. Глобальні константи не використовуються Nette.
Перерахування
PHP 8.1 поставляється з пере рахуваннями, які будуть використовуватися і в Nette. Перерахування замінять попереднє рішення з використанням констант. Стандарту кодування для написання зчислень ще не існує, організація PHP-FIG вже давно не справляється з цим завданням і видає рекомендації із запізненням на багато років. Сама документація PHP є керівництвом. Для “перелічувальних випадків” вона використовує виключно нотацію PascalCase, і це стосується також більш ранньої експериментальної реалізації SplEnum.
Поєднання перерахувань PascalCase з константами SCREAMING_SNAKE_CASE виглядатиме непослідовно, тому це також є причиною для зміни стилю написання констант.
Технічна примітка: перерахування є синтаксичним цукром для констант, з точки зору PHP немає ніякої різниці між “регістром перерахування” і константою класу.
Як змінити власний код?
Будь-які косметичні зміни завжди
викликають багато обурення. Але якщо ви
спробуєте використовувати константи PascalCase
протягом місяця, ви будете в захваті від них
і шляху назад не буде. І ви захочете
запровадити нову нотацію у власному коді.
Як це зробити? Ідеальний спосіб –
перейменувати константи в PhpStorm за
допомогою функції Refactor > Rename
. Також
встановіть плагін String
Manipulation і призначте йому в налаштуваннях
ярлик для Switch Case > To Pascal Case
.
Тоді все, що вам потрібно зробити, це
навести курсор на константу, натиснути
Ctrl-F6
(перейменувати), а потім ярлик
для To Pascal Case
і PhpStorm змінить константу
по всьому проекту.
Щасливого кодування!
Щоб залишити коментар, будь ласка, увійдіть до системи