Για λιγότερες κραυγές στον κώδικα

2 χρόνια πριν Από το David Grudl  

Το στυλ κωδικοποίησης της 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 είναι ένας οδηγός. Για τις “περιπτώσεις enum”, χρησιμοποιεί αποκλειστικά τη σημειογραφία PascalCase, και αυτό ισχύει και για την προηγούμενη πειραματική υλοποίηση SplEnum.

Ο συνδυασμός των απαριθμήσεων PascalCase με τις σταθερές SCREAMING_SNAKE_CASE θα φαινόταν ασυνεπής, οπότε αυτός είναι επίσης ένας λόγος για να αλλάξει το στυλ γραφής των σταθερών.

Τεχνική σημείωση: οι απαριθμήσεις είναι συντακτική ζάχαρη για τις σταθερές, από την άποψη της PHP δεν υπάρχει καμία διαφορά μεταξύ της “enum case” και της σταθεράς κλάσης.

Πώς να αλλάξετε τον δικό σας κώδικα;

Οποιαδήποτε αισθητική αλλαγή θα προκαλεί πάντα μεγάλη δυσαρέσκεια. Αλλά αν δοκιμάσετε να χρησιμοποιήσετε τις σταθερές PascalCase για ένα μήνα, θα ενθουσιαστείτε με αυτές και δεν θα υπάρχει επιστροφή. Και θα θελήσετε να εισαγάγετε τη νέα σημειογραφία και στον δικό σας κώδικα. Πώς να το κάνετε; Ο ιδανικός τρόπος είναι να μετονομάσετε τις σταθερές στο PhpStorm χρησιμοποιώντας τη συνάρτηση Refactor > Rename. Επίσης, εγκαταστήστε το plugin String Manipulation και ορίστε του μια συντόμευση στις ρυθμίσεις για το Switch Case > To Pascal Case.

Στη συνέχεια, το μόνο που έχετε να κάνετε είναι να τοποθετήσετε τον κέρσορα στη σταθερά, να πατήσετε Ctrl-F6 (μετονομασία) και στη συνέχεια τη συντόμευση για το To Pascal Case και το PhpStorm θα αλλάξει τη σταθερά σε όλο το έργο.

Καλή κωδικοποίηση!

Τελευταίες θέσεις