Android

Örnekle Alıcı ile Kotlin Fonksiyon Değişmezini Anlayın

Bu lambda sözdizimine rastladım – NavGraphBuilder.() -> Unit ve denildiği ortaya çıktı Alıcı ile Fonksiyon Değişmeziolarak da bilinen Alıcı ile Lambda/Anonim İşlev.

Sözdizimi şöyle görünür:

Alıcı.(Parametreler) → ReturnType

Aşağıda, alıcı ile işlev değişmezini kullanarak özel bir dize oluşturmaya ilişkin bazı örnekler gösterilmektedir.

Örnek 1: Alıcı ile Fonksiyon Değişmezi

fun buildCustomStringExample1(
    action: StringBuilder.(String) -> Unit): String {

    val stringBuilder = StringBuilder()
    stringBuilder.action("Example1")
    return stringBuilder.toString()
}

action alıcı ile değişmez / lambda işlevi işlevidir. StringBuilder alıcıdır. gibi davranır uzatma işlevi nın-nin StringBuilder hangi alır string giriş parametresi olarak

Aramak action, StringBuilder somutlaştırılırsa, onu bir uzantı işlevi gibi çağırın – stringBuilder.action("Example1")

Hayal edebilirsin action ait olan bir geri arama işlevi gibidir StringBuilder.

kullanım

Bu, işlev değişmezinin alıcı ile kullanımıdır:

val output1 = buildCustomStringExample1 { content ->
    this.append("<tag>")
    append("$content") 
    append("</tag>")
}
println("$output1")

diyoruz buildCustomStringExample1 fonksiyon değişmezi / lambda fonksiyon parametresi ile. Bu lambda işlevinde, özel dizeyi nasıl oluşturacağımızı belirtiyoruz – içeriği şununla sarın: "<tag>" ve "</tag>".

content gelen girdi parametresidir buildCustomStringExample1 işlev. this bu StringBuilder içinde oluşturulan örnek buildCustomStringExample1() işlev görebilir ve atlanabilir. append() ait olduğu fonksiyondur StringBuilder.

[Updated – Jun 12, 22]: Yakın zamanda bu tür kullanıma etki alanı tarafından belirlenmiş dil (DSL) olarak adlandırıldığını öğrendim. Bu nedenle, DSP’yi oluşturmak için alıcı ile işlev değişmezi kullanılır. Temel amaç okunabilirlik içindir.

Çıktı

Çıktı şöyle görünür:

<tag>Example1</tag>

Örnek 2: Alıcısız Fonksiyon Değişmezi

İşlev değişmezi / alıcılı lambda işlevi, aşağıdaki sözdizimine dayalı olarak alıcı kullanılmadan yeniden yazılabilir:

(Alıcı, Parametreler) → ReturnType

bu her zamanki lambda ifadeleri hangi 2 parametre alır. İlk parametre, StringBuilder bu, yukarıdaki örnek 1’deki alıcıdır.

fun buildCustomStringExample2(
    action: (StringBuilder, String) -> Unit
): String {

    val stringBuilder = StringBuilder()
    action(stringBuilder, "Example2")
    return stringBuilder.toString()
}

action 2 parametre alan olağan geri arama işlevidir. Aramak action, StringBuilder somutlaştırılır ve ilk parametre olarak iletilir. action geri arama işlevi – action(stringBuilder, "Example2")

kullanım

Bu, işlev değişmezinin alıcı olmadan kullanımıdır:

val output2 = buildCustomStringExample2 { stringBuilder, content ->
    stringBuilder.append("<tag>")
    stringBuilder.append("$content")
    stringBuilder.append("</tag>")
}
println("$output2")

Bu, artık kullanmamamız dışında örnek 1’e benzer. this hangi tarafından değiştirildi stringBuilder ilk lambda parametresi olarak. content lambda fonksiyonunun ikinci parametresidir.

Çıktı

Çıktı, örnek 1 ile aynı çıktıya sahip olan şuna benzer:

<tag>Example2</tag>

Çözüm

Alıcı ile gerçek işlevi anlamak zor değil. Temel olarak, normal fonksiyon değişmez / lambda fonksiyonunu ek parametre olmadan yazmanın basitleştirilmiş bir yoludur.

Alıcı ile Fonksiyon Değişmezi olarak yeniden yazılabilir Alıcısız Fonksiyon Değişmezi.

Receiver.(Parameters) → ReturnType —> (Receiver, Parameters) → ReturnType

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Başa dön tuşu