Kotlin Fonksiyonlar (Basics-Function Scope-Infix Function-Extension Function-Higher Order Function)
Herkese Selamlar, bugün sizler ile Kotlin Fonksiyonlar üzerine sohbet edeceğiz. Çaylar hazırsa hadi başlayalım.
Foksiyon’lar, aynı satır kodların farklı yerlerde çalışacağı zaman oluşacak kod tekrarının önüne geçer. Ayrıca bizleri kod karmaşasından kurtarıp yazacağımız kodlarda bizlere çokça esneklik sağlar. Fonksiyonlar tüm programlama dillerinin vazgeçilmezidir.
Basics
Fonksiyonları tanımlarken ilk önce “fun” keyword’ü ile başlarız daha sonra fonksiyona vereceğimiz ismi belirtip parametre parantezlerini açarız. Parametre parantezlerinin içerisine alınacak veri tipleri ve isimleri belirtildikten sonra “:” ile geri dönüş değeri ifade edilir. Geri dönüş değeri belirtilmez ise varsayılan olarak “Unit” tipi geri döndürülür. Fonksiyon tanımlaması yapılırken “val-var” gibi betimleyiciler kullanılmaz.
Fonksiyonlar çağrılırken fonksiyon ismi ve parametreleri kullanılır. Fonksiyon bir geri dönüş değerine sahip ise bir değişkene bu sonuç aktarılabilir.
Class içerisindeki fonksiyonlara ulaşmak için “classAdi.funAdi” tanımlaması yapılır.
Fonksiyon tanımlamaları yapılırken değişkenlere default değer atanabilir bu değerler fonksiyon çağırılırken belirtilmesi zorunlu alanlar halinde olmazlar. Böylelikle default değer ataması function overload işlemine karşılık gelmektedir. Biraz daha açacak olursak, aynı isime sahip fakat aldığı parametreleri farklı olan fonksiyon tanımlaması olayından bizleri kurtarır. “Named Arguments” ’ler ile parametre gönderimleri yaparken veri karışıklığını ve hatasını önleriz. Böylelikle fonksiyon çağırımı yapılırken parametreler farklı sıralarla da verilebilir.
Fonksiyon çok uzun sayıda parametre alacaksa fonksiyon parametresi olarak vararg değişken tipi tanımlanabilir. Vararg ile birden fazla aynı parametreye veri gönderimini sağlamış oluruz. Aynı fonksiyon içerisinde birden fazla vararg tanımlanamaz. Fonksiyon’un vararg parametresine değişken olarak array gönderilir. Array tipinde bir veri gönderilmesi halinde “*arrayOf” kullanılması gereklidir. Bu değişkeni de array’e erişir gibi kullanabiliriz.
Bir fonksiyona return tanımlamasından ziyade “=” ile return edeceği değer yazılabilir.
Function Scope
Bir fonksiyon herhangi bir class içerisinde tanımlanmamış ise fonksiyon olarak ifade edilirken bir class içerisinde tanımlanmış ise metod adını alır.
Kotlin’ de fonksiyon içerisinden fonksiyon tanımlayabiliriz. Bu fonksiyonlara “Local Function” denir. Eğer bir fonksiyona ulaşılmasını istemezsek bu tür tanımlama yapabiliriz.
Bir Fonksiyon Generic tipinde bir değer alıyorsa bu fonksiyonlara “Generic Function” denir.
Infix Function
Kod yazımını güzelleştirmek için kullanılabilir. Nokta kullanımını kaldırır. Bir fonksiyonu infix hale getirebilmek için 5 şart vardır.
- Infix keyword’ü ile başlamalı.
- Metod türünde olmalı yani bir class içerisinde veya extension fonksiyon olmadır.
- Sadece bir parametre alabilir bu parametre vararg olamaz.
- Parametre tanımlaması yaparken default değer veremeyiz.
- Boş parametre alamaz.
Extension Function
Bir class’a ek özellik katmayı sağlar.
Extension Function’lar bir classın içerisinde oluşturulur ise sadece o class için kullanılır. Global çağırım yapılamaz.
Fonksiyon içerisinde this ifadesi extension yapılan ifadenin değerini verir.
Extend edilebilir bir class içerisine open extension fonksiyon yazılırsa, extend ettiğimiz class içerisinde bu extension fonksiyonlar override edilebilir.
Higher Order Function
Bir fonksiyona parametre olarak verilebilen fonksiyonlara higher order function denir.
- Higher Order Function’lar ile expression tanımlama yapılabilir.
- İsimsiz tanımlamaları (anonymous function), Higher Order Function olarak normal bir fonksiyona parametre tipinde verebilirsiniz.
- Fonksiyon parametreleri girilirken function scope içerisindeki High Order’ı bir değişkene atamadan da tanımlayabilirsiniz.
- Bu tür fonksiyonlar birden fazla parametre içeriyorsa “,” ile ayrılmalıdırlar.
- Burada ki isimlendirmeyi dilediğiniz gibi yapabilirsiniz.
- Eğer higher order function tek bir parametre içeriyorsa bu parametre “it” ile ifade edilebilir.
- Higher order function’lara parametre tanımlanırken değişken adını vermeden sadece veri tipini belirterek fonksiyon oluşturulabilir.
Eğer bir fonksiyon parametreleri içerisinde bir Higher Order Function son parametre olarak tanımlandıysa, parantezlerin dışında fonksiyon body tanımlaması yapılabilir. Kod okunabilirliğini arttırır.
Kotlin Fonksiyonları anlatmaya çalıştığım yazımın sonuna geldik umarım okurken faydalı bilgiler edinebilmişsinizdir.
Teşekkürler..