0Pricing
Kotlin Academy · Ders

Kullanıcıları Bozmadan DSL'leri Sınama ve Geliştirme

Kararlı DSL API'leri tasarlayın ve bunları okunabilir doğrulama bloklarıyla sınayın.

Kullanıcıları Bozmadan DSL'leri Sınama ve Geliştirme, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

DSL Sınaması Neden Farklıdır

Bir DSL, genel bir API'dir. DSL'de yapılan değişiklikler, kullanıcı kodundaki her çağrı noktasını bozabilir. Bir DSL'yi sınamak, hem ürettiği çıktıyı hem de uyguladığı yapıyı doğrulamak anlamına gelir — geçersiz yapıların derleme hatası olarak kalması da buna dahildir.

DSL Çıktısını Sınama

En basit sınama şudur: DSL'yi kullanarak bir nesne oluşturun ve oluşturulan sonuç ya da oluşturucunun dahili durumu üzerinde doğrulama yapın.

@Test
fun `div contains a paragraph`() {
    val result = html {
        body {
            div { p("Hi") }
        }
    }
    assertTrue(result.render().contains("<p>"))
}

Oluşturucu Durumunu Sınama

Oluşturulan dizeyi sınamak yerine oluşturucu nesne grafiğini doğrudan sınayın. Bu yaklaşım, biçimlendirme değişikliklerine karşı daha dayanıklıdır:

@Test
fun `server config has correct port`() {
    val cfg = server {
        host = "example.com"
        port = 9090
    }
    assertEquals(9090, cfg.port)
    assertEquals("example.com", cfg.host)
}

İç İçe Yapıları Sınama

İç içe yerleştirme ilişkilerini doğrulamak için nesne ağacında ilerleyin:

@Test
fun `body contains one div`() {
    val page = html { body { div { } } }
    assertEquals(1, page.children
        .filterIsInstance<Body>().first()
        .children.filterIsInstance<Div>().size
    )
}

Derleme Hatası Sınaması

Derleme hatalarını doğrudan birim sınamasına tabi tutamazsınız; ancak başarısız kodu yorum satırına alıp // This should NOT compile gibi açıklamalar ekleyebilirsiniz. Bazı projeler, belirli kodların derlenmediğini doğrulamak için Kotlin Compile Testing kitaplığını kullanır.

DSL'yi Güvenle Geliştirme: Eklemeli Değişiklikler

Varsayılan değerlere sahip yeni isteğe bağlı parametreler veya yeni oluşturucu işlevleri eklemek geriye dönük uyumludur. Mevcut çağrı noktaları değişiklik yapılmadan derlenir.

// Before
fun server(block: ServerConfig.() -> Unit): ServerConfig
// After — additive: new optional feature
fun server(enableMetrics: Boolean = false, block: ServerConfig.() -> Unit): ServerConfig

Bozucu Değişiklik: Kaldırma veya Yeniden Adlandırma

Bir DSL işlevini kaldırmak veya yeniden adlandırmak çağrı noktalarını bozar. Yeniden adlandırmanız gerekiyorsa kullanımdan kaldırılmış bir takma ad sağlayın ve bunu gelecekteki bir ana sürümde kaldırın:

@Deprecated("Use database{} instead", ReplaceWith("database(block)"))
fun db(block: DbConfig.() -> Unit) = database(block)

DSL'nizi Sürümlendirme

Kitaplık DSL'leri için anlamsal sürümleme kurallarına uyun. Bozucu DSL değişiklikleri (kaldırılan işlevler veya değiştirilen alıcı türleri) ana sürüm numarasının artırılmasını gerektirir. Bunları bir değişiklik günlüğünde belgeleyin.

Deneysel DSL Özellikleri için @RequiresOptIn Kullanma

Kararsız DSL uzantılarını @RequiresOptIn ile işaretleyin. Kullanıcılar açıkça katılır; böylece değişebilecek özelliklere yanlışlıkla bağımlı olmaları önlenir:

@RequiresOptIn(message = "This DSL feature is experimental and may change")
annotation class ExperimentalDsl

@ExperimentalDsl
fun ServerConfig.enableDebug() { /*...*/ }

DSL'lerde Özellik Devri

DSL'ler, zorunlu alanları güvenceye almak ve zorunlu bir değer eksik olduğunda anlaşılır hata iletileri sağlamak için özellik devrini kullanabilir:

class Required<T> {
    private var value: T? = null
    operator fun getValue(t: Any?, p: KProperty<*>): T = value ?: error("${p.name} is required")
    operator fun setValue(t: Any?, p: KProperty<*>, v: T) { value = v }
}

Sürümler Arasında Sözleşme Sınaması

Sınamalar olarak bir dizi "referans" DSL kullanım parçacığını saklayın. Bir yeniden düzenleme bunları bozarsa, kullanıcılar fark etmeden önce sınama paketi bunu yakalar. Bunlar aynı zamanda yaşayan belge görevi görür.

Hızlı Kontrol

Geriye dönük uyumluluk açısından en güvenli DSL değişikliği türü nedir?

Özet: DSL'leri Sınama ve Geliştirme

Temel çıkarımlar:

  • Birim sınamalarında DSL çıktısını ve oluşturucu nesnesinin durumunu sınayın
  • Eklemeli değişiklikler (yeni isteğe bağlı işlevler/parametreler) güvenlidir
  • Kullanıcıları etkilemeden yeniden adlandırmak için @Deprecated(ReplaceWith=...) kullanın
  • Deneysel DSL özellikleri için @RequiresOptIn kullanın
  • Sürümler arasındaki gerilemeleri yakalamak için referans kullanım sınamalarını koruyun

Sıkça Sorulan Sorular

“Kullanıcıları Bozmadan DSL'leri Sınama ve Geliştirme” dersi ücretsiz mi?

Evet — “Kullanıcıları Bozmadan DSL'leri Sınama ve Geliştirme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“Kullanıcıları Bozmadan DSL'leri Sınama ve Geliştirme” dersinde ne öğreneceğim?

Kararlı DSL API'leri tasarlayın ve bunları okunabilir doğrulama bloklarıyla sınayın. Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Kullanıcıları Bozmadan DSL'leri Sınama ve Geliştirme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Alıcılı Lambda: DSL Temeli
  2. @DslMarker: Alıcı Sızıntısını Önleme
  3. Tür Güvenli HTML/Config DSL Oluşturma
  4. Kullanıcıları Bozmadan DSL'leri Sınama ve Geliştirme
← Kotlin Academy Sayfasına Dön