Kotlin’de Fonksiyonlar

Kotlin’de Fonksiyonlar

Herkese merhaba, bugünkü yazımızda Kotlin’de fonksiyon tiplerine değineceğiz. Fonksiyonlar; kodları bir arada tutan, bir işlemi gerçekleştiren ve bir değer döndürebilen kod bloklarıdır. Kotlin’de fonksiyonlar fun anahtar kelimesiyle deklare edilir ve adlandırılmış ya da varsayılan değerler ile bağımsız değişkenler alabilirler. Şimdi fonksiyon tiplerine göz atalım.

main() Fonksiyonu

Bu fonksiyon bir Kotlin programının yürütülmesi için oluşturulması gereken başlangıç adımıdır.

Bir Kotlin dosyasını main() fonksiyonu olmadan yazarsak bunu sadece package (paket) ya da library (kütüphane) olarak kullanabiliriz. Yani bir Kotlin dosyasının çalışmak için main() fonksiyonuna ihtiyacı vardır.

Kotlin’de her fonksiyon açıkça belirtilmese bile geriye bir değer döndürür. Örneğin; main() fonksiyonu ‘kotlin.Unit’ tipini döndürür. Ancak gördüğünüz üzere fonksiyonu oluştururken dönüş tipine dair herhangi bir şey belirtmedik. Unit fonksiyon kavramına detaylıca göz atalım.

Unit Returning Functions (Unit Döndüren Fonksiyonlar)

Unit, Java’da bulunan void’e karşılık gelir. Herhangi anlamlı bir değer döndürmeyen bir fonksiyonun dönüş tipi Unit olarak belirtilebilir fakat bunu belirtmek isteğe bağlıdır.

Bu iki fonksiyon arasındaki tek fark ilk fonksiyonda dönüş tipi Unit olarak belirtilmiştir. Yukarıda bahsettiğimiz gibi bunun belirtilmesi zorunlu değildir ve iki fonksiyon da aynı anlama gelmektedir.

Ayrıca fonksiyonlar şunlara sahip olabilir:

  • Default parameters
  • Required parameters
  • Named arguments

Default Parameters (Varsayılan Parametreler)

İstersek ‘=’ operatörü kullanarak fonksiyonlara default değer ataması yapabiliriz. Bu işlem fonksiyonları overload etmemize olanak sağlar. Bu sayede fonksiyonları tekrar tekrar farklı şekillerde kullanabiliriz.

Required Parameters (Gerekli Parametreler)

Default olarak belirtilen herhangi bir parametre yoksa bağımsız bir değişken tanımlamak gerekir.

Named Arguments (İsimlendirilmiş Argümanlar)

Kodun okunabilirliğini arttırmak için required parameters yerine named arguments kullanılabilir. Fonksiyon tanımlarken sırayla atama yapmıyorsak hangi parametreye değer atandığının belirtilmesi hataları önleyecektir.

Single-expression Functions

Kodu kısaltmak ve daha okunabilir hale getirmek için compact versiyon kullanılabilir.

Lambda Function (Lambda Fonksiyonu)

Lambda adlandırılmamış bir fonksiyonu ifade eder. Normal isimlendirmenin yanında Kotlin, lambda fonksiyonlarını da destekler. Lambda normal bir fonksiyonun yaptığı işi yapar. İsimlendirilmiş fonksiyonlar gibi lambdalar da parametrelere sahiptir. Lambda bir değişkene atandığında onu normal bir fonksiyon gibi çağırabiliriz.

Higher-order Function (Yüksek Dereceli Fonksiyonlar)

Yüksek dereceli fonksiyonlar parametre olarak bir fonksiyon alabildiği gibi bir fonksiyonu geri de döndürebilir. Parametre olarak verilecekleri zaman yapıyı şu şekilde kurarız:

fonksiyonAdı: (parametreAdı: parametreTipi) -> fonksiyonDönüşTipi

getCourse, higher-order fonksiyonun parametresi oldu. Parametre olarak gönderdiğimiz fonksiyonlar tanımladığımız ana fonksiyonun içinde çağırılmak zorundadırlar.

Passing a Function Reference (Bir Fonksiyona Referans Verme)

‘::’ operatörü kullanarak isimlendirilmiş fonksiyonu başka bir fonksiyona argüman olarak iletebiliriz. Bu operatör fonksiyonu referans bir argüman olarak ilettiğimizi fonksiyonu çağırmadığımızı gösterir.

message adında bir fonksiyon oluşturduk ve bu fonksiyona parametre olarak code fonksiyonunu ilettik. Sonrasında main fonksiyonu içerisinde code1 adında bir lambda fonksiyonu oluşturduk. Bu fonksiyon string tipinde bir input alacak ve bu ifadeyi tersine çevirerek yazdıracak. Yani ‘SF1F23’ ifadesinin tersten yazılmış halini verecek.

code2 adında dönüş tipi string olan başka bir fonksiyon oluşturduk ve bunu da main fonksiyonu içerisinde kullandık. code2 fonksiyonumuz input değerini küçük harflere çevirerek yazdırma işlevini yapıyor. Main fonksiyonu içerisinde message fonksiyonunu çağırırken code2 fonksiyonunu ise yukarıda belirttiğimiz gibi bir fonksiyon içerisinde argüman olarak kullandık.

Last Parameter Call Syntax

Kotlin’de işleme alınacak parametrenin son parametre olması tercih edilir. Yani bir lambdayı parantez içine koymadan fonksiyon parametresi olarak iletebiliriz. Bu işlem kodu daha okunabilir hale getirir ve last parameter call syntax olarak adlandırılır.

Bu iki tanımlama arasında bir fark yoktur. Kotlin’de ikinci kullanım tercih edilir.

Bu yazımızda fonksiyon tiplerine ve tanımlamalarına örneklerle göz atmış olduk. Bir sonraki yazımızda nesne tabanlı programlamaya değineceğiz ve böylece Kotlin serimizin sonuna gelmiş olacağız. Sonraki adım ise android programlamaya giriş olacak ve ilk mobil uygulamamızı oluşturacağız. Bir sonraki yazıda görüşmek üzere, hoşça kalın.

Damla Çim
yazı

Ben Damla Çim. Bolu Abant İzzet Baysal Üniversitesi'nde Bilgisayar Mühendisliği okuyorum. Hobi olarak sokak fotoğrafçılığı ile ilgileniyorum ve boş zamanlarımda yazılım sektöründe kendime seçtiğim alan doğrultusunda blog yazıları yazıyorum.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir