Τύποι στη γλώσσα τύπων Power Query M
Η Γλώσσα τύπων Power Query M είναι μια χρήσιμη και εκφραστική γλώσσα συνδυασμού δεδομένων. Ωστόσο, έχει ορισμένους περιορισμούς. Για παράδειγμα, δεν υπάρχει ισχυρή επιβολή του συστήματος τύπου. Σε ορισμένες περιπτώσεις, απαιτείται πιο αυστηρή επικύρωση. Ευτυχώς, η M παρέχει μια ενσωματωμένη βιβλιοθήκη με υποστήριξη για τύπους, προκειμένου να καταστεί η ισχυρότερη επικύρωση εφικτή.
Οι προγραμματιστές θα πρέπει να έχουν βαθιά κατανόηση του συστήματος τύπου, προκειμένου να το κάνουν αυτό με οποιαδήποτε γενικήτητα. Επίσης, ενώ η προδιαγραφή γλώσσας Power Query M εξηγεί την ενότητα συστήματος τύπου, αφήνει μερικές εκπλήξεις. Για παράδειγμα, η επικύρωση των παρουσιών συναρτήσεων απαιτεί έναν τρόπο σύγκρισης τύπων για συμβατότητα.
Με την πιο προσεκτική εξερεύνηση του συστήματος τύπου M, πολλά από αυτά τα ζητήματα μπορούν να διευκρινιστούν και οι προγραμματιστές θα έχουν τη δυνατότητα να δημιουργήσουν τις λύσεις που χρειάζονται.
Η γνώση του κατηγορικού λογισμού και της αφελής θεωρίας συνόλων θα πρέπει να είναι επαρκής για να κατανοήσετε τη σημειογραφία που χρησιμοποιείται.
ΠΡΟΚΑΤΑΡΚΤΙΚΆ
(1) Β := { true; false }
Το B είναι το τυπικό σύνολο δυαδικών τιμών
(2) N := { έγκυρα αναγνωριστικά M }
N είναι το σύνολο όλων των έγκυρων ονομάτων στην M. Αυτό ορίζεται αλλού.
(3) P := ⟨B, T⟩
Το P είναι το σύνολο των παραμέτρων συνάρτησης. Κάθε μία είναι πιθανώς προαιρετική και έχει έναν τύπο. Τα ονόματα παραμέτρων δεν έχουν σχέση.
(4) Πn := ⋃0≤i≤n ⟨i, Πi⟩
Pn είναι το σύνολο όλων των ταξινομημένων ακολουθιών παραμέτρων συνάρτησης n.
(5) P := ⋃*P i
Το P* είναι το σύνολο όλων των πιθανών ακολουθιών παραμέτρων συνάρτησης, από το μήκος 0 και μετά.
(6) F := ⟨B, N, T⟩
F είναι το σύνολο όλων των πεδίων εγγραφής. Κάθε πεδίο είναι πιθανώς προαιρετικό, έχει ένα όνομα και έναν τύπο.
(7) Fn := ∏0≤i≤n F
Fn είναι το σύνολο όλων των συνόλων n πεδίων εγγραφής.
(8) F := ( ⋃* Fi ) ∖ { F | ⟨b1, n1, t1⟩, ⟨b2, n2, t2⟩ ∈ F ⋀ n1n =
F* είναι το σύνολο όλων των συνόλων (οποιουδήποτε μήκους) των πεδίων εγγραφής, εκτός από τα σύνολα όπου περισσότερα από ένα πεδία έχουν το ίδιο όνομα.
(9) C := ⟨N,T⟩
C είναι το σύνολο των τύπων στηλών, για πίνακες. Κάθε στήλη έχει ένα όνομα και έναν τύπο.
(10) Γn ⊂ ⋃0≤i≤n ⟨i, C⟩
Cn είναι το σύνολο όλων των ταξινομημένων ακολουθιών τύπων στηλών n.
(11) C := ( ⋃* Ci ) ∖ { Cm | ⟨a, ⟨n1, t1⟩⟩, ⟨b, ⟨n2, t2⟩⟩ ∈ Cm ⋀ n1n = }
C* είναι το σύνολο όλων των συνδυασμών (οποιουδήποτε μήκους) τύπων στηλών, εκτός από εκείνους όπου περισσότερες από μία στήλες έχουν το ίδιο όνομα.
ΤΎΠΟΙ M
(12) TF := ⟨P, P⟩*
Ένας Τύπος συνάρτησης αποτελείται από έναν τύπο επιστροφής και μια ταξινομημένη λίστα με παραμέτρους συνάρτησης μηδέν ή περισσότερες.
(13) TL :=〖T〗
Ένας τύπος λίστας υποδεικνύεται από έναν δεδομένο τύπο (που ονομάζεται "τύπος στοιχείου") τυλιγμένος σε άγκιστρα.
Εφόσον χρησιμοποιούνται άγκιστρα στη μεταλλαγγεία, 〖 〗 οι αγκύλες χρησιμοποιούνται σε αυτό το έγγραφο.
(14) TR := ⟨B, F⟩*
Ένας Τύπος εγγραφής έχει μια σημαία που υποδεικνύει αν είναι "ανοιχτός" και πεδία μη ταξινομημένων εγγραφών μηδέν ή περισσότερων.
(15) TRo := ⟨true, F⟩
(16) TR• := ⟨φάλση, F⟩
Τα TRo και TR• είναι συντομεύσεις σημειογραφίας για ανοικτούς και κλειστούς τύπους εγγραφών, αντίστοιχα.
(17) T := C *
Ένας Τύπος πίνακα είναι μια ταξινομημένη ακολουθία τύπων στηλών μηδέν ή περισσότερων, όπου δεν υπάρχουν διενεύσεις ονόματος.
(18) T P := { any, none, null, logical, number, time, date; datetime, datetimezone, duration, text; binary; type; list; record, table; function, anynonnull }
Ένας Στοιχειώδης τύπος είναι από αυτή τη λίστα λέξεων-κλειδιών M.
(19) TN := { t n, u ∈ T t | n = u+null } = tull
Οποιοσδήποτε τύπος μπορεί επιπλέον να επισημανθεί ως επιδέχεται τιμές null, χρησιμοποιώντας τη λέξη-κλειδί "nullable" .
(20) T := TF ∪ TL ∪ TR ∪ T ∪ TP ∪ TN
Το σύνολο όλων των τύπων M είναι η ένωση αυτών των έξι συνόλων τύπων:
Τύποι συναρτήσεων, τύποι λίστας, τύποι εγγραφών, τύποι πίνακα, στοιχειώδεις τύποι και τύποι που επιδέχονται τιμές null.
ΛΕΙΤΟΥΡΓΊΕΣ
Πρέπει να οριστεί μία συνάρτηση: Χωρίς δυνατότητα null: T ← T
Αυτή η συνάρτηση λαμβάνει έναν τύπο και επιστρέφει έναν τύπο που είναι ισοδύναμος, με τη διαφορά ότι δεν συμμορφώνεται με την τιμή null.
ΤΑΥΤΌΤΗΤΕΣ
Ορισμένες ταυτότητες είναι απαραίτητες για τον ορισμό ορισμένων ειδικών περιπτώσεων και μπορεί επίσης να σας βοηθήσουν να διευκρινίζετε τα παραπάνω.
(21) οποιαδήποτε που επιδέχεται τιμές null = any
(22) anynonnull με δυνατότητα null = any
(23) null null = null
(24) χωρίς δυνατότητα null = null
(25) τιμή null που επιδέχεται τιμές null ∈ T = t που επιδέχεται τιμές null
(26) NonNullable(nullable t ∈ T) = NonNullable(t)
(27) NonNullable(any) = anynonnull
ΣΥΜΒΑΤΌΤΗΤΑ ΤΎΠΟΥ
Όπως ορίζεται αλλού, ένας τύπος M είναι συμβατός με έναν άλλο τύπο M εάν και μόνο εάν όλες οι τιμές που συμμορφώνονται με τον πρώτο τύπο συμμορφώνονται επίσης με τον δεύτερο τύπο.
Εδώ ορίζεται μια σχέση συμβατότητας που δεν εξαρτάται από τη συμμόρφωση των τιμών και βασίζεται στις ιδιότητες των ίδιων των τύπων. Αναμένεται ότι αυτή η σχέση, όπως ορίζεται σε αυτό το έγγραφο, θα είναι απολύτως ισοδύναμη με τον αρχικό ορισμό σημασιολογίας.
Η σχέση "είναι συμβατή με" : ≤ : B ← T × T
Στην παρακάτω ενότητα, ένα πεζό t θα αντιπροσωπεύει πάντα έναν τύπο M, ένα στοιχείο του T.
Το Φ θα αντιπροσωπεύει ένα υποσύνολο της F* ή της C*.
(28) t ≤ t
Αυτή η σχέση είναι ανακλαστική.
t a ≤ tb ∧ tb ≤ tc → ta ≤ tc
Αυτή η σχέση είναι μεταβατική.
(30) καμία ≤ δεν ≤
Οι τύποι M σχηματίζουν ένα πλέγμα πάνω από αυτή τη σχέση. Κανένα δεν είναι το κάτω μέρος και το οποιοδήποτε είναι το επάνω μέρος.
(31) ta, tb ∈ TN ∧ t≤ t→NonNullable(ta) ≤ NonNullable(tb)
Εάν δύο τύποι είναι συμβατοί, τότε οι ισοδύναμες χωρίς δυνατότητα null είναι επίσης συμβατές.
(32) ≤ null t ∈ TN
Ο στοιχειώδης τύπος null είναι συμβατός με όλους τους τύπους που επιδέχεται τιμές null.
(33) t ∉ TN ≤ anynonnull
Όλοι οι τύποι που δεν επιδέχεται τιμές null είναι συμβατοί με anynonnull.
(34) Χωρίς δυνατότητα έλξης(t) ≤ t
Ένας τύπος που δεν είναι ακέραιος είναι συμβατός με το ισοδύναμο που επιδέχεται τιμές null.
(35) t ∈ συνάρτηση TF → t ≤
Όλοι οι τύποι συναρτήσεων είναι συμβατοί με τη συνάρτηση.
(36) t ∈ TL → t ≤ λίστα
Όλοι οι τύποι λίστας είναι συμβατοί με τη λίστα.
(37) t ∈ TR → t ≤ εγγραφή
Όλοι οι τύποι εγγραφών είναι συμβατοί με την εγγραφή.
(38) t ∈ T → t ≤ πίνακα
Όλοι οι τύποι πινάκων είναι συμβατοί με τον πίνακα.
(39) ta ≤ tb ↔ 〖ta〗≤〖tb〗
Ένας τύπος λίστας είναι σύνθετος με άλλον τύπο λίστας εάν οι τύποι στοιχείων είναι συμβατοί και το αντίστροφο.
(40) ta ∈ TF = ⟨ pa, * ⟩, tb ∈ TF = ⟨ pb, * ⟩ ∧ pa ≤ pb → ta ≤ t b
Ένας τύπος συνάρτησης είναι συμβατός με άλλον τύπο συνάρτησης εάν οι τύποι επιστροφής είναι συμβατοί και οι λίστες παραμέτρων είναι πανομοιότυπες.
(41) ta ∈ TRo, tb ∈ TR• → ta ≰ t b
Ένας ανοιχτός τύπος εγγραφής δεν είναι ποτέ συμβατός με έναν τύπο κλειστής εγγραφής.
(42) ta ∈ TR• = ⟨false, Φ⟩, tb ∈ TRo = ⟨true, Φ⟩ → ta ≤ t b
Ένας τύπος κλειστής εγγραφής είναι συμβατός με έναν κατά τα άλλα πανομοιότυπο τύπο ανοικτής εγγραφής.
(43) ta ∈ TRo = ⟨true, (Φ, ⟨true, n, any⟩)⟩, tb ∈ TRo = ⟨true, Φ⟩ → ta ≤ tb ∧ tb ≤ t a
Ένα προαιρετικό πεδίο με τον τύπο any μπορεί να αγνοηθεί κατά τη σύγκριση δύο ανοικτών τύπων εγγραφών.
(44) ta ∈ TR = ⟨b, (Φ, ⟨β, n, u⟩)⟩, tb ∈ TR = ⟨b, (Φ, ⟨β, n, ub⟩)⟩ ∧ ua ≤ ub → ta ≤ t b
Δύο τύποι εγγραφών που διαφέρουν μόνο κατά ένα πεδίο είναι συμβατοί εάν το όνομα και η προαιρετικότητα του πεδίου είναι πανομοιότυπα και οι τύποι του εν λόγω πεδίου είναι συμβατοί.
(45) ta ∈ TR = ⟨b, (Φ, ⟨φάλση, n, u⟩)⟩, tb ∈ TR = ⟨b, (Φ, ⟨true, n, u⟩)⟩ → ta ≤ t b
Ένας τύπος εγγραφής με ένα μη προαιρετικό πεδίο είναι συμβατός με έναν πανομοιότυπο τύπο εγγραφής, αλλά για αυτό το πεδίο είναι προαιρετικό.
(46) ta ∈ TRo = ⟨true, (Φ, ⟨b, n, u⟩)⟩, tb ∈ TRo = ⟨true, Φ⟩ → ta ≤ t b
Ένας ανοιχτός τύπος εγγραφής είναι συμβατός με έναν άλλο ανοιχτό τύπο εγγραφής με ένα λιγότερο πεδίο.
(47) ta ∈ T = (Φ, ⟨i, ⟨n, u⟩⟩), tb ∈ T = (Φ, ⟨i, ⟨n, ub⟩⟩) ∧ u≤ ub → ta ≤ t b
Ένας τύπος πίνακα είναι συμβατός με έναν δεύτερο τύπο πίνακα, ο οποίος είναι πανομοιότυπος αλλά για μία στήλη που έχει διαφορετικό τύπο, όταν οι τύποι για αυτήν τη στήλη είναι συμβατοί.
Σχετικό περιεχόμενο
- προδιαγραφών γλώσσας Power Query M
- αναφοράς συνάρτησης Power Query M
- τύποι και μετατροπής τύπου
- τύπων