Κοινή χρήση μέσω


Συμπεριφορά τελεστών

Αυτή η ενότητα καθορίζει τη συμπεριφορά των διαφόρων τελεστών M.

Προτεραιότητα τελεστών

Όταν μια παράσταση περιέχει πολλούς τελεστές, η προτεραιότητα των τελεστών ελέγχει τη σειρά με την οποία αξιολογούνται οι μεμονωμένοι τελεστές. Για παράδειγμα, η παράσταση x + y * z αξιολογείται ως επειδή x + (y * z) ο * τελεστής έχει υψηλότερη προτεραιότητα από τον δυαδικό + τελεστή. Η προτεραιότητα ενός τελεστή καθορίζεται από τον ορισμό της σχετικής παραγωγής γραμματικής του. Για παράδειγμα, μια προσθετική-παράσταση αποτελείται από μια ακολουθία πολλαπλασιαστικής-παράστασης που διαχωρίζεται από τους τελεστές ή+, παρέχοντας - έτσι στους τελεστές και + χαμηλότερη προτεραιότητα από - τους τελεστές και*./

Η παραγωγή παράστασης-σε παρένθεση μπορεί να χρησιμοποιηθεί για την αλλαγή της προεπιλεγμένης σειράς προτεραιότητας.

παράσταση-σε παρένθεση:
       ( έκφραση)

Για παράδειγμα:

1 + 2 * 3       // 7 
(1 + 2) * 3     // 9

Ο παρακάτω πίνακας συνοψίζει τους τελεστές M, παραθέτει τις κατηγορίες τελεστών με σειρά προτεραιότητας από τον υψηλότερο προς τον χαμηλότερο. Οι τελεστές στην ίδια κατηγορία έχουν ίση προτεραιότητα.

Category Expression Περιγραφή
Βασική εγώ
@ εγώ
Παράσταση αναγνωριστικού
(x) Παράσταση σε παρένθεση
x[i] Αναζήτηση
x{y} Πρόσβαση στοιχείου
x(...) Κλήση συνάρτησης
{x, y, ...} Προετοιμασία λίστας
[ i = x, ... ] Προετοιμασία εγγραφής
... Δεν έχει υλοποιηθεί
Μοναδιαίοι + x Ταυτότητα
- x Άρνηση
not x Λογική άρνηση
Μετα-δεδομένα xmetay Συσχέτιση μετα-δεδομένων
Πολλαπλασιαστική x * y Πολλαπλασιασμός
x / y Διεύθυνση
Πρόσθετο x + y Πρόσθεση
x - y Αφαίρεση
Σχεσιακός x< y Μικρότερο από
x > y Μεγαλύτερο από
x<= y Μικρότερο από ή ίσο με
x >= y Μεγαλύτερο από ή ίσο με
Ισότητα x = y Ίσο
x<> y Δεν ισούται με
Δήλωση τύπου xasy Είναι συμβατό με στοιχειώδη τύπο που επιδέχεται τιμές null ή σφάλμα
Συμμόρφωση τύπου xisy Δοκιμή εάν είναι συμβατό με στοιχειώδη τύπο που επιδέχεται τιμή null
Λογικό AND xandy Σύνδεση βραχυκυκλώματος
Λογικό OR xory Αποσύνδεση βραχυκυκλώματος
Coalesce x??y Τελεστής συνένωσης Null

Τελεστές και μετα-δεδομένα

Κάθε τιμή έχει μια συσχετισμένη τιμή εγγραφής που μπορεί να μεταφέρει πρόσθετες πληροφορίες σχετικά με την τιμή. Αυτή η εγγραφή αναφέρεται ως εγγραφή μετα-δεδομένων για μια τιμή. Μια εγγραφή μετα-δεδομένων μπορεί να συσχετιστεί με οποιοδήποτε είδος τιμής, ακόμα και null. Το αποτέλεσμα μιας τέτοιας συσχέτισης είναι μια νέα τιμή με τα δεδομένα που έχουν καταχωριστεί.

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

Κάθε τιμή έχει μια προεπιλεγμένη εγγραφή μετα-δεδομένων, ακόμα και αν δεν έχει καθοριστεί κάποια. Η προεπιλεγμένη εγγραφή μετα-δεδομένων είναι κενή. Τα παρακάτω παραδείγματα δείχνουν την πρόσβαση στην εγγραφή μετα-δεδομένων μιας τιμής κειμένου χρησιμοποιώντας την Value.Metadata τυπική συνάρτηση βιβλιοθήκης:

Value.Metadata( "Mozart" )   // []

Οι εγγραφές μετα-δεδομένων συνήθως δεν διατηρούνται όταν μια τιμή χρησιμοποιείται με έναν τελεστή ή μια συνάρτηση που κατασκευάζει μια νέα τιμή. Για παράδειγμα, εάν δύο τιμές κειμένου συνενώνονται με τον & τελεστή , τα μετα-δεδομένα της τιμής κειμένου που προκύπτει είναι η κενή εγγραφή []. Οι παρακάτω παραστάσεις είναι ισοδύναμες:

"Amadeus " & ("Mozart" meta [ Rating = 5 ])  
"Amadeus " & "Mozart"

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

Ο μόνος τελεστής που επιστρέφει αποτελέσματα που μεταφέρουν μετα-δεδομένα είναι ο μετα-τελεστής.

Δομικά επαναλαμβανόμενοι τελεστές

Οι τιμές μπορεί να είναι κυκλικές. Για παράδειγμα:

let l = {0, @l} in l
// {0, {0, {0, ... }}}
[A={B}, B={A}]
// [A = {{ ... }}, B = {{ ... }}]

Η M χειρίζεται τις κυκλικές τιμές διατηρώντας αργή την κατασκευή εγγραφών, λιστών και πινάκων. Μια προσπάθεια κατασκευής μιας κυκλικής τιμής που δεν επωφελείται από τις διακοπτόμενες, αργής δομής τιμές, δημιουργεί σφάλμα:

[A=B, B=A] 
// [A = Error.Record("Expression.Error", 
//         "A cyclic reference was encountered during evaluation"), 
//  B = Error.Record("Expression.Error", 
//         "A cyclic reference was encountered during evaluation"), 
// ]

Ορισμένοι τελεστές στην M ορίζονται με δομική επανάληψη. Για παράδειγμα, η ισότητα εγγραφών και λιστών ορίζεται από την ταυτόχρονη ισότητα των αντίστοιχων πεδίων εγγραφών και λιστών στοιχείων, αντίστοιχα.

Για μη κυκλικές τιμές, η εφαρμογή δομικής επανάληψης αποδίδει πεπερασμένη επέκταση της τιμής: οι κοινόχρηστες ένθετες τιμές θα χρησιμοποιούνται επανειλημμένα, αλλά η διαδικασία επανάληψης πάντα τερματίζεται.

Μια κυκλική τιμή έχει ατέρμονα επέκταση κατά την εφαρμογή δομικής επανάληψης. Η σημασιολογία της M δεν διαθέτει ειδικούς χώρους διαμονής για τέτοιες άπειρες επεκτάσεις - μια προσπάθεια σύγκρισης κυκλικών τιμών για ισότητα, για παράδειγμα, συνήθως θα εξαντληθεί από πόρους και θα τερματιστεί κατ' εξαίρεση.

Τελεστές επιλογής και προβολής

Οι τελεστές επιλογής και προβολής επιτρέπουν την εξαγωγή δεδομένων από τιμές λίστας και εγγραφής.

Πρόσβαση στοιχείου

Μια τιμή μπορεί να επιλεγεί από μια λίστα ή έναν πίνακα με βάση τη θέση του με βάση το μηδέν εντός αυτής της λίστας ή του πίνακα, χρησιμοποιώντας μια παράσταση-πρόσβασης-στοιχείου.

παράσταση-πρόσβασης-στοιχείου:
      επιλογή στοιχείου
      προαιρετική-επιλογή-στοιχείου
επιλογή-στοιχείου:
      κύρια-παράσταση
{επιλογέας-στοιχείου}
προαιρετική-επιλογή-στοιχείου:
      κύρια-παράσταση
{επιλογέας-στοιχείου} ?
επιλογέας-στοιχείου:
      έκφραση

Η παράσταση-πρόσβασης-στοιχείουx{y} επιστρέφει:

  • Για μια λίστα x και έναν αριθμό y, το στοιχείο της λίστας x στη θέση y. Το πρώτο στοιχείο μιας λίστας θεωρείται ότι έχει έναν τακτικό δείκτη μηδέν. Εάν η ζητούμενη θέση δεν υπάρχει στη λίστα, προκαλείται σφάλμα.

  • Για έναν πίνακα x και έναν αριθμό y, τη γραμμή του πίνακα x στη θέση y. Η πρώτη γραμμή ενός πίνακα θεωρείται ότι έχει τακτικό δείκτη μηδέν. Εάν η ζητούμενη θέση δεν υπάρχει στον πίνακα, προκαλείται σφάλμα.

  • Για έναν πίνακα x και μια εγγραφή y, τη γραμμή του πίνακα x που συμφωνεί με τις τιμές πεδίου της εγγραφής y για πεδία με ονόματα πεδίων που συμφωνούν με τα αντίστοιχα ονόματα στήλης-πίνακα. Εάν δεν υπάρχει μοναδική αντίστοιχη γραμμή στον πίνακα, προκαλείται σφάλμα.

Για παράδειγμα:

{"a","b","c"}{0}                        // "a" 
{1, [A=2], 3}{1}                        // [A=2] 
{true, false}{2}                        // error 
#table({"A","B"},{{0,1},{2,1}}){0}      // [A=0,B=1] 
#table({"A","B"},{{0,1},{2,1}}){[A=2]}  // [A=2,B=1]  
#table({"A","B"},{{0,1},{2,1}}){[B=3]}  // error 
#table({"A","B"},{{0,1},{2,1}}){[B=1]}  // error

Η παράσταση-πρόσβασης-στοιχείου υποστηρίζει επίσης τη φόρμα x{y}?, η οποία επιστρέφει null όταν η θέση (ή η αντιστοιχία) y δεν υπάρχει στη λίστα ή τον πίνακα x. Εάν υπάρχουν πολλές αντιστοιχίες για yτο , εξακολουθεί να προκαλείται σφάλμα.

Για παράδειγμα:

{"a","b","c"}{0}?                       // "a" 
{1, [A=2], 3}{1}?                       // [A=2] 
{true, false}{2}?                       // null 
#table({"A","B"},{{0,1},{2,1}}){0}?     // [A=0,B=1] 
#table({"A","B"},{{0,1},{2,1}}){[A=2]}? // [A=2,B=1]  
#table({"A","B"},{{0,1},{2,1}}){[B=3]}? // null 
#table({"A","B"},{{0,1},{2,1}}){[B=1]}? // error

Η πρόσβαση στο στοιχείο δεν επιβάλλει την αξιολόγηση των στοιχείων λίστας ή πίνακα εκτός από αυτό που αποκτάται πρόσβαση. Για παράδειγμα:

{ error "a", 1, error "c"}{1}  // 1 
{ error "a", error "b"}{1}     // error "b"

Τα παρακάτω ισχύουν κατά την αξιολόγηση του τελεστή x{y} πρόσβασης στοιχείου:

  • Τα σφάλματα που προέκυψαν κατά την αξιολόγηση των παραστάσεων x ή y μεταδίδονται.

  • Η παράσταση x παράγει μια λίστα ή μια τιμή πίνακα.

  • Η παράσταση y παράγει μια αριθμητική τιμή ή, εάν x το παράγει μια τιμή πίνακα, μια τιμή εγγραφής.

  • Εάν y το παράγει μια αριθμητική τιμή και η τιμή του y είναι αρνητική, προκαλείται σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας .

  • Εάν y το παράγει μια αριθμητική τιμή και η τιμή του y είναι μεγαλύτερη από ή ίση με το πλήθος των x, ενεργοποιείται ένα σφάλμα με κωδικό "Expression.Error" αιτιολογίας , εκτός εάν χρησιμοποιείται η προαιρετική φόρμα x{y}? τελεστή , όπου στην περίπτωση αυτή επιστρέφεται η τιμή null .

  • Εάν x το παράγει μια τιμή πίνακα και y το παράγει μια τιμή εγγραφής και δεν υπάρχουν αντιστοιχίες για y το στο x, ενεργοποιείται ένα σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας , εκτός εάν χρησιμοποιείται η προαιρετική φόρμα x{y}? τελεστή , όπου στην περίπτωση αυτή επιστρέφεται η τιμή null .

  • Εάν x το παράγει μια τιμή πίνακα και y το παράγει μια τιμή εγγραφής και υπάρχουν πολλές αντιστοιχίες για y το στο x, ενεργοποιείται ένα σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας .

Κατά τη διάρκεια της διαδικασίας επιλογής στοιχείου, δεν αξιολογείται κανένα άλλο στοιχείο εκτός x από εκείνο στη θέση y . (Για λίστες ή πίνακες ροής, τα στοιχεία ή οι γραμμές που προηγούνται αυτού στη θέση y παραλείπονται, το οποίο μπορεί να προκαλέσει την αξιολόγησή τους, ανάλογα με την προέλευση της λίστας ή του πίνακα.)

Πρόσβαση πεδίου

Η παράσταση-πρόσβασης-πεδίου χρησιμοποιείται για την επιλογή μιας τιμής από μια εγγραφή ή για την προβολή μιας εγγραφής ή ενός πίνακα σε ένα με λιγότερα πεδία ή στήλες, αντίστοιχα.

παράσταση-πρόσβασης-πεδίου:
      επιλογή πεδίου
      σιωπηρή-επιλογή-πεδίου-προορισμού
      προβολή
      έμμεση-προβολή-προορισμού
επιλογή πεδίου:
      κύρια-παράσταση επιλογέας-πεδίου
επιλογέας-πεδίου:
      επιλογέας-απαιτούμενου-πεδίου
      επιλογέας-προαιρετικού-πεδίου
επιλογέας-απαιτούμενου-πεδίου:

       [ όνομα-πεδίου]
επιλογέας-προαιρετικού-πεδίου:
       [ όνομα-πεδίου] ?
όνομα-πεδίου:
      γενικευμένο αναγνωριστικό
      αναγνωριστικό-σε εισαγωγικά
έμμεση-επιλογή-πεδίου-προορισμού:
      επιλογέας-πεδίου
προβολή:
      κύρια-παράσταση απαιτούμενη-προβολή
      κύρια-παράσταση προαιρετική-προβολή
απαιτούμενη-προβολή:

       [ επιλογέας-απαιτούμενης-λίστας]
προαιρετική-προβολή:
       [ επιλογέας-απαιτούμενης-λίστας] ?
επιλογέας-απαιτούμενης-λίστας:
      επιλογέας-απαιτούμενου-πεδίου
      επιλογέας-απαιτούμενης-λίστας
,επιλογέας-απαιτούμενου-πεδίου
έμμεση-προβολή-προορισμού:
      απαιτούμενη-προβολή
      προαιρετική-προβολή

Η απλούστερη μορφή πρόσβασης στο πεδίο είναι η επιλογή απαιτούμενου πεδίου. Χρησιμοποιεί τον τελεστή x[y] για την αναζήτηση ενός πεδίου σε μια εγγραφή κατά όνομα πεδίου. Εάν το πεδίο y δεν υπάρχει στο x, προκαλείται σφάλμα. Η φόρμα x[y]? χρησιμοποιείται για την εκτέλεση προαιρετικής επιλογής πεδίου και επιστρέφει null εάν το πεδίο που ζητήθηκε δεν υπάρχει στην εγγραφή.

Για παράδειγμα:

[A=1,B=2][B]       // 2 
[A=1,B=2][C]       // error 
[A=1,B=2][C]?      // null

Η συλλογική πρόσβαση σε πολλαπλά πεδία υποστηρίζεται από τους τελεστές για την απαιτούμενη προβολή εγγραφής και προαιρετική προβολή εγγραφής. Ο τελεστής x[[y1],[y2],...] προβάλει την εγγραφή σε μια νέα εγγραφή με λιγότερα πεδία (επιλεγμένα κατά y1, y2, ...). Εάν δεν υπάρχει επιλεγμένο πεδίο, προκαλείται σφάλμα. Ο τελεστής x[[y1],[y2],...]? προβάλει την εγγραφή σε μια νέα εγγραφή με τα πεδία που έχουν επιλεγεί κατά y1, y2, .... Εάν λείπει ένα πεδίο, null χρησιμοποιείται η τιμή αντί για αυτό. Για παράδειγμα:

[A=1,B=2][[B]]           // [B=2] 
[A=1,B=2][[C]]           // error 
[A=1,B=2][[B],[C]]?      // [B=2,C=null]

Οι φόρμες [y] και [y]? υποστηρίζονται ως αναφορά στενογραφίας στο αναγνωριστικό _ (χαρακτήρας υπογράμμισης). Οι παρακάτω δύο παραστάσεις είναι ισοδύναμες:

[A]                 
_[A]

Το παρακάτω παράδειγμα απεικονίζει τη μορφή στενογραφίας της πρόσβασης πεδίου:

let _ = [A=1,B=2] in [A] //1

Η φόρμα [[y1],[y2],...] και [[y1],[y2],...]? υποστηρίζονται επίσης ως στενογραφία και οι παρακάτω δύο παραστάσεις είναι εξίσου ισοδύναμες:

[[A],[B]]                 
_[[A],[B]]

Η φόρμα στενογραφίας είναι ιδιαίτερα χρήσιμη σε συνδυασμό με τη each στενογραφία, ένας τρόπος για να εισαγάγετε μια συνάρτηση μιας μεμονωμένης παραμέτρου με την ονομασία _ (για λεπτομέρειες, ανατρέξτε στις Απλοποιημένες δηλώσεις). Μαζί, οι δύο συντομογραφίες απλοποιούν τις κοινές λειτουργικές παραστάσεις υψηλότερης τάξης:

List.Select( {[a=1, b=1], [a=2, b=4]}, each [a] = [b]) 
// {[a=1, b=1]}

Η παραπάνω παράσταση ισοδυναμεί με την παρακάτω πιο αινιγματική γραφή:

List.Select( {[a=1, b=1], [a=2, b=4]}, (_) => _[a] = _[b]) 
// {[a=1, b=1]}

Η πρόσβαση πεδίου δεν επιβάλλει την αξιολόγηση των πεδίων εκτός από αυτά στα οποία γίνεται πρόσβαση. Για παράδειγμα:

[A=error "a", B=1, C=error "c"][B]  // 1 
[A=error "a", B=error "b"][B]       // error "b"

Τα παρακάτω ισχύουν κατά την αξιολόγηση ενός τελεστή x[y]πρόσβασης πεδίου , x[y]?, x[[y]]ή x[[y]]? :

  • Τα σφάλματα που προέκυψαν κατά την αξιολόγηση της παράστασης x μεταδίδονται.

  • Τα σφάλματα που προέκυψαν κατά την αξιολόγηση του πεδίου y συσχετίζονται μόνιμα με το πεδίο yκαι, στη συνέχεια, μεταδίδονται. Οποιαδήποτε μελλοντική πρόσβαση στο πεδίο y θα προκαλέσει πανομοιότυπο σφάλμα.

  • Η παράσταση x παράγει μια τιμή εγγραφής ή πίνακα ή προκαλείται σφάλμα.

  • Εάν το αναγνωριστικό y ονομάζει ένα πεδίο που δεν υπάρχει στο x, ενεργοποιείται ένα σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας , εκτός εάν χρησιμοποιείται η προαιρετική φόρμα ...? τελεστή , στην οποία περίπτωση επιστρέφεται η τιμή null .

Δεν αξιολογούνται πεδία του εκτός από x αυτό που ονομάζεται από y το κατά τη διαδικασία πρόσβασης στο πεδίο.

Τελεστής μετα-δεδομένων

Η εγγραφή μετα-δεδομένων για μια τιμή τροποποιείται με χρήση του τελεστή μετα-δεδομένων (x meta y).

παράσταση-μετα-δεδομένων:
      μοναδιαία-παράσταση
      μοναδιαία-παράσταση
metaμοναδιαία-παράσταση

Το παρακάτω παράδειγμα κατασκευάζει μια τιμή κειμένου με μια εγγραφή μετα-δεδομένων που χρησιμοποιεί τον meta τελεστή και, στη συνέχεια, αποκτά πρόσβαση στην εγγραφή μετα-δεδομένων της τιμής που προκύπτει χρησιμοποιώντας Value.Metadataτο :

Value.Metadata( "Mozart" meta [ Rating = 5 ] ) 
// [Rating = 5 ]
Value.Metadata( "Mozart" meta [ Rating = 5 ] )[Rating] 
// 5

Τα παρακάτω ισχύουν κατά την εφαρμογή των μετα-δεδομένων που συνδυάζουν τον τελεστή x meta y:

  • Τα σφάλματα που προέκυψαν κατά την αξιολόγηση των x παραστάσεων or y μεταδίδονται.

  • Η y παράσταση πρέπει να είναι εγγραφή, διαφορετικά προκαλείται σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας .

  • Η εγγραφή μετα-δεδομένων που προκύπτει είναι xη εγγραφή μετα-δεδομένων του που συγχωνεύεται με yτο . (Για τη σημασιολογία της συγχώνευσης εγγραφών, ανατρέξτε στο θέμα Συγχώνευση εγγραφών.)

  • Η τιμή που προκύπτει είναι η τιμή από την x παράσταση, χωρίς τα μετα-δεδομένα της, με συνημμένη την εγγραφή μετα-δεδομένων που υπολογίστηκε πρόσφατα.

Οι τυπικές συναρτήσεις Value.RemoveMetadata βιβλιοθήκης και Value.ReplaceMetadata μπορούν να χρησιμοποιηθούν για την κατάργηση όλων των μετα-δεδομένων από μια τιμή και για την αντικατάσταση των μετα-δεδομένων μιας τιμής (αντί για τη συγχώνευση μετα-δεδομένων σε πιθανά υπάρχοντα μετα-δεδομένα). Οι παρακάτω παραστάσεις είναι ισοδύναμες:

x meta y  
Value.ReplaceMetadata(x, Value.Metadata(x) & y) 
Value.RemoveMetadata(x) meta (Value.Metadata(x) & y)

Τελεστές ισότητας

Ο τελεστής ισότητας= χρησιμοποιείται για να προσδιοριστεί εάν δύο τιμές είναι ίσες. Ο τελεστής ανισότητας<> χρησιμοποιείται για να προσδιοριστεί αν δύο τιμές δεν είναι ίσες.

παράσταση-ισότητας:
      σχεσιακή-παράσταση
      σχεσιακή-παράσταση
=παράσταση-ισότητας
      σχεσιακή-παράσταση
<>παράσταση-ισότητας

Για παράδειγμα:

1 = 1            // true 
1 = 2            // false 
1 <> 1           // false 
1 <> 2           // true 
null = true      // false 
null = null      // true

Τα μετα-δεδομένα δεν αποτελούν μέρος της σύγκρισης ισότητας ή ανισότητας. Για παράδειγμα:

(1 meta [ a = 1 ]) = (1 meta [ a = 2 ]) // true 
(1 meta [ a = 1 ]) = 1                  // true

Τα παρακάτω ισχύουν κατά την εφαρμογή των τελεστών x = y ισότητας και x <> y:

  • Τα σφάλματα που προέκυψαν κατά την αξιολόγηση των x παραστάσεων or y μεταδίδονται.

  • Ο = τελεστής έχει ως αποτέλεσμα true εάν οι τιμές είναι ίσες και false σε κάθε άλλη περίπτωση.

  • Ο <> τελεστής έχει ως αποτέλεσμα false εάν οι τιμές είναι ίσες και true σε κάθε άλλη περίπτωση.

  • Οι εγγραφές μετα-δεδομένων δεν περιλαμβάνονται στη σύγκριση.

  • Εάν οι τιμές που παράγονται από την αξιολόγηση των x παραστάσεων και y δεν είναι το ίδιο είδος τιμής, τότε οι τιμές δεν είναι ίσες.

  • Εάν οι τιμές που παράγονται από την αξιολόγηση της x παράστασης και y είναι του ίδιου είδους τιμής, τότε υπάρχουν συγκεκριμένοι κανόνες για τον προσδιορισμό του αν είναι ίσες, όπως ορίζεται παρακάτω.

  • Τα παρακάτω είναι πάντα true:

    (x = y) = not (x <> y)

Οι τελεστές ισότητας ορίζονται για τους ακόλουθους τύπους:

  • Η null τιμή ισούται μόνο με τον εαυτό της.
    null = null    // true 
    null = true    // false 
    null = false   // false
  • Οι λογικές τιμές και true είναι ίσες false μόνο με τον εαυτό τους. Για παράδειγμα:
    true = true      // true 
    false = false    // true 
    true = false     // false 
    true = 1         // false
  • Οι αριθμοί συγκρίνονται με χρήση της καθορισμένης ακρίβειας:

    • Εάν κάποιος από τους αριθμούς είναι #nan, τότε οι αριθμοί δεν είναι ίδιοι.

    • Όταν κανένας αριθμός δεν είναι #nan, οι αριθμοί συγκρίνονται χρησιμοποιώντας μια σύγκριση bit-wise της αριθμητικής τιμής.

    • #nan Το είναι η μόνη τιμή που δεν ισούται με τον εαυτό της.

      Για παράδειγμα:

        1 = 1,              // true 
        1.0 = 1             // true 
        2 = 1               // false 
        #nan = #nan         // false 
        #nan <> #nan        // true
  • Δύο διάρκειες είναι ίσες εάν αντιπροσωπεύουν τον ίδιο αριθμό σημάτων ρολογιού 100νανοδευτεροσφάλειας.

  • Δύο φορές είναι ίσες εάν τα μεγέθη τους (ώρα, λεπτό, δευτερόλεπτο) είναι ίσα.

  • Δύο ημερομηνίες είναι ίσες εάν τα μεγέθη των τμημάτων τους (έτος, μήνας, ημέρα) είναι ίσα.

  • Δύο ημερομηνίες/ώρες είναι ίσες εάν τα μεγέθη τους (έτος, μήνας, ημέρα, ώρα, λεπτό, δευτερόλεπτο) είναι ίσα.

  • Δύο ζώνες ημερομηνίας/ώρας είναι ίσες εάν οι αντίστοιχες ημερομηνίες/ώρες UTC είναι ίσες. Για να φτάσετε στην αντίστοιχη ημερομηνία/ώρα UTC, η μετατόπιση ωρών/λεπτών αφαιρείται από το στοιχείο ημερομηνίας/ώρας της ζώνης ημερομηνίας/ώρας.

  • Δύο τιμές κειμένου είναι ίσες εάν χρησιμοποιώντας μια τακτική σύγκριση, με διάκριση πεζών-κεφαλαίων, χωρίς διάκριση κουλτούρας, έχουν το ίδιο μήκος και ίσους χαρακτήρες στις αντίστοιχες θέσεις.

  • Δύο τιμές λίστας είναι ίσες εάν ισχύουν όλα τα παρακάτω:

    • Και οι δύο λίστες περιέχουν τον ίδιο αριθμό στοιχείων.

    • Οι τιμές κάθε στοιχείου που αντιστοιχεί θέσεων στις λίστες είναι ίσες. Αυτό σημαίνει ότι όχι μόνο οι λίστες πρέπει να περιέχουν ίσα στοιχεία, αλλά τα στοιχεία πρέπει να είναι και στην ίδια σειρά.

      Για παράδειγμα:

        {1, 2} = {1, 2}     // true 
        {2, 1} = {1, 2}     // false 
        {1, 2, 3} = {1, 2}  // false
      
  • Δύο εγγραφές είναι ίσες εάν ισχύουν όλα τα παρακάτω:

    • Ο αριθμός των πεδίων είναι ο ίδιος.

    • Κάθε όνομα πεδίου μιας εγγραφής υπάρχει επίσης στην άλλη εγγραφή.

    • Η τιμή κάθε πεδίου μιας εγγραφής ισούται με το πεδίο με το ίδιο όνομα στην άλλη εγγραφή.

      Για παράδειγμα:

        [ A = 1, B = 2 ] = [ A = 1, B = 2 ]        // true 
        [ B = 2, A = 1 ] = [ A = 1, B = 2 ]        // true 
        [ A = 1, B = 2, C = 3 ] = [ A = 1, B = 2 ] // false 
        [ A = 1 ] = [ A = 1, B = 2 ]               // false
      
  • Δύο πίνακες είναι ίσοι εάν ισχύουν όλα τα παρακάτω:

    • Ο αριθμός των στηλών είναι ο ίδιος.

    • Κάθε όνομα στήλης σε έναν πίνακα υπάρχει επίσης στον άλλο πίνακα.

    • Ο αριθμός των γραμμών είναι ο ίδιος.

    • Κάθε γραμμή έχει ίσες τιμές στα αντίστοιχα κελιά.

      Για παράδειγμα:

        #table({"A","B"},{{1,2}}) = #table({"A","B"},{{1,2}}) // true 
        #table({"A","B"},{{1,2}}) = #table({"X","Y"},{{1,2}}) // false 
        #table({"A","B"},{{1,2}}) = #table({"B","A"},{{2,1}}) // true
      
  • Μια τιμή συνάρτησης είναι ίση με τον εαυτό της, αλλά μπορεί να είναι ή όχι ίση με μια άλλη τιμή συνάρτησης. Εάν δύο τιμές συναρτήσεων θεωρούνται ίσες, τότε θα συμπεριφέρονται με τον ίδιο τρόπο όταν καλούνται.

    Δύο δεδομένες τιμές συναρτήσεων θα έχουν πάντα την ίδια σχέση ισότητας.

  • Μια τιμή τύπου είναι ίση με τον εαυτό της, αλλά μπορεί να είναι ή όχι ίση με μια άλλη τιμή τύπου. Εάν δύο τιμές τύπου θεωρούνται ίσες, τότε θα συμπεριφέρονται πανομοιότυπα όταν ερωτώνται για συμμόρφωση.

    Δύο δεδομένες τιμές τύπου θα έχουν πάντα την ίδια σχέση ισότητας.

Σχεσιακοί τελεστές

Οι <τελεστές , >, <=και >= ονομάζονται σχεσιακόι τελεστές.

σχεσιακή-παράσταση:
      προσθετική-παράσταση
      προσθετική-παράσταση
<σχεσιακή-παράσταση
      προσθετική-παράσταση
>σχεσιακή-παράσταση
      προσθετική-παράσταση
<=σχεσιακή-παράσταση
      προσθετική-παράσταση
>=σχεσιακή-παράσταση

Αυτοί οι τελεστές χρησιμοποιούνται για τον προσδιορισμό της σχετικής σχέσης ταξινόμησης μεταξύ δύο τιμών, όπως φαίνεται στον παρακάτω πίνακα:

Λειτουργία Αποτέλεσμα
x < y true εάν x το είναι μικρότερο από yτο , false διαφορετικά είναι
x > y true εάν x το είναι μεγαλύτερο από yτο , false διαφορετικά είναι
x <= y true εάν x το είναι μικρότερο από ή ίσο με το y, false διαφορετικά είναι
x >= y true εάν x το είναι μεγαλύτερο ή ίσο με το y, false διαφορετικά είναι

Για παράδειγμα:

0 <= 1            // true 
null < 1          // null 
null <= null      // null 
"ab" < "abc"      // true 
#nan >= #nan      // false  
#nan <= #nan      // false

Τα παρακάτω ισχύουν κατά την αξιολόγηση μιας παράστασης που περιέχει τους σχεσιακόυς τελεστές:

  • Τα σφάλματα που προέκυψαν κατά την αξιολόγηση των x παραστάσεων τελεστέου ή y μεταδίδονται.

  • Οι τιμές που παράγονται από την x αξιολόγηση των παραστάσεων και y πρέπει να είναι δυαδικές, ημερομηνίας, ημερομηνίας/ώρας, ζώνης ημερομηνίας/ώρας, διάρκειας, λογικής, αριθμού, null, κειμένου ή ώρας. Διαφορετικά, προκαλείται σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας .

  • Και οι δύο τελεστέοι πρέπει να είναι το ίδιο είδος τιμής ή null. Διαφορετικά, προκαλείται σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας .

  • Εάν ένας ή και οι δύο τελεστέοι είναι null, το αποτέλεσμα είναι η null τιμή.

  • Δύο δυαδικά δεδομένα συγκρίνονται με byte κατά byte.

  • Δύο ημερομηνίες συγκρίνονται με τη σύγκριση των τμημάτων του έτους και, εάν είναι ίσα, των τμημάτων μήνα και, εάν είναι ίσα, των τμημάτων ημέρας.

  • Δύο ημερομηνίες/ώρες συγκρίνονται με τη σύγκριση των τμημάτων του έτους τους και, εάν είναι ίσα, των τμημάτων μήνα και, εάν είναι ίσα, των τμημάτων ημέρας και, εάν είναι ίσα, των τμημάτων ώρας τους και, εάν είναι ίσα, των τμημάτων λεπτού τους και, εάν είναι ίσα, των τμημάτων δευτερολέπτων τους.

  • Δύο ζώνες ημερομηνίας/ώρας συγκρίνονται με την κανονικοποίησή τους με την UTC, αφαιρώντας την απόκλιση ώρας/λεπτού και, στη συνέχεια, συγκρίνοντας τα στοιχεία ημερομηνίας/ώρας.

  • Δύο διάρκειες συγκρίνονται σύμφωνα με τον συνολικό αριθμό των σημάτων ρολογιού 100νανοδευτεροσφάλεια που αντιπροσωπεύουν.

  • Συγκρίνονται δύο λογικές μέθοδοι που true θεωρούνται μεγαλύτερες από false.

  • Δύο αριθμοί x και y συγκρίνονται σύμφωνα με τους κανόνες του προτύπου IEEE 754:

    • Εάν κάποιος τελεστέος είναι #nan, το αποτέλεσμα είναι false για όλους τους σχεσιακόυς τελεστές.

    • Όταν κανένας τελεστέος δεν είναι #nan, οι τελεστές συγκρίνουν τις τιμές των δύο τελεστέων κινητής υποδιαστολής σε σχέση με την διάταξη -∞ < -max < ... < -min < -0.0 = +0.0 < +min < ... < +max < +∞ όπου το ελάχιστο και το μέγιστο είναι οι μικρότερες και μεγαλύτερες θετικές πεπερασμένες τιμές που μπορούν να αναπαριστούν. Τα ονόματα M για τα -∞ και +∞ είναι -#infinity και #infinity.

      Τα αξιοσημείωτα αποτελέσματα αυτής της διάταξης είναι τα εξής:

      • Τα αρνητικά και τα θετικά μηδενικά θεωρούνται ίσα.

      • Μια -#infinity τιμή θεωρείται μικρότερη από όλες τις άλλες αριθμητικές τιμές, αλλά ισούται με μια άλλη -#infinity.

      • Μια #infinity τιμή θεωρείται μεγαλύτερη από όλες τις άλλες αριθμητικές τιμές, αλλά ισούται με μια άλλη #infinity.

  • Δύο κείμενα συγκρίνονται με τη χρήση μιας σύγκρισης χαρακτήρα-κατά-χαρακτήρα, με διάκριση πεζών-κεφαλαίων, χωρίς διάκριση κουλτούρας.

  • Δύο φορές συγκρίνονται με τη σύγκριση των τμημάτων της ώρας και, αν είναι ίσα, των τμημάτων λεπτού τους και, εάν είναι ίσα, των δευτερολέπτων μερών τους.

Λογικοί τελεστές υπό όρους

Οι and τελεστές και or ονομάζονται λογικοί τελεστές υπό όρους.

λογική-παράσταση-ή:
      παράσταση-λογικού-και
παράσταση-λογικού-καιorπαράσταση-λογικού-ή
λογική-παράσταση-και:
      παράσταση-is
      παράσταση-is
andπαράσταση-λογικού-και

Ο or τελεστής επιστρέφει true όταν τουλάχιστον ένας από τους τελεστέους του είναι true. Ο δεξιός τελεστέος αξιολογείται εάν και μόνο εάν ο αριστερός τελεστέος δεν trueείναι .

Ο and τελεστής επιστρέφει false όταν τουλάχιστον ένας από τους τελεστέους του είναι false. Ο δεξιός τελεστέος αξιολογείται εάν και μόνο εάν ο αριστερός τελεστέος δεν falseείναι .

Οι πίνακες αληθείας για or τους τελεστές και and εμφανίζονται παρακάτω, με αποτέλεσμα την αξιολόγηση της παράστασης αριστερού τελεστέου στον κατακόρυφο άξονα και το αποτέλεσμα της αξιολόγησης της παράστασης δεξιού τελεστέου στον οριζόντιο άξονα.

and true false null error
true true false null error
false false false false false
null null false null error
error error error error error
or true false null error
or true false null error
true true true true true
false true false null error
null true null null error
error error error error error

Τα παρακάτω ισχύουν κατά την αξιολόγηση μιας παράστασης που περιέχει λογικούς τελεστές υπό όρους:

  • Τα σφάλματα που προέκυψαν κατά την αξιολόγηση των x παραστάσεων or y μεταδίδονται.

  • Οι λογικοί τελεστές υπό όρους ορίζονται πάνω από τους τύπους logical και null. Εάν οι τιμές των τελεστέων δεν είναι αυτών των τύπων, προκαλείται σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας .

  • Το αποτέλεσμα είναι μια λογική τιμή.

  • Στην παράσταση x ή y, η παράσταση y θα αξιολογηθεί εάν και μόνο εάν x το δεν αξιολογείται σε true.

  • Στην παράσταση x και y, η παράσταση y θα αξιολογηθεί εάν και μόνο εάν x το δεν αξιολογείται σε false.

Οι δύο τελευταίες ιδιότητες παρέχουν στους λογικούς τελεστές υπό όρους την ιδιότητα "υπό όρους". ιδιότητες που αναφέρονται επίσης ως "βραχυκύκλωμα". Αυτές οι ιδιότητες είναι χρήσιμες για την εγγραφή μικρών προστατευμένων κατηγορημάτων. Για παράδειγμα, οι παρακάτω παραστάσεις είναι ισοδύναμες:

d <> 0 and n/d > 1 if d <> 0 then n/d > 1 else false

Αριθμητικοί τελεστές

Οι +τελεστές , -*και / είναι οι αριθμητικοί τελεστές.

προσθετική-παράσταση:
      πολλαπλασιαστική-παράσταση
      προσθετική-παράσταση
+πολλαπλασιαστική-παράσταση
      προσθετική-παράσταση
-πολλαπλασιαστική-παράσταση
πολλαπλασιαστική-παράσταση:
      παράσταση μετα-δεδομένων
      πολλαπλασιαστική-παράσταση
*παράσταση-μετα-δεδομένων
      πολλαπλασιαστική-παράσταση
/παράσταση-μετα-δεδομένων

Ακρίβεια

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

Ακρίβεια Σημασιολογία
Precision.Decimal Δεκαδική αναπαράσταση 128 bit με εύρος ±1,0 x 10-28 έως ±7,9 x 1028 και 28-29 σημαντικά ψηφία.
Precision.Double Επιστημονική αναπαράσταση με χρήση μαντίσας και εκθέτη Το συμμορφώνεται με το δυαδικό αριθμητικό πρότυπο διπλής ακρίβειας IEEE 754 64 bit, IEEE 754-2008.

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

Οι ενσωματωμένοι αριθμητικοί τελεστές (+, -, *, /) χρησιμοποιούν Διπλή ακρίβεια. Οι τυπικές συναρτήσεις βιβλιοθήκης (Value.Add, Value.Subtract, Value.Multiply, Value.Divide) μπορούν να χρησιμοποιηθούν για να ζητήσουν αυτές τις λειτουργίες χρησιμοποιώντας ένα συγκεκριμένο μοντέλο ακρίβειας.

  • Δεν είναι δυνατή η αριθμητική υπερχείλιση: #infinity τα ή -#infinity αντιπροσωπεύουν τιμές μεγέθους πολύ μεγάλες για να αναπαρασταθούν.

  • Δεν είναι δυνατή η αριθμητική υποχείλιση: 0 τα και -0 αντιπροσωπεύουν τιμές μεγέθους πολύ μικρές για να απεικνικοποιηθούν.

  • Η ειδική τιμή #nan IEEE 754 (NaN— Not a Number) χρησιμοποιείται για την κάλυψη αριθμητικά άκυρων περιπτώσεων, όπως μια διαίρεση μηδέν με μηδέν.

  • Η μετατροπή από δεκαδική σε διπλή ακρίβεια εκτελείται με στρογγυλοποίηση δεκαδικών αριθμών στην πλησιέστερη ισοδύναμη διπλή τιμή.

  • Η μετατροπή από διπλή σε δεκαδική ακρίβεια εκτελείται με στρογγυλοποίηση διπλών αριθμών στην πλησιέστερη ισοδύναμη δεκαδική τιμή και, εάν είναι απαραίτητο, υπερχείλιση σε #infinity τιμές ή -#infinity .

Τελεστής πρόσθεσης

Η ερμηνεία του τελεστή πρόσθεσης (x + y) εξαρτάται από το είδος της τιμής των παραστάσεων x και y που αξιολογούνται, ως εξής:

x y Αποτέλεσμα Ερμηνεία
type number type number type number Αριθμητικό άθροισμα
type number null null
null type number null
type duration type duration type duration Αριθμητικό άθροισμα μεγεθών
type duration null null
null type duration null
type ημερομηνία/ώρα type duration type ημερομηνία/ώρα Μετατόπιση ημερομηνίας/ώρας κατά διάρκεια
type duration type ημερομηνία/ώρα type ημερομηνία/ώρα
type ημερομηνία/ώρα null null
null type ημερομηνία/ώρα null

Στον πίνακα, typeη ημερομηνία/ώρα αντιπροσωπεύει οποιοδήποτε από τα type dateστοιχεία , type datetime, type datetimezoneή type time. Όταν προσθέτετε μια διάρκεια και μια τιμή κάποιου τύπου ημερομηνίας/ώρας, η τιμή που προκύπτει είναι ίδιου τύπου.

Για άλλους συνδυασμούς τιμών από αυτούς που παρατίθενται στον πίνακα, προκαλείται σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας . Κάθε συνδυασμός καλύπτεται στις παρακάτω ενότητες.

Τα σφάλματα που προέκυψαν κατά την αξιολόγηση ενός από τους δύο τελεστέους μεταδίδονται.

Αριθμητικό άθροισμα

Το άθροισμα δύο αριθμών υπολογίζεται με χρήση του τελεστή πρόσθεσης, παράγοντας έναν αριθμό.

Για παράδειγμα:

1 + 1             // 2 
#nan + #infinity  // #nan

Ο τελεστής πρόσθεσης + σε αριθμούς χρησιμοποιεί Διπλή ακρίβεια. Η τυπική συνάρτηση Value.Add βιβλιοθήκης μπορεί να χρησιμοποιηθεί για τον καθορισμό της Ακρίβειας δεκαδικών. Τα παρακάτω ισχύουν κατά τον υπολογισμό ενός αθροίσματος αριθμών:

  • Το άθροισμα σε διπλή ακρίβεια υπολογίζεται σύμφωνα με τους κανόνες του δυαδικού αριθμητικού 64-bit διπλής ακρίβειας IEEE 754, IEEE 754-2008. Ο παρακάτω πίνακας παραθέτει τα αποτελέσματα όλων των πιθανών συνδυασμών μη μηδενικών πεπερασμένων τιμών, μηδενικών, άπειρων και NaN. Στον πίνακα, x τα και y είναι μη μηδενικές πεπερασμένες τιμές και z το είναι το αποτέλεσμα του x + y. Εάν x τα και y έχουν το ίδιο μέγεθος αλλά αντίθετο πρόσημο, z το είναι θετικό μηδέν. Εάν x + y το είναι πολύ μεγάλο για να αντιπροσωπεύεται στον τύπο προορισμού, z το είναι ένα άπειρο με το ίδιο πρόσημο x + yμε το .

    + y +0 0- +∞ -∞ NaN
    x z x x +∞ -∞ NaN
    +0 y +0 +0 +∞ -∞ NaN
    -0 y +0 0- +∞ -∞ NaN
    +∞ +∞ +∞ +∞ +∞ NaN NaN
    -∞ -∞ -∞ -∞ NaN -∞ NaN
    NaN NaN NaN NaN NaN NaN NaN
  • Το άθροισμα στην Δεκαδική ακρίβεια υπολογίζεται χωρίς απώλεια ακρίβειας. Η κλίμακα του αποτελέσματος είναι η μεγαλύτερη από τις κλίμακες των δύο τελεστέων.

Άθροισμα διαρκειών

Το άθροισμα των δύο διαρκειών είναι η διάρκεια που αντιπροσωπεύει το άθροισμα του αριθμού των σημάτων ρολογιού 100νανοδευτερομηνιών που αντιπροσωπεύονται από τις διάρκειες. Για παράδειγμα:

#duration(2,1,0,15.1) + #duration(0,1,30,45.3) 
// #duration(2, 2, 31, 0.4)

Μετατόπιση ημερομηνίας/ώρας κατά διάρκεια

Μια x και μια διάρκεια y μπορούν να προστεθούν χρησιμοποιώντας x + y το για τον υπολογισμό μιας νέας ημερομηνίας/ώρας της οποίας η απόσταση από x το σε μια γραμμική λωρίδα χρόνου είναι ακριβώς το μέγεθος του y. Εδώ, η ημερομηνία/ώρα αντιπροσωπεύει οποιοδήποτε από Dateτα , DateTime, DateTimeZoneή Time και ένα αποτέλεσμα που δεν είναι null θα είναι του ίδιου τύπου. Η μετατόπιση ημερομηνίας/ώρας κατά διάρκεια μπορεί να υπολογιστεί ως εξής:

  • Εάν έχουν καθοριστεί οι ημέρες της ημερομηνίας/ώρας από τότε που έχει καθοριστεί η τιμή χρονικής σήμανσης, δημιουργήστε μια νέα ημερομηνία/ώρα με τα ακόλουθα στοιχεία πληροφοριών:

    • Υπολογίστε νέες ημέρες μετά από χρονική σήμανση που ισοδυναμεί με διαίρεση του μεγέθους y με τον αριθμό των σημάτων ρολογιού 100νανοδευτεροτόνου σε περίοδο 24 ωρών, περικόπτοντας το δεκαδικό τμήμα του αποτελέσματος και προσθέτοντας αυτή την τιμή στις ημέρες του x μετά από κάθε χρονική σήμανση.

    • Υπολογίστε νέα σήματα ρολογιού από τα μεσάνυχτα που ισοδυναμούν με την προσθήκη του μεγέθους y στα σήματα ρολογιού του x από τα μεσάνυχτα, αρθρωτά ο αριθμός των σημάτων ρολογιού 100 νανοδευτεροτόνων σε περίοδο 24 ωρών. Εάν το x δεν καθορίζει μια τιμή για τα σήματα ρολογιού από τα μεσάνυχτα, λαμβάνεται μια τιμή 0.

    • Αντιγράψτε την τιμή του x για τα λεπτά μετατόπισης από το UTC αμετάβλητη.

  • Εάν δεν έχουν καθοριστεί οι ημέρες της ημερομηνίας/ώρας από τότε που έχει οριστεί η τιμή χρονικής σήμανσης, δημιουργήστε μια νέα ημερομηνία/ώρα με καθορισμένα τα ακόλουθα στοιχεία πληροφοριών:

    • Υπολογίστε νέα σήματα ρολογιού από τα μεσάνυχτα που ισοδυναμούν με την προσθήκη του μεγέθους y στα σήματα ρολογιού του x από τα μεσάνυχτα, αρθρωτά ο αριθμός των σημάτων ρολογιού 100 νανοδευτεροτόνων σε περίοδο 24 ωρών. Εάν το x δεν καθορίζει μια τιμή για τα σήματα ρολογιού από τα μεσάνυχτα, λαμβάνεται μια τιμή 0.

    • Αντιγράψτε τις τιμές του x για τις ημέρες μετά την χρονική σήμανση και την μετατόπιση σε λεπτά από την UTC αμετάβλητη.

Τα παρακάτω παραδείγματα δείχνουν τον υπολογισμό του απόλυτου χρονικού αθροίσματος όταν η ημερομηνία/ώρα καθορίζει τις ημέρες από την χρονική σήμανση:

#date(2010,05,20) + #duration(0,8,0,0) 
    //#datetime( 2010, 5, 20, 8, 0, 0 ) 
    //2010-05-20T08:00:00 
 
#date(2010,01,31) + #duration(30,08,0,0) 
    //#datetime(2010, 3, 2, 8, 0, 0) 
    //2010-03-02T08:00:00 
 
#datetime(2010,05,20,12,00,00,-08) + #duration(0,04,30,00) 
    //#datetime(2010, 5, 20, 16, 30, 0, -8, 0) 
    //2010-05-20T16:30:00-08:00 
 
#datetime(2010,10,10,0,0,0,0) + #duration(1,0,0,0) 
   //#datetime(2010, 10, 11, 0, 0, 0, 0, 0) 
   //2010-10-11T00:00:00+00:00

Το παρακάτω παράδειγμα δείχνει τον υπολογισμό της μετατόπισης ημερομηνίας/ώρας κατά διάρκεια για μια δεδομένη ώρα:

#time(8,0,0) + #duration(30,5,0,0) 
   //#time(13, 0, 0) 
   //13:00:00

Τελεστής αφαίρεσης

Η ερμηνεία του τελεστή αφαίρεσης (x - y) εξαρτάται από το είδος της τιμής των παραστάσεων x και που αξιολογούνται, yως εξής:

x Y Αποτέλεσμα Ερμηνεία
type number type number type number Αριθμητική διαφορά
type number null null
null type number null
type duration type duration type duration Αριθμητική διαφορά μεγεθών
type duration null null
null type duration null
type ημερομηνία/ώρα type ημερομηνία/ώρα type duration Διάρκεια μεταξύ ημερομηνίες/ώρες
type ημερομηνία/ώρα type duration type ημερομηνία/ώρα Μετατόπιση ημερομηνίας/ώρας κατά αρνητική διάρκεια
type ημερομηνία/ώρα null null
null type ημερομηνία/ώρα null

Στον πίνακα, typeη ημερομηνία/ώρα αντιπροσωπεύει οποιοδήποτε από τα type dateστοιχεία , type datetime, type datetimezoneή type time. Κατά την αφαίρεση μιας διάρκειας από μια τιμή κάποιου τύπου ημερομηνίας/ώρας, η τιμή που προκύπτει είναι ίδιου τύπου.

Για άλλους συνδυασμούς τιμών από αυτούς που παρατίθενται στον πίνακα, προκαλείται σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας . Κάθε συνδυασμός καλύπτεται στις παρακάτω ενότητες.

Τα σφάλματα που προέκυψαν κατά την αξιολόγηση ενός από τους δύο τελεστέους μεταδίδονται.

Αριθμητική διαφορά

Η διαφορά μεταξύ δύο αριθμών υπολογίζεται με χρήση του τελεστή αφαίρεσης, παράγοντας έναν αριθμό. Για παράδειγμα:

1 - 1                // 0 
#nan - #infinity     // #nan

Ο τελεστής αφαίρεσης - σε αριθμούς χρησιμοποιεί Διπλή ακρίβεια. Η τυπική συνάρτηση Value.Subtract βιβλιοθήκης μπορεί να χρησιμοποιηθεί για τον καθορισμό της Ακρίβειας δεκαδικών. Τα παρακάτω ισχύουν κατά τον υπολογισμό μιας διαφοράς αριθμών:

  • Η διαφορά σε διπλή ακρίβεια υπολογίζεται σύμφωνα με τους κανόνες του δυαδικού αριθμητικού 64-bit διπλής ακρίβειας IEEE 754, IEEE 754-2008. Ο παρακάτω πίνακας παραθέτει τα αποτελέσματα όλων των πιθανών συνδυασμών μη μηδενικών πεπερασμένων τιμών, μηδενικών, άπειρων και NaN. Στον πίνακα, x τα και y είναι μη μηδενικές πεπερασμένες τιμές και z το είναι το αποτέλεσμα του x - y. Εάν x τα και y είναι ίσα, z το είναι θετικό μηδέν. Εάν x - y το είναι πολύ μεγάλο για να αντιπροσωπεύεται στον τύπο προορισμού, z το είναι ένα άπειρο με το ίδιο πρόσημο x - yμε το .

    - y +0 0- +∞ -∞ NaN
    x z x x -∞ +∞ NaN
    +0 -y +0 +0 -∞ +∞ NaN
    -0 -y 0- +0 -∞ +∞ NaN
    +∞ +∞ +∞ +∞ NaN +∞ NaN
    -∞ -∞ -∞ -∞ -∞ NaN NaN
    NaN NaN NaN NaN NaN NaN NaN
  • Η διαφορά στην Δεκαδική ακρίβεια υπολογίζεται χωρίς απώλεια ακρίβειας. Η κλίμακα του αποτελέσματος είναι η μεγαλύτερη από τις κλίμακες των δύο τελεστέων.

Διαφορά διαρκειών

Η διαφορά των δύο διαρκειών είναι η διάρκεια που αντιπροσωπεύει τη διαφορά μεταξύ του αριθμού των σημάτων ρολογιού 100νανοδευτερολεπτών που αντιπροσωπεύονται από κάθε διάρκεια. Για παράδειγμα:

#duration(1,2,30,0) - #duration(0,0,0,30.45) 
// #duration(1, 2, 29, 29.55)

Μετατόπιση ημερομηνίας/ώρας κατά αρνητική διάρκεια

Μια ημερομηνία/ώραx και μια διάρκεια y μπορούν να αφαιρεθούν χρησιμοποιώντας το x - y για τον υπολογισμό μιας νέας ημερομηνίας/ώρας. Εδώ, η ημερομηνία/ώρα αντιπροσωπεύει οποιοδήποτε από dateτα στοιχεία , datetimedatetimezoneή time. Η ημερομηνία/ώρα που προκύπτει y Η αφαίρεση θετικών διαρκειών αποδίδει αποτελέσματα που είναι προς τα πίσω στο χρόνο σε σχέση με xτο , ενώ η αφαίρεση αρνητικών τιμών αποδίδει αποτελέσματα που είναι προς τα εμπρός στον χρόνο.

#date(2010,05,20) - #duration(00,08,00,00) 
   //#datetime(2010, 5, 19, 16, 0, 0) 
   //2010-05-19T16:00:00 
#date(2010,01,31) - #duration( 30,08,00,00) 
   //#datetime(2009, 12, 31, 16, 0, 0) 
   //2009-12-31T16:00:00

Διάρκεια μεταξύ δύο τιμών ημερομηνίας/ώρας

Δύο ημερομηνίες/ώρεςt και u μπορούν να αφαιρεθούν χρησιμοποιώντας t - u το για τον υπολογισμό της διάρκειας μεταξύ τους. Εδώ, η ημερομηνία/ώρα αντιπροσωπεύει οποιοδήποτε από dateτα στοιχεία , datetimedatetimezoneή time. Η διάρκεια που παράγεται από την αφαίρεση u από t το πρέπει να αποδίδει την τιμή t όταν προστίθεται στο u.

#date(2010,01,31) - #date(2010,01,15) 
// #duration(16,00,00,00) 
// 16.00:00:00 
 
#date(2010,01,15)- #date(2010,01,31) 
// #duration(-16,00,00,00) 
// -16.00:00:00 
 
#datetime(2010,05,20,16,06,00,-08,00) - 
#datetime(2008,12,15,04,19,19,03,00) 
// #duration(521,22,46,41)
// 521.22:46:41

Η αφαίρεση t - u όταν u > t έχει ως αποτέλεσμα αρνητική διάρκεια:

#time(01,30,00) - #time(08,00,00) 
// #duration(0, -6, -30, 0)

Τα παρακάτω ισχύουν κατά την αφαίρεση δύο τιμών ημερομηνίας/ώρας με χρήση t - uτου :

  • u + (t - u) = t

Τελεστής πολλαπλασιασμού

Η ερμηνεία του τελεστή πολλαπλασιασμού (x * y) εξαρτάται από το είδος της τιμής των παραστάσεων x και y που αξιολογούνται, ως εξής:

X Y Αποτέλεσμα Ερμηνεία
type number type number type number Αριθμητικό προϊόν
type number null null
null type number null
type duration type number type duration Πολλαπλάσιο της διάρκειας
type number type duration type duration Πολλαπλάσιο της διάρκειας
type duration null null
null type duration null

Για άλλους συνδυασμούς τιμών από αυτούς που παρατίθενται στον πίνακα, προκαλείται σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας . Κάθε συνδυασμός καλύπτεται στις παρακάτω ενότητες.

Τα σφάλματα που προέκυψαν κατά την αξιολόγηση ενός από τους δύο τελεστέους μεταδίδονται.

Αριθμητικό προϊόν

Το γινόμενο δύο αριθμών υπολογίζεται με χρήση του τελεστή πολλαπλασιασμού, παράγοντας έναν αριθμό. Για παράδειγμα:

2 * 4                // 8 
6 * null             // null 
#nan * #infinity     // #nan

Ο τελεστής * πολλαπλασιασμού σε αριθμούς χρησιμοποιεί Διπλή ακρίβεια. Η τυπική συνάρτηση Value.Multiply βιβλιοθήκης μπορεί να χρησιμοποιηθεί για τον καθορισμό της Ακρίβειας δεκαδικών. Τα παρακάτω ισχύουν κατά τον υπολογισμό ενός προϊόντος αριθμών:

  • Το προϊόν σε διπλή ακρίβεια υπολογίζεται σύμφωνα με τους κανόνες του δυαδικού αριθμητικού 64-bit διπλής ακρίβειας IEEE 754, IEEE 754-2008. Ο παρακάτω πίνακας παραθέτει τα αποτελέσματα όλων των πιθανών συνδυασμών μη μηδενικών πεπερασμένων τιμών, μηδενικών, άπειρων και NaN. Στον πίνακα, x τα και y είναι θετικές πεπερασμένες τιμές. z Το είναι το αποτέλεσμα του x * y. Εάν το αποτέλεσμα είναι πολύ μεγάλο για τον τύπο προορισμού, z το είναι άπειρο. Εάν το αποτέλεσμα είναι πολύ μικρό για τον τύπο προορισμού, z το είναι μηδέν.

    * +y -y +0 0- +∞ -∞ NaN
    +x +z -z +0 0- +∞ -∞ NaN
    -x -z +z 0- +0 -∞ +∞ NaN
    +0 +0 0- +0 0- NaN NaN NaN
    -0 0- +0 0- +0 NaN NaN NaN
    +∞ +∞ -∞ NaN NaN +∞ -∞ NaN
    -∞ -∞ +∞ NaN NaN -∞ +∞ NaN
    NaN NaN NaN NaN NaN NaN NaN NaN
  • Το προϊόν στην Δεκαδική ακρίβεια υπολογίζεται χωρίς απώλεια ακρίβειας. Η κλίμακα του αποτελέσματος είναι η μεγαλύτερη από τις κλίμακες των δύο τελεστέων.

Πολλαπλάσια διαρκειών

Το γινόμενο μιας διάρκειας και ενός αριθμού είναι η διάρκεια που αντιπροσωπεύει τον αριθμό των σημάτων ρολογιού 100νανοδευτερομηνιών που αντιπροσωπεύονται από τον τελεστέο διάρκειας επί τον τελεστέο αριθμού. Για παράδειγμα:

#duration(2,1,0,15.1) * 2 
// #duration(4, 2, 0, 30.2)

Τελεστής διαίρεσης

Η ερμηνεία του τελεστή διαίρεσης (x / y) εξαρτάται από το είδος της τιμής των παραστάσεων x και που αξιολογούνται, yως εξής:

X Y Αποτέλεσμα Ερμηνεία
type number type number type number Αριθμητικό πηλίκο
type number null null
null type number null
type duration type number type duration Κλάσμα της διάρκειας
type duration type duration type number Αριθμητικό πηλίκο διαρκειών
type duration null null
null type duration null

Για άλλους συνδυασμούς τιμών από αυτούς που παρατίθενται στον πίνακα, προκαλείται σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας . Κάθε συνδυασμός καλύπτεται στις παρακάτω ενότητες.

Τα σφάλματα που προέκυψαν κατά την αξιολόγηση ενός από τους δύο τελεστέους μεταδίδονται.

Αριθμητικό πηλίκο

Το πηλίκο δύο αριθμών υπολογίζεται με χρήση του τελεστή διαίρεσης, παράγοντας έναν αριθμό. Για παράδειγμα:

8 / 2               // 4 
8 / 0               // #infinity 
0 / 0               // #nan 
0 / null            // null 
#nan / #infinity    // #nan

Ο τελεστής διαίρεσης / σε αριθμούς χρησιμοποιεί Διπλή ακρίβεια. Η τυπική συνάρτηση Value.Divide βιβλιοθήκης μπορεί να χρησιμοποιηθεί για τον καθορισμό της Ακρίβειας δεκαδικών. Τα παρακάτω ισχύουν κατά τον υπολογισμό ενός πηλίκου αριθμών:

  • Το πηλίκο σε διπλή ακρίβεια υπολογίζεται σύμφωνα με τους κανόνες του δυαδικού αριθμητικού 64-bit διπλής ακρίβειας IEEE 754, IEEE 754-2008. Ο παρακάτω πίνακας παραθέτει τα αποτελέσματα όλων των πιθανών συνδυασμών μη μηδενικών πεπερασμένων τιμών, μηδενικών, άπειρων και NaN. Στον πίνακα, x τα και y είναι θετικές πεπερασμένες τιμές. z Το είναι το αποτέλεσμα του x / y. Εάν το αποτέλεσμα είναι πολύ μεγάλο για τον τύπο προορισμού, z το είναι άπειρο. Εάν το αποτέλεσμα είναι πολύ μικρό για τον τύπο προορισμού, z το είναι μηδέν.

    / +y -y +0 0- +∞ -∞ NaN
    +x +z -z +∞ -∞ +0 0- NaN
    -x -z +z -∞ +∞ 0- +0 NaN
    +0 +0 0- NaN NaN +0 0- NaN
    -0 0- +0 NaN NaN 0- +0 NaN
    +∞ +∞ -∞ +∞ -∞ NaN NaN NaN
    -∞ -∞ +∞ -∞ +∞ NaN NaN NaN
    NaN NaN NaN NaN NaN NaN NaN NaN
  • Το άθροισμα στην Δεκαδική ακρίβεια υπολογίζεται χωρίς απώλεια ακρίβειας. Η κλίμακα του αποτελέσματος είναι η μεγαλύτερη από τις κλίμακες των δύο τελεστέων.

Πηλίκο διαρκειών

Το πηλίκο των δύο διαρκειών είναι ο αριθμός που αντιπροσωπεύει το πηλίκο του αριθμού των σημάτων ρολογιού 100νανοδευτερομηνιών που αντιπροσωπεύονται από τις διάρκειες. Για παράδειγμα:

#duration(2,0,0,0) / #duration(0,1,30,0) 
// 32

Διάρκειες με κλιμάκωση

Το πηλίκο μιας διάρκειας x και ενός αριθμού y είναι η διάρκεια που αντιπροσωπεύει το πηλίκο του αριθμού των σημάτων ρολογιού 100νανοδευτεροτόνου που αντιπροσωπεύονται από τη διάρκεια x και τον αριθμό y. Για παράδειγμα:

#duration(2,0,0,0) / 32 
// #duration(0,1,30,0)

Συνδυασμός δομής

Ο τελεστής συνδυασμού (x & y) ορίζεται πάνω από τους ακόλουθους τύπους τιμών:

X Y Αποτέλεσμα Ερμηνεία
type text type text type text Αλληλουχία
type text null null
null type text null
type date type time type datetime Συγχώνευση
type date null null
null type time null
type list type list type list Αλληλουχία
type record type record type record Συγχώνευση
type table type table type table Αλληλουχία

Αλληλουχία

Δύο τιμές κειμένου, λίστας ή πίνακα μπορούν να συνενωθούν με τη χρήση x & yτου .

Το παρακάτω παράδειγμα απεικονίζει διαδοχικές τιμές κειμένου:

"AB" & "CDE"     // "ABCDE"

Το παρακάτω παράδειγμα απεικονίζει διαδοχικές λίστες:

{1, 2} & {3}     // {1, 2, 3}

Τα παρακάτω ισχύουν κατά τη συνένωση δύο τιμών με χρήση x & yτου :

  • Τα σφάλματα που προέκυψαν κατά την αξιολόγηση των x παραστάσεων or y μεταδίδονται.

  • Δεν μεταδίδεται σφάλμα εάν ένα από τα στοιχεία ή xy περιέχει ένα σφάλμα.

  • Το αποτέλεσμα της συνένωσης δύο τιμών κειμένου είναι μια τιμή κειμένου που περιέχει την τιμή του x που ακολουθείται αμέσως από το y. Εάν κάποιος από τους τελεστέους είναι null και ο άλλος είναι μια τιμή κειμένου, το αποτέλεσμα είναι null.

  • Το αποτέλεσμα της συνένωσης δύο λιστών είναι μια λίστα που περιέχει όλα τα στοιχεία του x που ακολουθούνται από όλα τα στοιχεία του y.

  • Το αποτέλεσμα της συνένωσης δύο πινάκων είναι ένας πίνακας που έχει την ένωση των στηλών δύο στηλών του πίνακα τελεστέων. Η σειρά στηλών του x διατηρείται, ακολουθούμενη από τις στήλες που εμφανίζονται μόνο στο y, διατηρώντας τη σχετική σειρά διάταξης. Για στήλες που εμφανίζονται μόνο σε έναν από τους τελεστέους, null το χρησιμοποιείται για να συμπληρώσει τις τιμές κελιών για τον άλλο τελεστέο.

Συγχώνευση

Συγχώνευση εγγραφών

Δύο εγγραφές μπορούν να συγχωνευτούν με χρήση x & yτου , παράγοντας μια εγγραφή που περιλαμβάνει πεδία τόσο από το όσο x και yαπό το .

Τα παρακάτω παραδείγματα απεικονίζουν τη συγχώνευση εγγραφών:

[ x = 1 ] & [ y = 2 ]                // [ x = 1, y = 2 ] 
[ x = 1, y = 2 ] & [ x = 3, z = 4 ]  // [ x = 3, y = 2, z = 4 ]

Τα παρακάτω ισχύουν κατά τη συγχώνευση δύο εγγραφών με χρήση x + yτου :

  • Τα σφάλματα που προέκυψαν κατά την αξιολόγηση των x παραστάσεων or y μεταδίδονται.

  • Εάν εμφανίζεται ένα πεδίο τόσο στο όσο x και yστο , χρησιμοποιείται η τιμή από y το .

  • Η σειρά των πεδίων στην εγγραφή που προκύπτει είναι αυτή του x, ακολουθούμενη από πεδία στο y που δεν αποτελούν μέρος του x, με την ίδια σειρά που εμφανίζονται στο y.

  • Η συγχώνευση εγγραφών δεν προκαλεί αξιολόγηση των τιμών.

  • Δεν προκαλείται σφάλμα, επειδή ένα πεδίο περιέχει ένα σφάλμα.

  • Το αποτέλεσμα είναι μια εγγραφή.

Συγχώνευση ημερομηνίας-ώρας

Μια ημερομηνία x μπορεί να συγχωνευθεί με μια ώρα y με χρήση x & yτου , παράγοντας μια ημερομηνία/ώρα που συνδυάζει τα τμήματα τόσο από το όσο x και yαπό το .

Το παρακάτω παράδειγμα απεικονίζει τη συγχώνευση μιας ημερομηνίας και μιας ώρας:

#date(2013,02,26) & #time(09,17,00) 
// #datetime(2013,02,26,09,17,00)

Τα παρακάτω ισχύουν κατά τη συγχώνευση δύο εγγραφών με χρήση x + yτου :

  • Τα σφάλματα που προέκυψαν κατά την αξιολόγηση των x παραστάσεων or y μεταδίδονται.

  • Το αποτέλεσμα είναι μια ημερομηνία/ώρα.

Μονομελείς τελεστές

Οι +τελεστές , -και not είναι μοναδιαίοι τελεστές.

μοναδιαία-παράσταση:
      παράσταση-τύπου

       + μοναδιαία παράσταση
       - μοναδιαία παράσταση
       not μοναδιαία παράσταση

Μοναδιαίος τελεστής συν

Ο μοναδιαίος τελεστής συν (+x) ορίζεται για τους ακόλουθους τύπους τιμών:

X Αποτέλεσμα Ερμηνεία
type number type number Μοναδιαίο συν
type duration type duration Μοναδιαίο συν
null 'null

Για άλλες τιμές, προκαλείται σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας .

Ο μοναδιαίος τελεστής συν επιτρέπει την εφαρμογή ενός + πρόσημο σε έναν αριθμό, ημερομηνία/ώρα ή τιμή null. Το αποτέλεσμα είναι η ίδια τιμή. Για παράδειγμα:

+ - 1                 // -1 
+ + 1                 // 1 
+ #nan                // #nan 
+ #duration(0,1,30,0) // #duration(0,1,30,0)

Τα παρακάτω ισχύουν κατά την αξιολόγηση του μοναδιαίου τελεστή +xσυν :

  • Τα σφάλματα που προέκυψαν κατά την x αξιολόγηση μεταδίδονται.

  • Εάν το αποτέλεσμα της αξιολόγησης x δεν είναι μια αριθμητική τιμή, τότε προκαλείται σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας .

Μοναδιαίος τελεστής μείον

Ο μοναδιαίος τελεστής μείον (-x) ορίζεται για τους ακόλουθους τύπους τιμών:

X Αποτέλεσμα Ερμηνεία
type number type number Άρνηση
type duration type duration Άρνηση
null null

Για άλλες τιμές, προκαλείται σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας .

Ο μοναδιαίος τελεστής μείον χρησιμοποιείται για την αλλαγή του πρόσημο ενός αριθμού ή διάρκειας. Για παράδειγμα:

- (1 + 1)       // -2 
- - 1           // 1 
- - - 1         // -1 
- #nan          // #nan 
- #infinity     // -#infinity 
- #duration(1,0,0,0)  // #duration(-1,0,0,0) 
- #duration(0,1,30,0) // #duration(0,-1,-30,0)

Τα παρακάτω ισχύουν κατά την αξιολόγηση του μοναδιαίου τελεστή -xμείον :

  • Τα σφάλματα που προέκυψαν κατά την x αξιολόγηση μεταδίδονται.

  • Εάν η παράσταση είναι αριθμός, τότε το αποτέλεσμα είναι η αριθμητική τιμή από την παράσταση x με το πρόσημο αλλαγμένο. Εάν η τιμή είναι NaN, τότε το αποτέλεσμα είναι επίσης NaN.

Τελεστής λογικής άρνησης

Ο τελεστής λογικής άρνησης (not) ορίζεται για τους ακόλουθους τύπους τιμών:

X Αποτέλεσμα Ερμηνεία
type logical type logical Άρνηση
null null

Αυτός ο τελεστής υπολογίζει τη λογική not λειτουργία σε μια δεδομένη λογική τιμή. Για παράδειγμα:

not true             // false 
not false            // true 
not (true and true)  // false

Τα παρακάτω ισχύουν κατά την αξιολόγηση του τελεστή λογικής άρνησης not x:

  • Τα σφάλματα που προέκυψαν κατά την x αξιολόγηση μεταδίδονται.

  • Η τιμή που παράγεται από την αξιολόγηση της παράστασης x πρέπει να είναι μια λογική τιμή, διαφορετικά, πρέπει να παρουσιαστεί σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας . Εάν η τιμή είναι true, το αποτέλεσμα είναι false. Εάν ο τελεστέος είναι false, το αποτέλεσμα είναι true.

Το αποτέλεσμα είναι μια λογική τιμή.

Τελεστές τύπου

Οι τελεστές is και as ονομάζονται τελεστές τύπου.

Τελεστής συμβατότητας τύπου

Ο τελεστής συμβατότητας x is y τύπου ορίζεται για τους ακόλουθους τύπους τιμών:

X Y Αποτέλεσμα
type any στοιχειώδης-τύπος που επιδέχεται τιμές null type logical

Η παράσταση x is y επιστρέφει true εάν ο τύπος x που αποδίδεται είναι συμβατός με yτο και επιστρέφει false εάν ο τύπος που x αποδίδεται δεν είναι συμβατός με yτο . yΤο πρέπει να είναι στοιχειώδης-τύπος-που-επιδέχεται-τιμή-null.

παράσταση-is:
      παράσταση as
      παράσταση-is στοιχειώδης-τύπος-που-επιδέχεται-τιμή-null
is
στοιχειώδης-τύπος-που-επιδέχεται-τιμές-null:

       nullable προαγράψτε στοιχειώδη-τύπο

Η συμβατότητα τύπου, όπως υποστηρίζεται από τον is τελεστή, είναι ένα υποσύνολο της συμβατότητας γενικού τύπου και ορίζεται με τους ακόλουθους κανόνες:

  • Εάν x το είναι null, τότε είναι συμβατό εάν y είναι ο τύπος any, ο τύπος nullή ένας τύπος που επιδέχεται τιμές null.

  • Εάν x το δεν είναι null, τότε είναι συμβατό εάν ο στοιχειώδης τύπος είναι x ίδιος με yτο .

Κατά την αξιολόγηση της παράστασης x is y:

  • Ένα σφάλμα που προκύπτει κατά την αξιολόγηση της παράστασης x μεταδίδεται.

Τελεστής δήλωσης τύπου

Ο τελεστής δήλωσης x as y τύπου ορίζεται για τους ακόλουθους τύπους τιμών:

X Y Αποτέλεσμα
type any στοιχειώδης-τύπος που επιδέχεται τιμές null type any

Η παράσταση x as y ισχυρίζεται ότι η τιμή x είναι συμβατή με το σύμφωνα με y τον is τελεστή. Εάν δεν είναι συμβατή, προκαλείται σφάλμα. yΤο πρέπει να είναι στοιχειώδης-τύπος-που-επιδέχεται-τιμή-null.

παράσταση-as:
      παράσταση ισότητας
      παράσταση-as στοιχειώδης-τύπος-που-επιδέχεται-τιμή-null
as

Η παράσταση x as y αξιολογείται ως εξής:

  • Εκτελείται ένας έλεγχος x is y συμβατότητας τύπου και η διεκδίκηση επιστρέφει x το αμετάβλητο εάν αυτή η δοκιμή ολοκληρωθεί με επιτυχία.

  • Εάν αποτύχει ο έλεγχος συμβατότητας, προκαλείται σφάλμα με τον κωδικό "Expression.Error" αιτιολογίας .

Παραδείγματα:

1 as number               // 1 
"A" as number             // error 
null as nullable number   // null

Κατά την αξιολόγηση της παράστασης x as y:

  • Ένα σφάλμα που προκύπτει κατά την αξιολόγηση της παράστασης x μεταδίδεται.

Τελεστής Coalesce

Ο τελεστής ?? coalesce επιστρέφει το αποτέλεσμα του αριστερού τελεστέου του εάν δεν είναι null, διαφορετικά θα επιστρέψει το αποτέλεσμα του δεξιού τελεστέου του. Ο δεξιός τελεστέος αξιολογείται εάν και μόνο εάν ο αριστερός τελεστέος είναι null.