Kenapa ekspresi lambda adalah objek di Java? [duplikat]

Nov 06 2020

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

2 JakubZnamenáček Nov 06 2020 at 19:17

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");
        });
}
1 m0skit0 Nov 06 2020 at 17:50

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.

Coder Nov 06 2020 at 19:04

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)