0Pricing
Kotlin Academy · Ders

Üyelere Yetki Devretme

Davranışları birleştirin

Üyelere Yetki Devretme, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 2. 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.

Davranışları Bileştirme

Gerçek nesnelerin çoğu zaman birkaç yeteneği birleştirmesi gerekir. Birçok kaynaktan kalıtım almak yerine her yeteneği özel bir üye nesneye delege edebilirsiniz.

İki Rol, Tek Sınıf

Bir sınıfın hem read hem de write yapması gerektiğini varsayalım. İki arayüz tanımlayın ve her birini kendi uygulamasına delege edin.

interface Reader { fun read(): String }
interface Writer { fun write(s: String): String }

class FileReader : Reader { override fun read() = "contents" }
class FileWriter : Writer { override fun write(s: String) = "wrote " + s }

class FileIO(r: Reader, w: Writer) : Reader by r, Writer by w

fun main() {
    val io = FileIO(FileReader(), FileWriter())
    println(io.read())
    println(io.write("data"))
}

Birden Çok Delege

Bir sınıf, her biri farklı bir üyeye olmak üzere aynı anda birkaç arayüze delegasyon yapabilir. Sınıf, kalıtım kullanmadan bu davranışları bileştirir.

interface Logger { fun log(m: String): String }
interface Validator { fun valid(m: String): Boolean }

class ConsoleLogger : Logger { override fun log(m: String) = "LOG: " + m }
class LengthValidator : Validator { override fun valid(m: String) = m.isNotEmpty() }

class Service(l: Logger, v: Validator) : Logger by l, Validator by v

fun main() {
    val s = Service(ConsoleLogger(), LengthValidator())
    println(s.valid("hi"))
    println(s.log("started"))
}

Üye Olarak Saklanan Delege

Geçersiz kılmalar içinde delegeye başvurmanız gerektiğinde onu kurucu özelliği olarak saklayın. Aynı örnek hem yönlendirmeyi hem de özel kodunuzu destekler.

interface Cache { fun get(k: String): String }

class MapCache : Cache {
    override fun get(k: String) = "value-of-" + k
}

class TracingCache(private val inner: Cache) : Cache by inner {
    override fun get(k: String): String {
        println("lookup " + k)
        return inner.get(k)
    }
}

fun main() {
    println(TracingCache(MapCache()).get("id"))
}

Delegasyonu Kendi Durumunuzla Birleştirme

Delegasyon yapan bir sınıf, yönlendirilen üyelerin yanında kendi özelliklerini ve yöntemlerini de ekleyerek bileştirilmiş nesneyi zenginleştirebilir.

interface Engine { fun start(): String }
class V8 : Engine { override fun start() = "vroom" }

class Car(e: Engine) : Engine by e {
    var doors = 4
    fun honk() = "beep"
}

fun main() {
    val c = Car(V8())
    println(c.start())
    println(c.honk())
    println(c.doors)
}

Uygulamaları Değiştirme

Delege yalnızca bir üye olduğundan aynı sarmalayıcıyı farklı destekleyici uygulamalarla oluşturabilir ve davranışı çalışma zamanında seçebilirsiniz.

interface Notifier { fun send(msg: String): String }
class EmailNotifier : Notifier { override fun send(msg: String) = "email: " + msg }
class SmsNotifier : Notifier { override fun send(msg: String) = "sms: " + msg }

class Alerts(n: Notifier) : Notifier by n

fun main() {
    println(Alerts(EmailNotifier()).send("hi"))
    println(Alerts(SmsNotifier()).send("hi"))
}

Bir Özelliğe Delegasyon

by'den sonraki ifade, kurucu çağrısı da dâhil olmak üzere bir kez değerlendirilen herhangi bir ifade olabilir. Bir parametre olması gerekmez.

interface Greeter { fun greet() = "hi" }
class DefaultGreeter : Greeter

class Page : Greeter by DefaultGreeter()

fun main() {
    println(Page().greet())
}

Elmas Sorunundan Kaçınma

Sınıflarla davranışların çoklu kalıtımı mümkün değildir; ancak birkaç arayüzü ayrı üyelere delege etmek, klasik elmas sorununu temiz bir şekilde aşar.

interface A { fun a() = "A" }
interface B { fun b() = "B" }
class AImpl : A
class BImpl : B

class Combined : A by AImpl(), B by BImpl()

fun main() {
    val c = Combined()
    println(c.a() + c.b())
}

Bileşim İçin Tasarım

İyi bir bileşim için:

  • Küçük ve odaklanmış arayüzler tanımlayın
  • Yeniden kullanılabilir uygulamalar sağlayın
  • Bileşimi oluşturan sınıfta her rolü delege edin

Bu yaklaşım sınıfları esnek ve sınanabilir tutar.

Üye Delegasyonunun Özeti

Üye nesnelere delegasyon yapmak, bir sınıfın davranışı parçalardan oluşturmasını sağlar. Kalıtım olmadan birçok arayüzü birleştirebilir, seçili üyeleri geçersiz kılabilir, uygulamaları değiştirebilir ve kendi durumunuzu ekleyebilirsiniz.

Sırada: Doğrudan Karşılaştırma

Delegasyonun ne kadar esnek olduğunu gördünüz. Sıradaki derste delegasyon ile kalıtım doğrudan karşılaştırılacak; böylece hangisini ne zaman seçmeniz gerektiğini bileceksiniz.

Kısa Bir Kontrol

Üyelere delegasyon yapmayı ne kadar anladığınızı sınayın.

Özet

Üye delegasyonunu öğrendiniz:

  • Birkaç arayüzü ayrı nesnelere delege etmek
  • Seçili üyeleri geçersiz kılmak ve kendi durumunuzu eklemek
  • Oluşturma sırasında uygulamaları değiştirmek
  • Çoklu kalıtımın sakıncalarından kaçınmak

Sırada: delegasyon ve kalıtım.

Sıkça Sorulan Sorular

“Üyelere Yetki Devretme” dersi ücretsiz mi?

Evet — “Üyelere Yetki Devretme” 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.

“Üyelere Yetki Devretme” dersinde ne öğreneceğim?

Davranışları birleştirin 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 2. dersidir.

“Üyelere Yetki Devretme” 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. by Anahtar Sözcüğü
  2. Üyelere Yetki Devretme
  3. Yetki Devretme ve Kalıtım
  4. Uygulamalı Tasarım Kalıpları
← Kotlin Academy Sayfasına Dön