• Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim
KodEduKodEdu
  • Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim

Java 8 – Lambda Expression nedir? Nasıl kullanırım?

  • Posted by Rahman Usta
  • Categories backend, Genel, Uncategorized, Yazılar
  • Date 20 Mart 2014

Merhaba arkadaşlar;

Bugün sizlerle Java 8 (Project Lambda) ile Java ortamına katılan Lambda ifadelerinden (Lambda expression) bahsetmek istiyorum.

Lambda nedir?

Programlama dili çerçevesinde Lambda, anonim tekil görevler olarak değerlendirilebilir. Lambda deyimleri (Lambda fonksiyonları da denebilir), referans verilebilir ve tekrar tekrar kullanılabilirdir. Genel kullanım açısından Lambda fonksiyonları, diğer bir fonksiyona argüman olarak iletilebilirdir. Böylece, bir tarafta tanımlanan iş birimi, diğer bir iş biriminde koşturulabilir olmaktadır. Burada dikkat çekilecek unsur, bir iş biriminin diğer bir uygulama birimine referans olarak eriştirilebilirliğidir.

Javascript ile Lambda – Basit Giriş;

Javascript dilinde Array sınıfının prototype alanında forEach isimli bir iş birimi (fonksiyon) bulunmaktadır. forEach fonksiyonu, parametre olarak bir anonim Javascript fonksiyonunu kabul etmektedir. forEach fonksiyonuna, parametre olarak tanımlanan anonim fonksiyon, forEach fonksiyonu içerisinde koşturulmaktadır. Bu sayede iş mantığı, diğer fonksiyona paslanmış olmaktadır.

Örnek 1:


var dizi = [1,2,3,4,5]; // Bir javascript dizisi

 // Anonim fonksiyon her bir elemanı çıktılıyor.
dizi.forEach(function(e){ //  (1)
   console.log("Eleman: ",e);
});

Yukarıda (1) numaralı kısımdaki anonim fonksiyon yani lambda fonksiyonu, forEach metodu içerisinde koşturulmaktadır. forEach metodu içerisindeki benzer yaklaşımı, kendi fonksiyonumuz ile oluşturalım.

Örnek 2:


var fonk= function(a,b,callback){
    // Lambda fonksiyonu "callback" burada koşturulur.
   return callback(a,b)*2; //  (2)
}

var result = fonk(2,3,function(a,b){ // (1)
    // Bu Lambda fonksiyonu 2 argümanı toplar.
   return a+b;
});

console.log("Sonuç ..: ",result); // Sonuç : (2+3)*2 = 10

Tekrar ederek, Lambda fonksiyonları için referans verilebilir iş birimleri denebilir. Bu yaklaşım bir çok programlama dilinde farklı biçimlerde yer alabilir, anlaşılabilirlik açısından ilk önce Javascript örneği vermeyi tercih ettim.

Lambda Java 8 öncesinde nasıldı?

Lambda birimleri (referans verilebilir iş birimleri), Java 8 evvelinde anonim sınıflar ile tanımlanabilmekteydi. Örnek 2’nin benzeri Java 8 evvelinde nasıl yazılıyordu?

Öncelikle bir iş birimi tipi gerekli, bu iş birimi 2 argüman kabul etmeli ve bir değer döndürmelidir. İş mantığı anonim olarak tanımlanacağı için, abstract sınıflar veya arayüzler kullanılabilir.

Örnek 3


public interface Anonim{
   public int call(int a, int b);
}

Anonim arayüz sözleşmesi, int türünden 2 değer alır ve bir int değer döndürür. Dikkat ederseniz sadece sözleşmenin maddesi tanımlandı, iş mantığı anonim olarak geliştirici tarafından tanımlanacak.


public class LambdaApp {

// Örnek 2 (2) gibi
public int fonk(int a, int b, Anonim anonim) {
   return anonim.call(a, b) * 2; // anonim iş birimi burada koşturuluyor (2)
};

public static void main(String[] args) {

LambdaApp app = new LambdaApp();

// Örnek 2 (1) gibi
app.fonk(2, 3, new Anonim() { // Anonim iş birimi burada tanımlanıyor (1)
 @Override
 public int call(int a, int b) {
   return a + b;
 }
});
}
}

Java 8 ve Lambda ifadeleri

LambdaApp sınıfının (1) numaralı kısmındaki anonim iş birimi, Javascript dilindeki karşılığına göre şu anda çok daha kompleks. 6 komut satırı yer işgal ediyor. Fakat bu fonksiyonun yaptığı tek iş var, 2 argüman almak ve toplayıp geri döndürmek. Bu anonim birimi sanıyorum şu biçimde temsil edebiliriz.

fn(a,b) -> (a+b);

Görüldüğü üzere tek bir satırda aynı işi gören anonim iş birimini yani lambda ifadesini yazdık. Aynı örneği şimdi Java 8 Lambda deyimi ile yazalım.


public interface Anonim{
   public int call(int a, int b);
}

public class LambdaAppJava8 {

public int fonk(int a, int b, Anonim anonim) {
   return anonim.call(a, b) * 2;
};

public static void main(String[] args) {

LambdaAppJava8 app = new LambdaAppJava8();

app.fonk(2, 3, (a, b) -> a + b); // Dikkat (1)
}

}

Görüldüğü üzere 6 satırlık anonim sınıf kullanımını, tek satıra düşürmüş olduk.

Lambda ifadeleri, Java 8 versiyonunun en çarpıcı yeniliklerinden biri. Hatta Java 8’e ismini veren bir yenilik (Bkz. Project Lambda).

Sizler de Java 8 kullanmak istiyorsanız https://jdk8.java.net/ adresinden sisteminize kurabilirsiniz.

Bol Javalı günler dilerim.

Tag:backend, frontend, lambda, lambda expression

  • Share:
author avatar
Rahman Usta
Kodedu.com bünyesinde eğitim ve danışmanlık faaliyetleri sürdüren Rahman Usta, 2012 yılında yayına çıkan popülerJava Mimarisiyle Kurumsal Çözümler ve 2014 yılında yayınlanan Java 8 Ebook kitaplarının yazarıdır. Açık kaynak dünyasına katkı veren yazar, geliştirdiği AsciidocFX projesiyle Duke's Choice Award 2015 ödülünü kazanmıştır. Rahman ayrıca, Istanbul JUG'un ve Java standartlarını geliştiren JCP (Java Community Process)'in bir üyesidir. 2018 yılında Java Şampiyonu olarak seçilmiştir.

Previous post

JSR 341 - Expression Language 3
20 Mart 2014

Next post

Java 8 - Lambda İfadeleri ve Fonksiyonel Arayüzler
28 Mart 2014

You may also like

api-logo
Swagger Nedir? Neden kullanılır?
10 Ekim, 2018
spring-cli-logo
Spring CLI ile Spring Boot Projeleri Hazırlamak
21 Ağustos, 2017
eureka_architecture
Spring Cloud Netflix ve Eureka Service Discovery
3 Temmuz, 2017

Leave A Reply Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta listesine kayıt olun!






Gözde yazılar

Hafif bir Kod Editörü – Brackets
30Haz2012
Java’da Record’lar
27Oca2020
Reflection ile Dependency Injection nasıl gerçekleştirilir?
04Eyl2012
Integration of Spring MVC and Mustache
02Ağu2013

Son Yazılar

  • Java’da Record’lar 27 Ocak 2020
  • Swagger Nedir? Neden kullanılır? 10 Ekim 2018
  • Spring CLI ile Spring Boot Projeleri Hazırlamak 21 Ağustos 2017
  • Spring Cloud Netflix ve Eureka Service Discovery 3 Temmuz 2017
  • Online React.js Eğitimi ardından (15-25 Mayıs 2017) 31 Mayıs 2017

Son Yorumlar

  • YAML Nedir? Neden YAML Kullanmalıyız? için shahriyar
  • Java Persistence API Nedir? (Giriş) için Utku
  • Java 8 – CompletableFuture ile Asenkron Programlama için Rahman Usta
  • Java 8 – CompletableFuture ile Asenkron Programlama için burak
  • Arm7 Nxp 2104 işlemci ile basit bir Uygulama için Mustafa Dinc

Get Java Software

Arşivler

Bizi takip edin

React.js Eğitimi Başlıyor
11-22 Eylül, 2017
Eğitmen
Rahman Usta
İletişim

merhaba@kodedu.com

  • Hakkında
  • Gizlilik Politikası
  • İletişim
  • Referanslar
Kodedu Bilişim Danışmanlık
Cemil Meriç mah. Çelebi sok.
No:16/3 Ümraniye/İSTANBUL
Tel: 0850 885 38 65
Alemdağ V.D.: 8960484815

KODEDU © Tüm hakları saklıdır.