Lambda ifadeleri Java'da nasıl nesnelerdir? [çiftleme]

Nov 06 2020

Java'da lambda ifade nesneleri nasıldır? Nesne yönelimli bir dil olan Java'da işlevsel programlamanın bir parçası olan lambda ifadeleri nasıl uygulanabilir? Lambda ifadelerini anlamak için hangi Java kavramlarına ihtiyacım var?

Yanıtlar

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

Birkaç şeyi anlamanız gerekir:

1) İşlevsel arayüz

  • yalnızca bir genel yöntemi olan arayüz
public interface Runnable{
    void run();
}
  • bu işlevsel arayüz örneğidir, int gibi farklı yöntemlere sahip olabilir processNumber(int number)
  • sadece tek bir yöntem olabileceğini unutmayın (uygulanmayan bir yöntem, varsayılanlar sayılmaz)

2) İşlevsel arayüzü kullanma

  • fonksiyonel arayüzünüzü sınıfınızda uygulayabilirsiniz diyelim MyRunnable
public class MyRunnable implements Runnable{
    public void run(){
        System.out.println("Hello world");
    }
}
  • MyRunnable sınıfınızı başka bir yöntemde geçirebileceğinizden, normal nesnesi
public class MyClass{
    public void myMethod(Runnable runnable){
        runnable.run();
    }
}
  • bu "Merhaba dünya" yazdırır
public static void main{
    MyClass myClass = new MyClass();
    myClass.myMethod(new MyRunnable());
}

3) Lambda ne yapıyor?

  • lambda'nın yapmanıza izin verdiği şey, arayüzün anonim uygulamasını oluşturmaktır.
public static void main{
    MyClass myClass = new MyClass();
    myClass.myMethod(() -> System.out.println("Hello my world"));
}
  • bu "Merhaba dünyam" yazardı
  • Sadece Runnable'ın anonim uygulamasını oluşturuyorsunuz ve bunu MyMethod'a geçiriyorsunuz
  • bunun için sadece sözdizimsel şeker
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

Java'daki bir lambda, temelde sadece işlevsel bir arayüzdür . Çoğunlukla sözdizimsel şekerdir .

Java işlevsel bir dil değildir ve bu nedenle işlevsel programlamayı tam olarak uygulayamaz, yalnızca temel ilkelerinin bir alt kümesini. Örneğin , Java'da doğru tip sınıflarını uygulayamazsınız .

Her durumda, FP için standart bir tanım yoktur, tıpkı OOP için standart bir tanım olmaması gibi. Spesifik tanım, kaynaklara bağlı olarak değişebilir, ancak genel fikirler (genellikle) aynıdır.

Coder Nov 06 2020 at 19:04

Java, Nesne Tabanlı bir Dildir. Ancak işlevsel dillerin bazı özellikleri, lambda gibi javada da mevcuttur.

lambda temelde bir işlev gibi davranan bir nesnedir. belgeler:https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html

her zamanki gibi bir fonksiyonun bir girişi ve bir çıkışı vardır

işlevlerdeki girdiler: T olarak anılır (alışta olduğu gibi)

işlevdeki çıktılar: R olarak adlandırılır (karşılığında olduğu gibi)

beyanname yapısı: Function<T,R> var_name = input_variables -> output_expression

misal : Function<Double,Double> Sigmoid = x->(1/( 1 + Math.pow(Math.E,(-1*x))));

veya başka bir yol var (yöntem referansı olarak da bilinir)

bu aslında kaputun altındaki yönteme erişiyor

Function<T,R> var_name = class_name :: method_name

misal : Function<Double,Double>Tanh = Math::tanh

Bir işlevi kullanma

Bir işlevi kullanmak için sadece apply(T t)işlev sınıfının yöntemini çağırmanız gerekir

misal : double num = sigmoid.apply(0)