Εκφράσεις λάμδα
Η έκφραση λάμδα ή απλά η λάμδα είναι μια ανώνυμη συνάρτηση. μια συνάρτηση χωρίς όνομα. Αυτές οι συναρτήσεις περνούν αμέσως ως έκφραση χωρίς δήλωση. Για παράδειγμα,
fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
Γειά σου!
Εδώ, μια έκφραση λάμδα αντιστοιχεί σε μεταβλητό χαιρετισμό. Η έκφραση δεν δέχεται παραμέτρους και δεν επιστρέφει καμία τιμή σε αυτό το πρόγραμμα.
Στη συνέχεια, η συνάρτηση (έκφραση λάμδα) καλείται ως:
χαιρετισμός()
Παράδειγμα: Λάμδα με παράμετροι και τύπος επιστροφής
Το παρακάτω πρόγραμμα έχει μια έκφραση λάμδα που δέχεται δύο ακέραιοι ως παραμέτρους και επιστρέφει το προϊόν αυτών των δύο ακέραιων αριθμών.
fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
27
Εδώ, η έκφραση λάμδα είναι:
Σημειώστε ότι μια έκφραση λάμδα περικλείεται μέσα σε σγουρά τιράντες.
Λειτουργία υψηλότερης τάξης
Το Koltin έχει μεγάλη υποστήριξη για λειτουργικό προγραμματισμό. Μπορείτε να μεταβιβάσετε συναρτήσεις ως ορίσματα σε άλλες συναρτήσεις. Επίσης, μπορείτε να επιστρέψετε μια συνάρτηση από άλλες λειτουργίες. Αυτές οι συναρτήσεις ονομάζονται συναρτήσεις υψηλότερης τάξης.
Συχνά, οι εκφράσεις λάμδα μεταφέρονται σε λειτουργία υψηλότερης τάξης (παρά σε μια τυπική λειτουργία) για ευκολία.
Παράδειγμα: Μετάδοση της Λάμδα στη Λειτουργία
Ας περάσουμε μια έκφραση λάμδα σε μια λειτουργία υψηλότερης τάξης. Δείτε πώς μπορείτε να το κάνετε.
fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
Γειά σου!
Εδώ, callMe()
είναι μια συνάρτηση υψηλότερης τάξης (επειδή παίρνει τη λειτουργία ως παράμετρος). Η παράμετρος χαιρετισμού δέχεται το λάμδα που έχει περάσει στη callMe()
συνάρτηση ως:
χαιρετισμός: () -> Μονάδα
Η κενή παρένθεση υποδηλώνει ότι η ανώνυμη συνάρτηση που πέρασε δεν δέχεται παραμέτρους. Και, η Unit
λέξη-κλειδί υποδηλώνει ότι η ανώνυμη συνάρτηση δεν επιστρέφει καμία τιμή.
Τα λάμπδα χρησιμοποιούνται συχνά ενώ δουλεύουν με συλλογές. Και, υπάρχουν πολλές ενσωματωμένες λειτουργίες διαθέσιμες στη βασική βιβλιοθήκη που παίρνουν lambdas για να διευκολύνουν την εργασία μας. Θα δείτε μερικά παραδείγματα εδώ:
Παράδειγμα: συνάρτηση maxBy ()
Η συνάρτηση maxBy () επιστρέφει το πρώτο στοιχείο αποδίδοντας τη μεγαλύτερη τιμή της δεδομένης συνάρτησης ή null
εάν δεν υπάρχουν στοιχεία.
data class Person(val name: String, val age: Int) fun main(args: Array) ( val people = listOf( Person("Jack", 34), Person("Shelly", 19), Person("Patrick", 13), Person("Jill", 12), Person("Shane", 22), Person("Joe", 18) ) val selectedPerson = people.maxBy(( person -> person.age )) println(selectedPerson) println("name: $(selectedPerson?.name)" ) println("age: $(selectedPerson?.age)" ) )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
Άτομο (όνομα = Τζακ, ηλικία = 34) όνομα: Jack ηλικία: 34
Εδώ, η maxBy()
συνάρτηση παίρνει μια λίστα αντικειμένων Person και επιστρέφει το αντικείμενο Person με μέγιστη ηλικία.
it Keyword: Χρησιμοποιείται για μία παράμετρο
Στο παραπάνω πρόγραμμα, η έκφραση lambda δέχεται μόνο μία παράμετρο (μια λίστα αντικειμένων Person). Σε τέτοιες περιπτώσεις, μπορείτε να παραπέμψετε το επιχείρημα χρησιμοποιώντας λέξη-κλειδί it
.
Μπορείτε να αντικαταστήσετε
val selectPerson = people.maxBy ((άτομο -> person.age))
με
val selectPerson = people.maxBy ((it.age))
στο παραπάνω πρόγραμμα.
Παράδειγμα: συνάρτηση maxBy () και beginWith ()
Το παρακάτω πρόγραμμα υπολογίζει τη μέγιστη ηλικία ενός αντικειμένου ατόμου ξεκινώντας με το γράμμα S.
Θα χρησιμοποιήσουμε δύο λειτουργίες βιβλιοθήκης maxBy()
και startsWith()
για να ολοκληρώσουμε αυτήν την εργασία. Η συνάρτηση starsWith () επιστρέφει true
εάν ξεκινά με τον καθορισμένο χαρακτήρα που περνά ως όρισμα.
data class Person(val name: String, val age: Int) fun main(args: Array) ( val people = listOf( Person("Jack", 34), Person("Shelly", 19), Person("Patrick", 13), Person("Jill", 12), Person("Shane", 22), Person("Joe", 18) ) val selectedPerson = people .filter ( it.name.startsWith("S") ) .maxBy( it.age ) println(selectedPerson) println("name: $(selectedPerson?.name)" ) println("age: $(selectedPerson?.age)" ) )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
Πρόσωπο (όνομα = Shane, ηλικία = 22) όνομα: Shane ηλικία: 22
Προτεινόμενες αναγνώσεις
- Κλείσιμο Kotlin
- Kotlin Με και εφαρμογή