Kodda daha az çığlık atmak için

3 yıl önce Kimden David Grudl  

Nette kodlama stili küçük bir değişikliğe uğruyor: sınıf sabitleri için artık orijinal SCREAMING_SNAKE_CASE yerine PascalCase notasyonu kullanılıyor.

Sabitleri büyük harfle yazma geleneği, önişlemci makro sabitlerinin bu şekilde gösterildiği C dilinden gelmektedir. Ayrıştırıcı kodu ile önişlemci kodu arasındaki ayrımı gözden kaçırmamakta yarar vardı. PHP bir önişlemciye sahip olmadığı için bu ayrıma ihtiyaç duymaz. Öte yandan, sabitleri aşırı vurgulamak ters etki yaratır. Bir sabit neden bağırsın ve dikkatleri üzerine çeksin, program akışında öne çıkan bir unsur olsun? Bunun için hiçbir sebep yoktur.

Kodda agresif bir şekilde göze çarpan ve okunması daha zor olan SCREAMING_SNAKE_CASE sabitleri içeren gerçek kod örneği:

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

Aynı kodun PascalCase sabitleri ile çok daha derli toplu görünen bir örneği:

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

Uyumluluk

Nette elbette geriye dönük uyumluluk konusunda dikkatli davranmaktadır. Tüm genel sabitler de orijinal formlarında kalır ve tercih edilen PascalCase sabitleri için takma ad olarak hizmet eder. Bir sonraki ana sürümde var olmaya devam edecekler ve @deprecated bayrağına sahip olacaklar.

Yeni eklenen tüm sınıf sabitleri artık yalnızca PascalCase varyantındadır. Global sabitler Nette tarafından kullanılmaz.

Numaralandırmalar

PHP 8.1, Nette'de de kullanılacak olan numaralandırmalar ile birlikte geliyor. Enumlar, sabitleri kullanan önceki çözümün yerini alacak. Henüz numaralandırmaların nasıl yazılacağına dair bir kodlama standardı yoktur, PHP-FIG organizasyonu bu konuda uzun süredir başarısızdır ve önerileri yıllar sonra ortaya çıkarmaktadır. PHP dokümantasyonunun kendisi bir rehberdir. “Enum durumları” için sadece PascalCase gösterimini kullanır ve bu daha önceki deneysel uygulama SplEnum için de geçerlidir.

PascalCase numaralandırmalarını SCREAMING_SNAKE_CASE sabitleri ile birleştirmek tutarsız görünecektir, bu nedenle bu aynı zamanda sabitlerin yazım tarzını değiştirmek için bir nedendir.

Teknik not: numaralandırmalar sabitler için sözdizimsel şekerdir, PHP bakış açısından “enum case” ile sınıf sabiti arasında bir fark yoktur.

Kendi kodunu nasıl değiştirebilirim?

Herhangi bir kozmetik değişiklik her zaman çok fazla kızgınlığa neden olacaktır. Ancak PascalCase sabitlerini bir ay boyunca kullanmayı denerseniz, onlardan heyecan duyacaksınız ve geri dönüşü olmayacak. Ve yeni gösterimi kendi kodunuza da uygulamak isteyeceksiniz. Nasıl Yapılır? İdeal yol, Refactor > Rename işlevini kullanarak PhpStorm'daki sabitleri yeniden adlandırmaktır. Ayrıca, String Manipulation eklentisini yükleyin ve Switch Case > To Pascal Case için ayarlarda bir kısayol atayın.

Daha sonra tek yapmanız gereken imleci sabitin üzerine getirmek, Ctrl-F6 (yeniden adlandır) ve ardından To Pascal Case kısayoluna basmaktır ve PhpStorm proje boyunca sabiti değiştirecektir.

Mutlu kodlamalar!