Kotlin - 13 - Fonksiyonlar (1. Bölüm)

Kotlin de fonksiyon tanımı “fun” anahtar kelimesi ile yapılır, kullanımı yani çağırımı ise daha standart bir yol ile alışıla gelen tarzdadır.


Parametreler pascal notation’ı kullanılarak tek tek tanımlanmalıdır. İnitial değerler parametre tanımı esnasında yapılabilir. İnitial değer atamaları overload ihtiyaçlarını azaltacaktır, Ancak dikkat edilmesi gereken nokta overload yapılan method larda initial değer desteklenmez, method imza kısmından initial değer atama kısmı kaldırılmalıdır. Initial değer içeren bir değer kullanılacak ise, named parameter olarak değerler geçilmelidir.



Named parameter kullanımı, çok parametreli method ların çağrılması adımında kod’un okunaklı olması adına oldukça faydalı olacaktır. Sıralı parametreler named argument olmaksızın kullanılabilir ancak arada atlanan parametre olduğunda artık kullanılamaz.



Eğer fonksiyonumuz dönüşsüz olacaksa tipini “: Unit” olarak tanımlayabiliriz, ya da Unit opsiyonel bir tip olduğu için hiç yazmadığımız durumda bu anlama gelecektir. Kısacası Alışık olduğumuz “Void” anahtar kelimesine tekabül eder, ancak diğer tiplerin aksine opsiyoneldir. Fonksiyon dönüşü tek satırlık basit bir ifade olacak ise, süslü parantezler kullanılmaksızın direk “= x*2” şeklinde yazılabilir,

Kısaca şöyle söyleyebiliriz, tek satırlık ifade dönüşü söz konusu olduğunda tip tanımı yapılmayabilir, ancak body bloğu olan yani süslü parantezler içinde karmaşık ifadeler ya da daha uzun satırlar olduğunda Dönüş tipi mecburen yapılmalıdır, ancak bu durumun istisnası “Unit” tipidir.


“varargs” Anahtarı:
“varargs” dinamik sayıda bir liste input olacağını ifade etmek için kullanılan anahtar kelimedir. (normal şartlar altında son input değeri için kullanılır.)


“infix” notasyonu:
Fonksiyonlar, ayrıca infix notasyonu ile kullanılabilir, ancak:
-          Member fonksiyon ya da extension fonksiyon olurlarsa
-          Tek parametreleri var ise
-          “infix” anahtar kelimesi ile işaretlendiyse.



Kotlinde fonksiyonları en üst seviyede tanımlayabilirsiniz, yani fonksiyonları toplamak adına class yaratmanız gerekmez. Ancak C# ya da JAVA gibi yerel, member yada extension olarak tanımlayabilirsiniz.


Yerel Fonksiyonlar:
Kotlinde bir fonksiyonun içinde yerel bir fonksiyon daha tanımlanabilir, yerel fonksiyon dış fonksiyonun local değişkenlerine de ulaşabilir.



Member Fonksiyon:
Bir class yada obje içinde tanımlanan Fonksiyonlardır. Class veya objenin initialize edilmesi sonrası “.<fonksiyonAdi>(<inutDegerler>)”  şeklinde erişilebilir.




Generic Fonksiyonlar:
Grenerik parametre alan fonksiyonlar tanımlanabilir, bu tanımlar “<>” ifadeleri ile yapılabilir.



Tail recursive (Kuyruk döngülü) Fonksiyonlar:
“tailrec” anahtar kelimesi ile klasik döngülerle kurulabilecek algoritmaları, kendini çağıran methodlarla yapabilirsiniz, böylece compiler kurulan döngüyü optimize eder daha performanslı bir yapınız olur. Fonksiyonun “tailrec” için uygun olabilmesi için son adımda kendini çağırıyor olmalı.



Yorumlar

Yazılar

Kotlin - 1 - Giriş

Genesys Nuance-ASR Entegrasyonu Port Kullanımı

Kotlin - 3 - Paket tanımı ve Import