Kenapa ekspresi lambda adalah objek di Java? [duplikat]
Bagaimana objek ekspresi lambda di Java? Bagaimana ekspresi lambda, yang merupakan bagian dari pemrograman fungsional, diimplementasikan di Java, yang merupakan bahasa berorientasi objek? Konsep Java apa yang saya perlukan untuk memahami ekspresi lambda?
Jawaban
Anda perlu memahami beberapa hal:
1) Antarmuka fungsional
- antarmuka yang hanya memiliki satu metode publik
public interface Runnable{
void run();
}
- ini adalah contoh antarmuka fungsional, dapat memiliki berbagai jenis metode seperti int
processNumber(int number) - ingat saja hanya ada satu metode (satu metode tidak diimplementasikan, default tidak dihitung)
2) Menggunakan antarmuka fungsional
- Anda dapat mengimplementasikan antarmuka fungsional Anda di kelas Anda katakanlah MyRunnable
public class MyRunnable implements Runnable{
public void run(){
System.out.println("Hello world");
}
}
- daripada Anda bisa melewati kelas MyRunnable Anda dalam metode lain itu hanya objek normal
public class MyClass{
public void myMethod(Runnable runnable){
runnable.run();
}
}
- ini akan mencetak "Halo dunia"
public static void main{
MyClass myClass = new MyClass();
myClass.myMethod(new MyRunnable());
}
3) Apa yang dilakukan lambda
- jadi apa yang lambda biarkan Anda lakukan adalah membuat implementasi antarmuka anonim
public static void main{
MyClass myClass = new MyClass();
myClass.myMethod(() -> System.out.println("Hello my world"));
}
- ini akan mencetak "Halo duniaku"
- Anda baru saja membuat implementasi Runnable secara anonim dan meneruskannya ke MyMethod
- itu hanya gula sintaksis untuk ini
public static void main{
MyClass myClass = new MyClass();
myClass.myMethod(new Runnable{
public void run(){
System.out.println("Hello my world");
});
}
Lambda di Java pada dasarnya hanyalah antarmuka fungsional . Ini kebanyakan gula sintaksis .
Java bukanlah bahasa fungsional dan karena itu tidak dapat sepenuhnya mengimplementasikan pemrograman fungsional, hanya sebagian dari prinsip intinya. Misalnya Anda tidak dapat mengimplementasikan kelas tipe yang tepat di Java .
Bagaimanapun tidak ada definisi standar untuk FP, sama seperti tidak ada definisi standar untuk OOP. Definisi spesifik dapat berbeda-beda tergantung pada sumbernya, tetapi gagasan keseluruhan (biasanya) sama.
Java adalah Bahasa Berorientasi Objek. Tetapi beberapa fitur dari bahasa fungsional juga tersedia di java seperti lambda
lambda pada dasarnya adalah sebuah objek yang bertindak seperti sebuah fungsi. dokumentasi:https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html
seperti biasa suatu fungsi memiliki masukan dan keluaran
input dalam fungsi: disebut T (as in take)
output dalam fungsi: disebut R (sebagai imbalan)
struktur deklarasi: Function<T,R> var_name = input_variables -> output_expression
contoh: Function<Double,Double> Sigmoid = x->(1/( 1 + Math.pow(Math.E,(-1*x))));
atau ada cara lain (juga dikenal sebagai referensi metode)
ini sebenarnya mengakses metode di bawah tenda
Function<T,R> var_name = class_name :: method_name
contoh: Function<Double,Double>Tanh = Math::tanh
Menggunakan sebuah fungsi
Untuk menggunakan fungsi, Anda hanya perlu memanggil apply(T t)metode kelas fungsi
contoh: double num = sigmoid.apply(0)