Kotlin Lambdas

Lambda İfadeleri

Lambda ifadesi veya kısaca lambda anonim bir işlevdir; isimsiz bir işlev. Bu işlevler bildirimsiz bir ifade olarak hemen iletilir. Örneğin,

 fun main(args: Array) ( val greeting = ( println("Hello!")) // invoking function greeting() )

Programı çalıştırdığınızda, çıktı:

 Merhaba!

Burada, selamlama değişkenine bir lambda ifadesi atanır. İfade herhangi bir parametre kabul etmez ve bu programda herhangi bir değer döndürmez.

Ardından, işlev (lambda ifadesi) şu şekilde çağrılır:

 selamlama() 

Örnek: Parametreli ve Dönüş Tipli Lambda

Aşağıdaki program, iki tamsayıyı parametre olarak kabul eden ve bu iki tamsayının çarpımını döndüren bir lambda ifadesine sahiptir.

 fun main(args: Array) ( val product = ( a: Int, b: Int -> a * b ) val result = product(9, 3) println(result) )

Programı çalıştırdığınızda, çıktı:

 27

Burada lambda ifadesi şöyledir:

Bir lambda ifadesinin küme ayraçları içine alındığına dikkat edin.

Üst Düzey İşlevi

Koltin, fonksiyonel programlama için büyük bir desteğe sahiptir. Fonksiyonları argüman olarak diğer fonksiyonlara iletebilirsiniz. Ayrıca, diğer işlevlerden bir işlevi döndürebilirsiniz. Bu işlevlere üst düzey işlevler denir.

Genellikle, lambda ifadeleri kolaylık sağlamak için daha yüksek dereceli bir işleve (tipik bir işlevden ziyade) aktarılır.

Örnek: Lambda'yı İşleve Aktarma

Daha yüksek dereceli bir işleve bir lambda ifadesi geçirelim. İşte bunu nasıl yapabileceğiniz.

 fun callMe(greeting: () -> Unit) ( greeting() ) fun main(args: Array) ( callMe(( println("Hello!") )) )

Programı çalıştırdığınızda, çıktı:

 Merhaba!

Burada, callMe()daha yüksek dereceden bir işlev (çünkü işlevi bir parametre olarak alır). Selamlama parametresi callMe()işleve iletilen lambda'yı şu şekilde kabul eder :

 selamlama: () -> Birim

Boş parantez, aktarılan anonim işlevin herhangi bir parametre kabul etmediğini gösterir. Ve Unitanahtar kelime, anonim işlevin herhangi bir değer döndürmediğini gösterir.

Lambdalar koleksiyonlarla çalışırken sıklıkla kullanılır. Ve, standart kitaplıkta, görevimizi kolaylaştırmak için lambdalar alan birçok yerleşik işlev vardır. Burada birkaç örnek göreceksiniz:

Örnek: maxBy () Fonksiyonu

MaxBy () işlevi, verilen işlevin en büyük değerini veren ilk öğeyi veya nullöğe yoksa döndürür .

 data class Person(val name: String, val age: Int) fun main(args: Array) ( val people = listOf( Person("Jack", 34), Person("Shelly", 19), Person("Patrick", 13), Person("Jill", 12), Person("Shane", 22), Person("Joe", 18) ) val selectedPerson = people.maxBy(( person -> person.age )) println(selectedPerson) println("name: $(selectedPerson?.name)" ) println("age: $(selectedPerson?.age)" ) )

Programı çalıştırdığınızda, çıktı:

 Kişi (adı = Jack, yaş = 34) adı: Jack yaş: 34

Burada maxBy()işlev, Person nesnelerinin bir listesini alır ve maksimum yaşa sahip Person nesnesini döndürür.

it Anahtar Kelime: Tek Parametre için kullanılır

Yukarıdaki programda, lambda ifadesi yalnızca bir parametreyi kabul eder (Kişi nesnelerinin bir listesi). Bu gibi durumlarda, argümana anahtar sözcük kullanarak başvurabilirsiniz it.

Değiştirebilirsin

 val selectedPerson = people.maxBy ((kişi -> person.age))

ile

 val selectedPerson = people.maxBy ((it.age)) 

yukarıdaki programda.

Örnek: maxBy () ve startsWith () Fonksiyonu

Aşağıdaki program, S harfiyle başlayan bir Person nesnesinin maksimum yaşını hesaplar.

İki kütüphane işlevi kullanacağız maxBy()ve startsWith()bu görevi yerine getireceğiz. StarsWith () işlevi true, bağımsız değişken olarak iletilen belirtilen karakterle başlıyorsa geri döner .

 data class Person(val name: String, val age: Int) fun main(args: Array) ( val people = listOf( Person("Jack", 34), Person("Shelly", 19), Person("Patrick", 13), Person("Jill", 12), Person("Shane", 22), Person("Joe", 18) ) val selectedPerson = people .filter ( it.name.startsWith("S") ) .maxBy( it.age ) println(selectedPerson) println("name: $(selectedPerson?.name)" ) println("age: $(selectedPerson?.age)" ) )

Programı çalıştırdığınızda, çıktı:

 Kişi (isim = Shane, yaş = 22) adı: Shane yaş: 22

Önerilen Okumalar

  • Kotlin Kapakları
  • Kotlin İle ve uygula

Ilginç makaleler...