Pure function
- Kotlin kursu
- İleri seviye
- Ders 50/83
- 5 dk
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
// square fonksiyonu: n * n döndürür
// main'de iki sayının karesini yazdırÖrnek çözüm
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
fun double(n: Int): Int {
____
}
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 |