====== Lamda Expressions ====== Τα //lambda expressions// (εκφράσεις //lamda//) στη Java είναι ένας τρόπος δημιουργίας ανώνυμων συναρτήσεων, οι οποίες μπορούν να **//χρησιμοποιηθούν σαν να ήταν αντικείμενα//**. Παρέχουν έναν σαφή και σύντομο τρόπο για την αναπαράσταση ενός interface που έχει μόνο μία μέθοδο(//Functional Interface//), χρησιμοποιώντας την έκφραση. Σε αυτή την ενότητα θα δούμε τον τρόπο σύνταξης των εκφράσεων //lamda//. ===== Παράμετροι εκφράσεων lamda ===== === Μηδενικές παράμετροι === () -> System.out.println("Lambda Function tutorial"); === Μία παράμετρος === (x) -> x*x; === Δύο ή περισσότερες παράμετροι === (x,y) -> x*y + 20; ===== Το σώμα των εκφράσεων lamda ===== Εάν μία έκφραση //lamda// αποτελείται από μόνο μία εντολή τότε αυτή δεν χρειάζεται να περιέχεται μέσα σε άγκιστρα. Ομοίως δεν απαιτείται η εντολή return, καθώς η επιστρεφόμενη τιμή είναι το αποτέλεσμα της μοναδικής εντολής. Τα παραπάνω παραδείγματα είναι ενδεικτικά. Εάν έχουμε περισσότερες από μία εντολές, όπως στο παράδειγμα της ενότητας με το interface [[java:functional_interfaces#παράδειγμα_ορισμού_ενός_δικού_μας_functional_interface|CustomHasher]], τότε οι εντολές περικλύονται σε άγκιστρα και η τελευταία εντολή θα πρέπει να είναι η εντολή return εφόσον υπάρχει επιστρεφόμενος τύπος. Για λόγους πληρότητας επαναλαμβάνουμε τον κώδικα εδώ. @FunctionalInterface public interface CustomHasher { public long hash(T t); } { public class HashStudent { public static void main(String[] args) { Student mickey = new Student("Mickey", "Mouse"); CustomHasher hs = (s) -> { long value = 5381; for (char c : s.getLastName().toCharArray()) { value = ((value << 3) + value) + (int)c; } for (char c : s.getFirstName().toCharArray()) { value = ((value << 3) + value) + (int)c; } return value; }; System.out.println("Hash is: "+ hs.hash(mickey) ); } } } H //lamda// έκφραση δεν αποτελεί απλά μία ανώνυμη συνάρτηση. Ορίζει ένα αντικείμενο που υλοποιεί το //interface CustomHasher//, το οποίο μπορεί στη συνέχεια να χρησιμοποιηθεί για να κληθεί η μοναδική μέθοδος που αυτό περιέχει. **Απαραίτητη προϋπόθεση** για να χρησιμοποιήσετε μία //lamda// έκφραση είναι αυτή να ενέχει θέση υλοποίησης ενός //Functional Interface// (//interface// που έχει μόνο μία //abstract// συνάρτηση).