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


Συναρτήσεις

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

Σύνταξη συναρτήσεων

Οι συναρτήσεις συντάσσονται χρησιμοποιώντας μια παράσταση-συνάρτησης:

παράσταση-συνάρτησης:
      ( λίστα-παραμέτρωνπροαπαγράψτε)τον τύπο-επιστροφής-συνάρτησηςπροαπαγράψτε=>το σώμα-συνάρτησης
σώμα-συνάρτησης:
      έκφραση
λίστα-παραμέτρων:
      λίστα-σταθερών-παραμέτρων
      λίστα-σταθερών-παραμέτρων
, λίστα-προαιρετικών-παραμέτρων
      λίστα-προαιρετικών-παραμέτρων
λίστα-σταθερών-παραμέτρων:
      παράμετρος
      παράμετρος
, λίστα-σταθερών-παραμέτρων
παράμετρος:
      όνομα-παραμέτρου επιλογή τύπου-παραμέτρου
όνομα-παραμέτρου:
      αναγνωριστικό
τύπος-παραμέτρου:
      assertion
τύπος-επιστροφής-συνάρτησης:
      assertion
βεβαίωση:

      as στοιχειώδης-τύπος-που επιδέχεται-τιμές null
λίστα-προαιρετικών-παραμέτρων:
      προαιρετική-παράμετρος
      προαιρετική-παράμετρος
, λίστα-προαιρετικών-παραμέτρων
προαιρετική-παράμετρος:

      optionalπαράμετρος
στοιχειώδης-τύπος-που επιδέχεται-τιμές null
      nullable
προαγράψτε στοιχειώδη-τύπο

Ακολουθεί ένα παράδειγμα μιας συνάρτησης που απαιτεί ακριβώς δύο τιμές x και yκαι παράγει το αποτέλεσμα της εφαρμογής + του τελεστή σε αυτές τις τιμές. Τα x και y είναι παράμετροι που αποτελούν μέρος της λίστας-παραμέτρων της συνάρτησης και το είναι το x + y σώμα-συνάρτησης:

(x, y) => x + y

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

 (x, y) => ...

Οι ακόλουθοι τελεστές έχουν ορισθεί για τις τιμές συνάρτησης:

Τελεστής Αποτέλεσμα
x = y Ίσο
x <> y Δεν ισούται με

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

Κλήση συναρτήσεων

Το σώμα-συνάρτησης μιας συνάρτησης εκτελείται με κλήση της τιμής συνάρτησης χρησιμοποιώντας μια παράσταση-κλήσης. Η κλήση μιας τιμής συνάρτησης σημαίνει ότι το σώμα-συνάρτησης της τιμής συνάρτησης αξιολογείται και επιστρέφεται μια τιμή ή παρουσιάζεται σφάλμα.

παράσταση-κλήσης:
      επιλογή λίστας-ορισμάτωνκύριας-παράστασης
( )
λίστα-ορισμάτων:
      λίστα-παράστασης

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

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

[ 
    MyFunction = (x, y, z) => x + y + z, 
    Result1 = MyFunction(1, 2, 3)           // 6
]

Κατά την κλήση μιας συνάρτησης ισχύουν τα παρακάτω:

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

  • Όλες οι παραστάσεις που αντιστοιχούν στα ορίσματα συναρτήσεων αξιολογούνται πριν από την αξιολόγηση του σώματος-συνάρτησης .

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

  • Ο αριθμός των ορισμάτων που κατασκευάζονται από τη λίστα-ορισμάτων πρέπει να είναι συμβατός με τις παραμέτρους της συνάρτησης, διαφορετικά προκαλείται σφάλμα με τον κωδικό αιτιολογίας "Expression.Error". Η διαδικασία προσδιορισμού της συμβατότητας ορίζεται στις Παραμέτρους.

Παράμετροι

Υπάρχουν δύο τύποι παραμέτρων που μπορεί να υπάρχουν σε μια λίστα-παραμέτρων:

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

      [ 
          MyFunction = (x, y) => x + y, 
    
          Result1 = MyFunction(1, 1),     // 2 
          Result2 = MyFunction(2, 2)      // 4
      ] 
    
  • Μια προαιρετική παράμετρος υποδεικνύει ότι ένα όρισμα που αντιστοιχεί στην παράμετρο μπορεί να καθοριστεί κατά την κλήση μιας συνάρτησης, αλλά δεν απαιτείται να καθοριστεί. Εάν ένα όρισμα που αντιστοιχεί σε μια προαιρετική παράμετρο δεν καθορίζεται κατά την κλήση της συνάρτησης, τότε χρησιμοποιείται η τιμή null . Οι προαιρετικές παράμετροι πρέπει να εμφανίζονται μετά από τις απαιτούμενες παραμέτρους σε μια λίστα-παραμέτρων. Η συνάρτηση στο παρακάτω παράδειγμα ορίζει μια σταθερή παράμετρο x και μια προαιρετική παράμετρο y:

      [ 
          MyFunction = (x, optional y) =>
                            if (y = null) x else x + y, 
          Result1 = MyFunction(1),        // 1 
          Result2 = MyFunction(1, null),  // 1 
          Result3 = MyFunction(2, 2),     // 4
      ] 
    

Ο αριθμός ορισμάτων που καθορίζονται κατά την κλήση μιας συνάρτησης πρέπει να είναι συμβατός με τη λίστα παραμέτρων. Η συμβατότητα ενός συνόλου ορισμάτων A για μια συνάρτηση F υπολογίζεται ως εξής:

  • Αφήστε την τιμή N να αντιπροσωπεύει τον αριθμό των ορισμάτων A που κατασκευάστηκαν από τη λίστα-ορισμάτων. Για παράδειγμα:

      MyFunction()             // N = 0 
      MyFunction(1)            // N = 1 
      MyFunction(null)         // N = 1 
      MyFunction(null, 2)      // N = 2 
      MyFunction(1, 2, 3)      // N = 3 
      MyFunction(1, 2, null)   // N = 3 
      MyFunction(1, 2, {3, 4}) // N = 3
    
  • Αφήστε την τιμή Απαιτείται να αντιπροσωπεύει τον αριθμό των σταθερών παραμέτρων και την F τιμή Προαιρετικό τον αριθμό των προαιρετικών παραμέτρων του F. Για παράδειγμα:

    ()               // Required = 0, Optional = 0 
    (x)              // Required = 1, Optional = 0 
    (optional x)     // Required = 0, Optional = 1 
    (x, optional y)  // Required = 1, Optional = 1
    
  • Τα ορίσματα A είναι συμβατά με τη συνάρτηση F εάν ισχύουν τα εξής:

    • (N >= Σταθερή) και (N <= (Σταθερή + Προαιρετική))
    • Οι τύποι ορισμάτων είναι συμβατοί με Fτους αντίστοιχους τύπους παραμέτρων του
  • Εάν η συνάρτηση έχει δηλωμένο τύπο επιστροφής, τότε η τιμή αποτελέσματος του σώματος της συνάρτησης F είναι συμβατή με Fτον τύπο επιστροφής της, εάν ισχύουν τα εξής:

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

Επαναλαμβανόμενες συναρτήσεις

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

[ 
    Factorial = (x) => 
                if x = 0 then 1 else x * @Factorial(x - 1), 
    Result = Factorial(3)  // 6 
]

Παρομοίως, μπορούν να εγγραφούν αμοιβαία επαναλαμβανόμενες συναρτήσεις, εφόσον κάθε συνάρτηση στην οποία χρειάζεται πρόσβαση έχει όνομα. Στο παρακάτω παράδειγμα, ένα μέρος της Factorial συνάρτησης έχει επανασχεδιαστεί σε μια δεύτερη Factorial2 συνάρτηση.

[ 
    Factorial = (x) => if x = 0 then 1 else Factorial2(x), 
    Factorial2 = (x) => x * Factorial(x - 1), 
    Result = Factorial(3)     // 6 
]

Κλείσιμο

Μια συνάρτηση μπορεί να επιστρέψει μια άλλη συνάρτηση ως τιμή. Αυτή η συνάρτηση μπορεί με τη σειρά της να εξαρτάται από μία ή περισσότερες παραμέτρους της αρχικής συνάρτησης. Στο παρακάτω παράδειγμα, η συνάρτηση που συσχετίζεται με το πεδίο MyFunction επιστρέφει μια συνάρτηση που επιστρέφει την παράμετρο που καθορίστηκε σε αυτή:

[ 
    MyFunction = (x) => () => x, 
    MyFunction1 = MyFunction(1), 
    MyFunction2 = MyFunction(2), 
    Result = MyFunction1() + MyFunction2()  // 3 
]

Κάθε φορά που καλείται η συνάρτηση, θα επιστρέφεται μια νέα τιμή συνάρτησης που διατηρεί την τιμή της παραμέτρου, έτσι ώστε όταν καλείται, να επιστρέφεται η τιμή της παραμέτρου.

Συναρτήσεις και περιβάλλοντα

Εκτός από τις παραμέτρους, το σώμα-συνάρτησης μιας παράστασης-συνάρτησης μπορεί να αναφέρει μεταβλητές που υπάρχουν στο περιβάλλον κατά την προετοιμασία της συνάρτησης. Για παράδειγμα, η συνάρτηση που ορίζεται από το πεδίο MyFunction αποκτά πρόσβαση στο πεδίο C της εγγραφής Aπερίκλεωσης :

[ 
A =  
    [ 
        MyFunction = () => C, 
        C = 1 
    ], 
B = A[MyFunction]()           // 1 
]

Όταν MyFunction καλείται η , αποκτά πρόσβαση στην τιμή της μεταβλητής C, παρόλο που καλείται από ένα περιβάλλον (B) που δεν περιέχει μια μεταβλητή C.

Απλουστευμένες δηλώσεις

Η παράσταση-each είναι συντακτική στενογραφία για τη δήλωση συναρτήσεων χωρίς τύπο που λαμβάνουν μια μοναδική παράμετρο με την ονομασία _ (χαρακτήρας υπογράμμισης).

παράσταση each:
      eachσώμα-παράστασης-each
κάθε-παράσταση-σώμα:
      σώμα-συνάρτησης

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

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

each _ + 1 
(_) => _ + 1  
each [A] 
(_) => _[A] 
 
Table.SelectRows( aTable, each [Weight] > 12 ) 
Table.SelectRows( aTable, (_) => _[Weight] > 12 )