0Pricing
Kotlin Academy · Ders

Uygulamalı Yansıma

Ek açıklamaları dinamik olarak okuyun

Uygulamalı Yansıma, 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.

Anotasyonlar ve Yansıtma

RUNTIME saklamasına sahip bir anotasyon, çalışma zamanında yansıtma aracılığıyla bulunabilir. Bu birleşim; serileştiricilere, doğrulayıcılara ve bağımlılık ekleme sistemlerine güç verir.

Bu derste kendi anotasyonlarımızı dinamik olarak okuyacağız.

Sınıf Anotasyonu Okuma

Her KClass, bir annotations listesi sunar. Belirli bir anotasyonu türüne göre bulmak için bu listeyi tarayabiliriz.

@Retention(AnnotationRetention.RUNTIME)
annotation class Entity(val table: String)

@Entity("users")
class User

fun main() {
    val ann = User::class.annotations
        .filterIsInstance<Entity>()
        .first()
    println(ann.table)
}

findAnnotation Yardımcısı

findAnnotation uzantısı, elle filtreleme yapmaktan daha temizdir. Anotasyonu veya null değerini döndürür.

import kotlin.reflect.full.findAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class Entity(val table: String)

@Entity("orders")
class Order

fun main() {
    val ann = Order::class.findAnnotation<Entity>()
    println(ann?.table)
}

Özelliklerde Anotasyonlar

Özelliklerin kendilerine ait anotasyonları olabilir. memberProperties üzerinde yineleyin ve her özelliğin annotations değerini inceleyin.

import kotlin.reflect.full.memberProperties
import kotlin.reflect.full.findAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class Column(val name: String)

class Product(@Column("product_id") val id: Int, val title: String)

fun main() {
    Product::class.memberProperties.forEach { prop ->
        val col = prop.findAnnotation<Column>()
        if (col != null) println(prop.name + " -> " + col.name)
    }
}

Mini Serileştirici Oluşturma

Çıktı oluşturmak için özellik okumayı anotasyonlarla birleştirin. Burada her özelliği, varsa sütun adını kullanarak bir anahtar=değer dizgesine eşliyoruz.

import kotlin.reflect.full.memberProperties
import kotlin.reflect.full.findAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class Column(val name: String)

class Item(@Column("item_id") val id: Int, val name: String)

fun main() {
    val item = Item(7, "Book")
    val parts = Item::class.memberProperties.map { p ->
        val key = p.findAnnotation<Column>()?.name ?: p.name
        key + "=" + p.getter.call(item)
    }
    println(parts.joinToString(", "))
}

İşaretleyiciyle Atlamayı Sağlama

Bir işaretleyici anotasyonu, yok sayılacak özellikleri belirtebilir. Varlığını hasAnnotation ile sınarız.

import kotlin.reflect.full.memberProperties
import kotlin.reflect.full.hasAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class Transient2

class Account(val id: Int, @Transient2 val secret: String)

fun main() {
    Account::class.memberProperties
        .filterNot { it.hasAnnotation<Transient2>() }
        .forEach { println(it.name) }
}

Anotasyon Parametrelerini Okuma

Anotasyon örneğini elde ettiğinizde parametreleri sıradan özelliklerdir. Bunları herhangi bir alan gibi okuyun.

import kotlin.reflect.full.findAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class Validated(val min: Int, val max: Int)

@Validated(min = 1, max = 100)
class Quantity

fun main() {
    val v = Quantity::class.findAnnotation<Validated>()!!
    println("range " + v.min + ".." + v.max)
}

İşlevlerde Anotasyonlar

İşlevler de anotasyon alabilir ve incelenebilir. Çatılar bunu işleyicileri bulmak için kullanır; örneğin sınama çalıştırıcıları sınama yöntemlerini bulur.

import kotlin.reflect.full.memberFunctions
import kotlin.reflect.full.findAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class Route(val path: String)

class Api {
    @Route("/home")
    fun home() = "home page"
}

fun main() {
    Api::class.memberFunctions.forEach { f ->
        f.findAnnotation<Route>()?.let { println(f.name + " @ " + it.path) }
    }
}

Davranışı Yönlendirme

Yönlendirme anotasyonunu okuyup bir çağrıyı gerçekten yönlendirin. Yönlendirme çatılarının çalışma biçiminin özü budur.

import kotlin.reflect.full.memberFunctions
import kotlin.reflect.full.findAnnotation

@Retention(AnnotationRetention.RUNTIME)
annotation class Route(val path: String)

class Api {
    @Route("/ping")
    fun ping() = "pong"
}

fun main() {
    val api = Api()
    val target = "/ping"
    Api::class.memberFunctions.forEach { f ->
        if (f.findAnnotation<Route>()?.path == target) {
            println(f.call(api))
        }
    }
}

Gerçek Dünya Kullanımları

Anotasyon odaklı yansıtma, birçok kitaplığın temelini oluşturur:

  • JSON serileştirmesiyle alanları anahtarlara eşleme
  • Kısıtları uygulayan doğrulama
  • Yolları işleyicilerle eşleştiren yönlendirme
  • Bileşenleri birbirine bağlayan bağımlılık ekleme

Kapsamı Sınırlı Tutun

Yansıtmayı, bir kez veya seyrek çalışan kurulum ve çatı koduyla sınırlı tutmak en iyisidir. Mümkün olduğunda sonuçları önbelleğe alın. İstek başına kullanılan yoğun yollarda derleme zamanı işlemeyi tercih edin.

Kısa Sınama

Uygulamalı yansıtma konusundaki anlayışınızı sınayın.

Özet

Anotasyonları ve yansıtmayı birleştirerek şunları yaptınız:

  • Sınıf, özellik ve işlev anotasyonlarını bulma
  • Anotasyon parametrelerini çalışma zamanında okuma
  • Mini bir serileştirici ve yol yönlendiricisi oluşturma
  • İşaretleyici anotasyonlarına sahip alanları atlama

Gerçek çatılar bu şekilde oluşturulur.

Sıkça Sorulan Sorular

“Uygulamalı Yansıma” dersi ücretsiz mi?

Evet — “Uygulamalı Yansıma” 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.

“Uygulamalı Yansıma” dersinde ne öğreneceğim?

Ek açıklamaları dinamik olarak okuyun 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.

“Uygulamalı Yansıma” 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. Ek Açıklamaları Kullanma
  2. Ek Açıklamaları Tanımlama
  3. Yansımanın Temelleri
  4. Uygulamalı Yansıma
← Kotlin Academy Sayfasına Dön