Προγραμματισμός

Η Python μπορεί να λάβει σύνταξη αντιστοίχισης προτύπων

Οι δημιουργοί της γλώσσας Python εξετάζουν μια νέα πρόταση, το PEP 622, που τελικά θα φέρει μια σύνταξη δήλωσης αντιστοίχισης μοτίβων στην Python. Οι νέες δηλώσεις αντιστοίχισης προτύπων θα δώσουν στους προγραμματιστές της Python πιο εκφραστικούς τρόπους χειρισμού δομημένων δεδομένων, χωρίς να χρειάζεται να καταφύγουν σε λύσεις.

Η αντιστοίχιση προτύπων είναι ένα κοινό χαρακτηριστικό πολλών γλωσσών προγραμματισμού, όπως διακόπτης / θήκη στο C. Επιτρέπει σε μία από τις πιθανές ενέργειες να ληφθούν με βάση την τιμή μιας δεδομένης μεταβλητής ή έκφρασης. Ενώ η Python δεν είχε μια εγγενή σύνταξη για αντιστοίχιση μοτίβων, ήταν δυνατό να την μιμηθούμε μεαν / elif / αλλιώς αλυσίδες ή αναζήτηση λεξικού.

Το PEP 622 προτείνει μια μέθοδο αντιστοίχισης μιας έκφρασης με έναν αριθμό ειδών μοτίβων χρησιμοποιώντας ένα αγώνα / θήκη σύνταξη:

ταιριάζει με κάτι: υπόθεση 0 | 1 | 2: εκτύπωση ("Μικρός αριθμός") θήκη [] | [_]: εκτύπωση ("Μια σύντομη ακολουθία") θήκη () | bytes (): print ("Something-like") case _: print ("Something another")

Οι υποστηριζόμενοι τύποι αντιστοίχισης μοτίβων περιλαμβάνουν κυριολεκτικά, ονόματα, σταθερές τιμές, ακολουθίες, αντιστοίχιση (βασικά, την παρουσία ενός ζεύγους κλειδιού-τιμής στην έκφραση), μια κλάση, ένα μείγμα από τα παραπάνω ή οποιαδήποτε από αυτές τις συν εκφράσεις υπό όρους. Τυχόν αγώνες που είναι ασαφείς ή αδύνατοι να επιλυθούν θα αποτελέσουν μια εξαίρεση στο χρόνο εκτέλεσης.

Τα αντικείμενα μπορούν να χειριστούν τις δοκιμές αντιστοίχισης μέσω ενός νέου πρωτοκόλλου που ονομάζεται __αγώνας__ πρωτόκολλο. Εάν ένα αντικείμενο εφαρμόζει το __αγώνας__ μέθοδος, μπορεί να χρησιμοποιηθεί για να ελέγξει εάν ταιριάζει με ένα συγκεκριμένο μοτίβο τάξης και να επιστρέψει μια κατάλληλη απόκριση.

Το PEP 622 θα επέτρεπε επίσης στους ελεγκτές στατικού τύπου να επαληθεύσουν ότι οι αντιστοιχίσεις μπορούν να επαληθευτούν. Ενα νέο @ σφραγισμένο Διακοσμητής για μια τάξη δείχνει να πληκτρολογήσει πούλια ότι οποιαδήποτε υποκατηγορία της εν λόγω τάξης ορίζεται στην ίδια ενότητα με την βασική τάξη.

Προηγούμενα PEP για προσθήκη αντιστοίχισης μοτίβων - PEP 275 και PEP 3103, που προτάθηκαν το 2001 και το 2006 αντίστοιχα - απορρίφθηκαν λόγω έλλειψης δημοφιλούς υποστήριξης. Το PEP 3103 συντάχθηκε από τον δημιουργό της Python Guido van Rossum. Το νέο PEP, που συνέταξε ο van Rossum και πολλοί άλλοι, στοχεύει στην παροχή τακτικών εκφράσεων για την αντιστοίχιση αντικειμένων, αντί για ένα απλό αν / elif / αλλιώς υποκατάστατο. Οι συγγραφείς σημειώνουν ότι πολλές πτυχές αυτού του PEP εμπνεύστηκαν από το πώς λειτουργεί η αντιστοίχιση μοτίβων στο Rust και το Scala.

Το πώς θα εφαρμοστούν όλα αυτά κάτω από την κουκούλα είναι ακόμη προς συζήτηση. Η εφαρμογή που προτείνεται στο PEP 622 θα δημιουργούσε τις ίδιες ακολουθίες bytecode με ένα αν / elif / αλλιώς αλυσίδα. Μεγαλύτερος διακόπτης / θήκη Τα μπλοκ θα μπορούσαν να γίνουν λιγότερο αποδοτικά, ανάλογα με το πόση λογική υπό όρους συμπεριλήφθηκε σε καθένα υπόθεση. Ωστόσο, το PEP καθιστά σαφές ότι οποιοσδήποτε αριθμός προσεγγίσεων και βελτιστοποιήσεων απόδοσης (π.χ. απομνημόνευση) παραμένουν στο τραπέζι.

Ακόμα κι αν το PEP καταλήξει να γίνει αποδεκτό, πολλά για αυτό μπορεί να αλλάξουν. Ένα ζήτημα που είναι πιθανό να αμφισβητηθεί είναι η χρήση του υπόθεση _: αντί αλλού: ως τελική ρήτρα all-catch για τοδιακόπτης δήλωση._ χρησιμοποιείται ως προσωρινή μεταβλητή σε πολλά περιβάλλοντα και η παράκαμψη της συμπεριφοράς της μονομερώς θα μπορούσε να αποτελέσει αποτέλεσμα για τους προγραμματιστές.