CodeBlanks Logo Icon CodeBlanks

Pure function

Saf fonksiyon ve yan etki kavramlarını öğrenirsin.

Pure function

Bir pure function, aynı girdi için her zaman aynı çıktıyı verir ve yan etkisi yoktur. Global durumu değiştirmez, I/O yapmaz. Testi kolaydır ve önbelleğe uygundur.

Örnek: fun double(n: Int): Int { return n * 2 }. Bu fonksiyon saf bir fonksiyondur; aynı n için her zaman aynı sonucu verir. Oysa fun now(): Long { return System.currentTimeMillis() } saf değildir; her çağrıda farklı değer döndürür. Fonksiyonel programlamada saflık esastır.

Yan etki ve deterministik

Bir fonksiyonun yan etkisi, dış durumu değiştirmesi veya I/O yapmasıdır. Deterministik, aynı girdi için her zaman aynı çıktıdır. Saf fonksiyonlar her ikisini de sağlar.

Örnek: fun square(n: Int): Int { return n * n } hem yan et kisiz hem deterministiktir. Oysa fun log(msg: String) { println(msg) } yan etkilidir (I/O yapar). Yan etkisiz fonksiyonlar paralel çalışmada güvenlidir; lock gerektirmez.

Uygulama Pure square fonksiyonu yaz

square(n: Int): Int adında saf fonksiyon tanımla; gövdesi n * n döndürsün. main içinde println(square(5)) ve println(square(7)) çağrılarını yaz.

Başlangıç kodu

Main.kt
// square fonksiyonu: n * n döndürür
// main'de iki sayının karesini yazdır

Örnek çözüm

Main.kt
fun square(n: Int): Int {
    return n * n
}

fun main() {
    println(square(5))
    println(square(7))
}

Beklenen çıktı

25
49

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Pure function gövdesini tamamla

Soru
fun double(n: Int): Int {
    ____
}
Cevap
fun double(n: Int): Int {
    return n * 2
}

Açıklama: return n * 2 saf ve deterministiktir.

2 Aşağıdakilerden hangisi saf bir fonksiyondur?

  • fun print(s: String) { println(s) }
  • fun double(n: Int) = n * 2 Doğru cevap
  • fun time() = System.currentTimeMillis()
  • fun read() = readLine()

Açıklama: double(n) yan et kisiz ve deterministiktir.

3 Pure function parçalarını eşle

Kavram Anlamı
double(n: Int) Saf fonksiyon
System.currentTimeMillis() Yan etki
return n * 2 Deterministik gövde
println(msg) I/O yan etkisi

İleri seviye bölümündeki tüm dersler