Kotlin Extension Fonksiyon ve Infix Fonksiyon

Merhaba Arkadaşlar,
Mobilhanem.com üzerinden anlattığımız Kotlin Dersleri‘mize bu dersimizde Kotlin Extension Fonksiyon ve Infix Fonksiyondan bahsedeceğiz.

Extension Fonksiyon

Extension fonksiyon bize sınıfların işlevlerini kodlarına dokunmak zorunda kalmadan istediğimiz şekilde genişletmemize yarayan bir fonksiyondur.

Ne demek istedi bu dediniz duydum 🙂

Birde şu şekilde anlatmaya çalışayım. Kotlin’deki extension fonksiyonları, yeni fonksiyonlar ekleyerek bir sınıfın işlevselliğini genişletmemize yardım eder. Sınıfın bize ait olması, yani bizim tanımlamış olduğumuz bir sınıf olması gerekmiyor. Hemde bu işlemi yaparken mevcut sınıfı miras almamız(kalıtım) yani extend etmemiz gerekmiyor yada herhangi bir design pattern kullanmamız gerekmiyor.

Şuan biraz daha oturdu açıklamam ama hala soru işaretleriniz mevcut biliyorum. Bir örnek vererek devam edeyim.

Örnek 1:

Bir uygulamada verilen sayının her zaman 3 ile çarpılmasına ihtiyacınız olduğunu düşünelim.

Bunu aşağıdaki gibi yapabilirsiniz:

fun carp(sayi: Int) : Int{
    return 3*sayi
}


carp(5) //bu method geriye 15 değerini dönecektir

Peki yukarıdaki işlemi Extension Fonksiyon ile nasıl yapardım:

fun Int.carp(): Int {
    return this * 3
}


5.carp() //15 değerini döner

Ne yaptık kısaca açıklayalım. Öncelikle Int.carp() şeklinde Int class’ına yeni bir fonksiyon ekledik. Bu fonksiyonumuzun adı carp() ve artık bunu tanımladığımız yerde int bir değere.carp diyerek methodumuzu çağırabiliriz.
Yukarıdaki örnekte 5.carp() diyerek int class’ına yeni tanımladığımız carp fonksiyonunu çağırmış olduk. Fonksiyounun içindeki this değeri hangi int değerin .carp() fonksiyonunu çağırdıysak onu dönecektir. Yani Yukarıda 5.carp() dediğimiz için this değeri 5’i dönecektir.

Örnek 2:

Yukarıda verilen sayıyı 3 ile çarpan fonksiyonu yazmıştık şimdi ise 3 yerine istediğimiz sayı ile çarpan Extension Fonksiyonu yazalım.

fun Int.carp(sayi: Int) : Int{
    return this*sayi
}


5.carp(7) //35 döner

5.carp(7).carp(2).carp(3) //210 döner , carp fonksiyonumuz bir int değer döndüğü için direk .carp() diyerek tekrar çağırabiliriz.

Örnek 3:

Farklı bir örnek ile devam edelim. Bir String değerimizin sonuna istenilen bir stringi ekleyelim.

fun String.ekle(deger: String): String{
    return (this+deger)
}


"Mobilha".ekle("nem") //Mobilhanem

Infix Fonksiyon

Infix fonksiyonlar için özelleştirilmiş Extension Fonksiyon diyebilriz. Hatırlarsınız Kotlin Range Kullanımı dersimde downTo, Step , Until gibi fonksiyonları aşağıdaki gibi kullanmıştık.

4 downTo 1
40 step 3
1 until 10

Gördüğnüz gibi bu fonksiyonların kullanımı diğerlerinden biraz daha farklı. Fonksiyonu kullanırken değişkenimizin sonuna “.” koyuyorduk. Infix fonksiyonlarda ise buna ihtiyaç duymuyoruz. Kotlinde bu tip fonksiyonlara Infix fonksiyon deniyor.

Nasıl tanımlarız Infix fonksiyonu ve nasıl kullanırız yukarıdaki 2 örnek üzerinden anlatalım.

Örnek 1:

infix fun Int.carp(sayi: Int) : Int{
    return this*sayi
}

5 carp 3 // fonksiyonu direk bu şekilde kullanıyoruz

Infix fonksiyon olduğu zaman artık fonksiyonumuzu boşluk bırakıp direk çağırabiliyoruz. Tanımlarken tek farkı fun kelimesinden önce Infix koymak.

Örnek 2:

infix fun String.ekle(deger: String): String{
    return (this+deger)
}


"Mobil" ekle "hanem" //mobilhanem

Sonuç:

Extension ve infix fonksiyonlar, kodumuzun kolay okunması ve daha az kod yazmamız için çok yararlı olabilir. Çünkü, uygulama içinde ki ihtiyaçlarımıza özel ve orijinal kodun bir parçası gibi olan fonksiyonları ekleyebilmemiz mümkün.

Kotlin Eğitimi yazı serimizde bu dersimizde sizlere Kotlin Extension Fonksiyon ve Infix Fonksiyon kullanımını örnek kodlar üzerinden anlatmaya çalıştık. Ders hakkında görüş ve yorumlarınızı konu altından ve Slack üzerinden sorabilirsiniz.

Tüm Kotlin derslerimiz için tıklayınız.

80

Taha Kırca

iOS & Android & Apple Watch Developer, Mobilhanem.com yazarı, Karadeniz Uşağu, Ordu Sevdalısı

3 Yorum

  • Örnek 2 deki kodda bir problem var. “return 3*sayi” yerine “return this*sayi” olmalı. 35 ve 210 değerleri bu şekilde oluşmuyor.

  • infix örneklerinizde kod penceresi html strong etiketini okuyamıyor bi bakın isterseniz, yazı gayet açıklayıcı teşekkürler

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?