Kotlin | Higher-Order Fonksiyonlar ve Lambda İfadeleri

Merhaba, bu yazımızda, Kotlin programlama dilinde Higher-Order fonksiyonlar ve Lambda ifadelerin nasıl kullanılabileceğini öğreneceğiz. Bu yöntemler sayesinde basit işlemleri ifade etmek, kodu anlaşılır hale getirmek ve özelleştirebilmek yeteneklerine sahip olacağız. Yazımızda öğreneceğimiz konu ile ilgili somut örnekleri ve kodları inceleyeceğiz.

Kemal Adlığ
Huawei Developers - Türkiye
4 min readFeb 15, 2023

--

Bu kapak fotoğrafı bir Canva şablonu kullanılarak hazırlanmıştır.

Giriş

Okuması ve anlaşılması kolay, temiz ve etkili bir kod yazmayı istemez misiniz? Bu yazımda, Kotlin programlama dilinde Higher-Order fonksiyonların ve Lamda ifadelerin ne olduğunu öğrenmek için size yardımcı olacak, bu fonksiyonların nasıl bir araya getirilebileceğini ve kodunuzu nasıl kısaltabileceğinizi ve daha etkili hale getirebileceğinizi göstereceğim. Ayrıca, bu fonksiyonları verimli bir şekilde nasıl kullanabileceğinizi de öğreneceksiniz.

Higher-Order fonksiyon nedir?

Higher-Order fonksiyonlar, bir fonksiyonu parametre olarak alan veya bir fonksiyonu bir çıktı olarak döndüren fonksiyonlardır. Bu fonksiyonlar, kodu daha anlaşılır ve güçlü bir şekilde yazmamıza izin verir. Ayrıca, bu fonksiyonlar, daha önce yazılmış kodu çalıştırmak veya daha önce yazılmış kodu özelleştirmek için kullanılır.

Higher-Order fonksiyonlar, kodu okunaklı, kolay anlaşılır ve daha kısa hale getirmeye yardımcı olurlar. Ayrıca, kodu çalıştırmak veya tekrarlanan kodu tek bir kod bloğu olarak tekrar kullanmak mümkündür. Böylece, kodun yazılması sırasında çok daha az zaman harcanır.

Gelin beraber bir örneğine bakalım.

Yukarıdaki örnekte performCalculation() fonksiyonu 3 tane parametre alır: ‘start’ ve ‘end’ hesaplama yapmak istediğimiz sayıların başlangıç ve bitiş değerleri, calculation ise Int tipinde parametre alarak Int değeri döndüren bir fonksiyondur. Öncelikle, ‘result’ isimli Int tipinde bir array list tanımlanır. Verdiğimiz sayı aralıklarını ‘calculation’ fonksiyonuna argüman olarak vererek, return edilen değerler döngüyle listeye eklenir. Ardından bu liste return edilir.

Tanımladığımız bu Higher-Order fonksiyonunu kullanmak adına ‘squaredNumbers’ isimli bir liste oluşturulur ve fonksiyon çağrılır. Dikkat ettiyseniz ‘performCalculation’ fonksiyonumuza argüman olarak vermemiz gereken fonksiyonu ‘{ num -> num * num }’ şeklinde yazdık. Bu bir Lambda ifadesidir. Örneğimizi listeyi yazdırarak bitirirken gelin Lambda ifadelerine hızlıca bir bakış atalım.

Lambda İfadeleri

Lambda ifadeleri, sadeleştirilmiş isimsiz fonksiyonlardır. Bu ifadeleri kullanarak istenilen sayıda parametre geçilebilen ve değer döndüren isimsiz yerel fonksiyonlar oluşturabilirsiniz. Bu ifadeler genellikle basit işlemleri bildirmekte kullanılır.

val variableName: (parameters) -> returnType = { arguments -> code }

variableName: Lambda ifadesine referans olacak olan değişkendir. Kotlin dili bize bu ifadeyi değişkene atayabilmemize olanak sağlar.

paramaters -> returnType: Parametreler parantez içine arasında virgül olacak şekilde yazılır. Ardından ‘->’ işareti eklenir ve fonksiyonun dönüş tipi yazılır.

{ arguments -> code }: Lambda ifadesinin gövde kısmıdır. Argümanlar virgül ile birbirinden ayrılır ve ‘code’ kısmı bu fonksiyonu çağırdığımızda çalışan kısımdır.

Somut örneklerle göstermek gerekirse:

Not: Tanımladığınız Lambda ifadesi tek bir parametreye sahip ise bunu ‘it’ anahtar sözcüğü ile ifade edebiliriz.

Örnek Lambda İfadesi Yapısı

Gelin şimdi bir örnekle daha Higher-Order fonksiyonu ve Lambda ifadesini kullanarak kodumuzu nasıl daha anlaşılır ve kısa yapabileceğimize bakalım.

Öncelikle bu örneğimizde elimizde isimlerin olduğu bir liste olacak ve nihai amacımız bu isimlerin harflerini büyük harflere dönüştürmek olacak. Farkı görmek adına öncelikle bu fonksiyonu Higher-Order fonksiyon ve Lambda kullanmadan tanımlayalım.

Şimdi de yukarıda tanımladığımız fonksiyonu öğrendiğimiz yöntem ile yazalım.

Gördüğünüz üzere fonksiyonumuz parametre olarak bir adet String listesi ve ‘process’ isminde bir fonksiyon alır ve yine String tipinde bir liste return eder. Parametre olarak verdiğimiz fonksiyon ise bir adet String tipindeki değişkeni parametre alarak yine bize bir String değişkeni return eder. ‘map’ fonksiyonu yardımıyla, Higher-Order fonksiyonu çağırırken tanımlayacağımız Lambda ifadesinde, her bir liste elamanına istediğimiz işlemi uygulayabileceğiz.

Bu şekilde kodumuzu daha etkin yazmış olduk.

Higher-Order Fonksiyonu Kullanarak Başka Bir Fonksiyon Return Etmek

Hatırlarsanız Higher-Order fonksiyonlarını tanımlarken, parametre olarak başka bir fonksiyonu verebileceğimiz gibi, bu fonksiyonların başka bir fonksiyonu return edebilceğini de söylemiştik. Peki bu ne zaman işimize yarayacak? Diyelim ki bir işlem yaptırmak istiyorsunuz. Fakat bu işlem duruma göre değişiklik gösterebiliyor. İşlemi yapmak istediğiniz fonksiyonun özelleştirebilir olması gerekir değil mi? Tekrar tekrar her durum için yeni bir fonksiyon tanımlamak hiç pratik olmaz. İşte böyle durumlarda bir fonksiyon return eden high-order fonksiyona ihtiyacınız olabilir.

Higher-Order fonksiyonlar parametre olarak fonksiyon alabildiği gibi özelleştirilmiş fonksiyonları da return edebilir.

Basit bir örnekle gösterelim:

Bu örneğimizde createGreeting high-order fonksiyonumuz ‘hour’ adında tek bir parametre alır ve bir adet String parametre alan ve String return eden bir fonksiyonu return eder. Bu return edilen fonksiyon basitçe verilen saat değeri ve isime göre selamlama yapar. Main kısmında ‘createTimeGreeting’ fonksiyonu çağrılırken saat argümanı verilerek özelleştirilmiş greet fonksiyonu üretilir. Ardından isim argümanı verilerek üretilen fonksiyon kullanılır.

Sonuç

Özetle bu makalede, Kotlin programlama dilinde Higher-Order fonksiyonların ve Lambda ifadelerin nasıl kullanılabileceğini anlattık. Higher-Order fonksiyonlar, bir fonksiyonu parametre olarak alan veya bir fonksiyonu döndüren fonksiyonlardır. Bu, kodu daha okunaklı ve anlaşılır hale getirir ve bu fonksiyonlar çok sayıda kodun yerine kullanılabileceğinden, kod daha kısadır. Lambda ifadeleriyse, herhangi bir sayıda parametre alan ve bir değer döndüren basitleştirilmiş anonim fonksiyonlardır. Bu ifadeler genellikle basit işlemleri belirtmek için kullanılır ve Higher-Order fonksiyonlarla birlikte, daha verimli ve kısa kod oluşturmak için kullanılır.

Umarım ilk yazımı beğenmişsinizdir. Okuyup zaman ayırdığınız için teşekkürler :)

Referanslar

Ayrıca bu konuda daha fazla bilgi sahibi olmak için aşağıdaki linkleri kullanabilirsiniz.

--

--