====== 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// συνάρτηση).