Kişisel web sayfamda yazılım, teknoloji ve genel hayat hakkında paylaşımlar yapmayı hedefliyorum.

Kotlin Programlama Dersleri – Higher Order Functions

Bu yazıda, Kotlinin büyük nimetlerinden biri olan Higher Order Functions ve kullanımına değineceğim. Ama öncesinde Lambda konusuna bakalım.

Lambda

Bazen sadece bir alanda kullanacağımız fonksiyonlara ihtiyacımız olur. Sadece bir yerde kullanmak için de bir fonksiyon tanımlamak gereksiz olacaktır. İşte bu senaryoda karşımıza lamda ifadeler çıkıyor.

Toplama işlemine normal fonksiyon ve lambda ile bakalım.

Bir lambda ifadesinin yapısı:

(parameter1,parameter2..) -> returnType = body

Higher Order Functions

Kotlin fonksiyonlar First Class Citizendir yani; fonksiyonlar bir değişkende ya da veri yapılarında saklanabilir, diğer fonksiyonlara parametre olarak verilebilir – geri dönüş tipi olabilir. Bu özellikleri ise lamda kullanımı ve higher order fonksiyonlar ile gerçekleştirebiliriz.

Yukarıdaki örneği incelediğimizde, Feed classının updateFeed fonksiyonuna parametre olarak bir higher order function yollayacağımızı söylüyoruz. Ve fonksiyonun içinde de parametreden aldığımız fonksiyonu çağırıyoruz.

Oluşturduğumuz fonksiyonu aslında iki parçaya ayırdık. İlk parçası fonksiyonun çağrıldığı kısım. Diğer parça ise body kısmı. Yani fonksiyonun ne yapacağını yazdığımız kısım. Bu kısmı ise fonksiyonu ana kod akışında çağırdığımız yerde belirtiyoruz.

Bir higher order function kullanımının birden fazla yolu vardır:

Eğer higher order fonksiyonumuz, fonksiyonumuzun son parametresinde isteniyorsa fonksiyonun dışında yazmamız daha güzel bir çözüm olacaktır. Higher Order fonksiyonumuzda parametreler ile çalışıyorsak, eğer biz lambda ile isimlendirme yapmazsak bize it keywordünü döner. Aşağıdaki kodlarda iki örnek de mevcuttur.

Genelde bu senaryoları Interface kavramı ile gerçekleştirirken; Kotlinde higher order fonksiyonlar ile daha estetik ve kolay biçimde ele alabiliyoruz. Gerçek dünyada kullanımlarına bir örnek verecek olursak; aklıma gelen ilk örnek onClick fonksiyonları ve try – catch blokları oluyor. Android tarafında bir recyclerview elemanına tıklanma sonucunda ne olacağını, higher order fonksiyonlar ile recyclerviewi kurarken verebiliriz.

Kotlinde bir Higher Order Function default olarak noinline olarak tanımlanır. Yani o fonksiyonu çalıştırmak için nesne oluşturulur. Ama inline kullanımında nesne oluşturulmadan fonksiyonun içi işlenecektir. Bu da bize ciddi performans kazancı sağlayacaktır. inline/noinline/crossinline konusu bir başka yazıda daha derinlemesine incelenecektir.

Bu yazının da sonuna geldik. Umarım faydalı bir anlatım olmuştur. Görüşmek üzere 👋

Share

You may also like...

Bir cevap yazın

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