Kotlin’de Fonksiyonlar (Basics)
Fonksiyonlar istediğimiz bazı işlemleri yapmayı sağlayan kod bloklarıdır. Örneğin iki sayının toplanması, çarpılması veya iki String ifadenin birleştirilmesi gibi ve daha bir çok işlemi içerisinde gerçekleştirebileceğimiz yapılardır. Çok önemli bir özelliği olarak kod tekrarından da kurtarır.
Fonksiyon tanımı sırasıyla şu şekildedir;
- fun anahtar sözcüğü ile tanımlanır.
- Fonksiyonun ismi verilir.
- Parametre parantezleri açılır ve parametre verilecekse parametre ismi : parametre tipi yazılır.
- : operatörü ile geri dönüş değeri yazılır. Geri dönüş değeri verilmeyen fonksiyonlar “Unit” tipini geri döndürür.
- Fonksiyon body’si açılır ve kapatılır.
Fonksiyonlara isim verirken yaptırmak istediğimiz işlemi bildirecek şekilde isimlendirmemiz gerekir.
Çağırımı;
Fonksiyon çağırılırken ismi ve varsa parametreleri yazılır.
Eğer geri dönüş değeri varsa bir değişkene atanabilir veya direk çıktı olarak ta yazdırılabilir.
Bir class’ın fonksiyonu çağırılırken ise “.” kullanılır.
Math.pow(2.0, 3.0)
Default arguments
= ile fonksiyon parametrelerini default değer verilebilir. Default değer vermek bizi Function Overloading yapmaktan kurtarır.
Default değeri olan parametrelere sahip bir fonksiyon çağırılırken, default değeri olan parametrelere değer atamak zorunlu değildir. Default değeri olan bu parametreler opsiyonel parametrelerdir. Default değeri olan parametreler değer atanmadan fonksiyon çağırılacaksa parametre sırası değişir ve bu durumda ide’ye hangi parametreye değer atandığını söylemek için Named Arguments’leri kullanmak gerekir.
Örneğin;
2. çağırımda size= 8 yazmayıp direk 8 yazsaydım ide bunu normaliseCase parametresinin girdisi sanacaktı ve hata verecekti.
Default değer sayesinde aşağıdaki fonksiyonları yazmak zorunda kalmayız.
Default değeri olan fonksiyonlar java sınıflarında çağırılacaksa eğer, fonksiyonun başına @JvmOverloads annotaion’ını eklemek gerekiyor. Böylece yazılan kod Jvm’e hazır hale getirilirken, ilgili fonksiyonun tüm varyasyonları yazılır.(Overload edilir)
Veriable number of arguments (Vararg)
Fonksiyonun çok sayıda parametresi olacaksa vararg kullanılabilir. Bu sayede fonksiyon tek sayıda parametre alıyor gibi gözükse de çok sayıda parametre alabilir. Bu parametrelere array’a erişir gibi erişebilirsiniz.
- Aynı fonksiyon içerisinde sadece bir tane vararg kullanımına izin vardır. Birden fazla vararg parametre tanımlanması yapılırsa hata verir.
Vararg parametresine array olarak girdi yapılmak istenirse;
- * ifadesi spread operatörüdür. Diğer programlama dillerindeki pointerlar demek değildir. Kotlin’de pointer kavramı yoktur!
Unit-returning functions
Bir fonksiyon bir değer döndürmüyorsa bu fonksiyonun dönüş değeri Unit olur. Unit yalnızca bir değeri olan bir türdür. Java’da ki void anahtar kelimesine karşılık gelir .Fonksiyon tanımlarken bunun yazılmasına gerek yoktur.
Explicit return types
String, Int gibi değişken tiplerinde geri dönüş değeri olan fonksiyolardır.
Single-expression functions
Bir fonksiyon tek bir ifade döndürdüğünde, süslü parantezler atılabilir ve bir = simgesinden sonra gövde belirtilebilir.
Function Scope
Top-Level Functions
Bir fonksiyon herhangi bir sınıfın içerisinde değil de bir dosyanın içerisinde boşlukta tanımlanıyorsa bu top level fonksiyon olur.
Member Functions
Bir sınıfın içerisinde tanımlanan fonksiyonlara üye fonksiyonlar denir.
Local Functions
Kotlin’de fonksiyon içinde fonksiyon tanımı yapılabilir. Bu fonksiyonlara Local Functions denir.
Kullanımına sebep olarak;
- Yazıdığınız fonksiyonun kendi sınıfınız dahi hiçbir yerde çağırlmasını istemeyebilirsiniz.
- Bu fonksiyonun herhangi bir başka fonksiyon ya da sınıf için değiştirilmesini istemeyebilirsiniz.
- Reflection ile fonksiyonlarınız erişilirken gizli kalsın isteyebilirsiniz.
Tanımının üzerinde çağırılamaz!
Generic functions
Bir fonksiyon Generic tip alıyorsa, Generic Function olarak adlandırılır.
Bu yazımda fonksiyon tanımları, çağırımı, parametreleri türleri gibi genel konulara yer verdim. Bir sonraki yazımda Infix, Extension, Higher Order fonksiyonları anlatmaya çalışacağım. Görüşmek üzere.
Kodla kalın :)