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
Yorum Gönder