CodeBlanks Logo Icon CodeBlanks

Contracts

Kotlin contracts ile derleme zamanı güvencesi öğrenirsin.

Sözleşmeler (contracts)

Contracts, bir fonksiyonun çağrıldıktan sonra hangi koşulların geçerli olacağını derleyiciye bildiren taahhütlerdir. Kotlin'in kotlin.contracts API'si ile yazılır; deneysel bir API'dir.

En yaygın kullanım: bir fonksiyon döndüğünde bir değerin null olmadığını şöylemek. Örnek: contract { returns() implies (x != null) }. Böylece çağıran yerde ek bir !! ya da if (x != null) bloğu gerekmez. Contracts yalnızca derleyiciye bilgi verir; çalışma zamanında ek kod üretmez.

returns() implies

Bir sözleşme bloğu contract { ... } ile açılır. En sık kullanılan madde returns() implies (koşul) şeklindedir.

Örnek: contract { returns() implies (x != null) }. Bu sözleşme şunu söyler: bu fonksiyon normal döndüğünde x null değildir. Böylece requireNonNull(name) çağrısından sonra derleyici name'i String türünde kabul eder. Sözleşme yanlışsa çalışma zamanında hata alınır; bu yüzden sözleşme yazarken dikkatli olun.

Uygulama requireNonNull fonksiyonunu yaz

requireNonNull(x: String?): String fonksiyonunu tanımla. İçinde contract { returns() implies (x != null) } sözleşmesi olsun. main içinde requireNonNull(name) çağrısından sonra println(name.length) yaz.

Başlangıç kodu

Main.kt
import kotlin.contracts.*

fun requireNonNull(x: String?): String {
    // sözleşmeyi ekle
    return x!!
}

fun main() {
    val name: String? = "Ayşe"
    requireNonNull(name)
    // uzunluğu yazdır
}

Örnek çözüm

Main.kt
fun requireNonNull(x: String?): String {
    contract { returns() implies (x != null) }
    return x!!
}
fun main() {
    val name: String? = "Ayşe"
    requireNonNull(name)
    println(name.length)
}

Beklenen çıktı

4

Soru ve cevaplar

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

1 Bir contract ne işe yarar?

  • Çalışma zamanında hata fırlatır
  • Async çağrıyı bekletir
  • Yeni bir sınıf üretir
  • Derleyiciye davranış taahhüdü verir Doğru cevap

Açıklama: Contract derleyiciye bilgi verir; çalışma zamanında kod üretmez.

2 Sözleşme bloğunu tamamla

Soru
fun requireNonNull(x: String?): String {
    ____ { returns() implies (x != null) }
    return x!!
}
Cevap
fun requireNonNull(x: String?): String {
    contract { returns() implies (x != null) }
    return x!!
}

Açıklama: contract { } bloğu sözleşme başlatır.

3 Sözleşme parçalarını eşle

Kavram Anlamı
contract Sözleşme bloğu
returns() Dönüş koşulu
implies Sonucu bildirir
x != null Null olmama güvencesi

Uzman bölümündeki tüm dersler