Por menos gritos no código

há 3 anos De David Grudl  

O estilo de codificação Nette está passando por uma pequena modificação: a notação PascalCase é agora usada para constantes de classe em vez da SCREAMING_SNAKE_CASE original.

A tradição de usar letras maiúsculas para constantes vem da linguagem C, onde as chamadas macro constantes de pré-processador eram denotadas como tal. Foi útil não ignorar a distinção entre código de parser e código de pré-processador. O PHP não precisa desta distinção, uma vez que não tem um pré-processador. Por outro lado, enfatizar em demasia as constantes é contraproducente. Por que uma constante deve gritar e chamar a atenção para si mesma, ser um elemento proeminente no fluxo do programa? Não há nenhuma razão para isso.

Exemplo de código real com constantes SCREAMING_SNAKE_CASE que se destacam agressivamente no código e também são mais difíceis de ler:

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;
	}
}

Um exemplo do mesmo código com constantes de PascalCase, que parece muito mais compacto:

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;
	}
}

Compatibilidade

A Nette é, naturalmente, cuidadosa com a retrocompatibilidade. Todas as constantes públicas também permanecem em sua forma original e servem como pseudônimos para as constantes preferidas do PascalCase. Elas continuarão a existir no próximo grande lançamento e terão a bandeira @deprecated.

Todas as constantes de classe recém-adicionadas estão agora apenas na variante PascalCase. Constantes globais não são utilizadas pela Nette.

Enumerações

O PHP 8.1 vem com enumerações, que serão usadas também em Nette. As enumerações substituirão a solução anterior usando constantes. Ainda não há um padrão de codificação de como escrever enumerações, a organização PHP-FIG há muito falhou neste sentido e apresenta recomendações com muitos anos de atraso. A própria documentação do PHP é um guia. Para “enumerar casos”, ela usa exclusivamente a notação PascalCase, e isto também se aplica à implementação experimental anterior SplEnum.

Combinar enumerações de PascalCase com constantes de SCREAMING_SNAKE_CASE pareceria inconsistente, portanto, este é também um motivo para mudar o estilo de escrita das constantes.

Nota técnica: enumerações são açúcar sintáctico para constantes, do ponto de vista do PHP não há diferença entre “enumerar caso” e constante de classe.

Como mudar o próprio código?

Qualquer mudança cosmética sempre causará muito ressentimento. Mas se você tentar usar constantes PascalCase durante um mês, você ficará encantado com elas e não haverá volta atrás. E você também vai querer introduzir a nova notação em seu próprio código. Como fazer isso? A maneira ideal é renomear as constantes no PhpStorm usando a função Refactor > Rename. Além disso, instale o plugin String Manipulation e atribua-lhe um atalho nas configurações para Switch Case > To Pascal Case.

Então tudo que você precisa fazer é colocar o cursor sobre a constante, pressione Ctrl-F6 (renomear) e então o atalho para To Pascal Case e PhpStorm mudará a constante ao longo de todo o projeto.

Feliz codificação!