1
votes

Visual Basic avec équivalent dans Kotlin

En Visual Basic, nous pouvons utiliser Avec une expression comme celle-ci:

 With theCustomer
        .Name = "Coho Vineyard"
        .URL = "http://www.cohovineyard.com/"
        .City = "Redmond"
 End With

Je cherche quelque chose comme ça. Est-ce possible à Kotlin?


3 Réponses :


3
votes

Vous pouvez utiliser la fonction avec de la bibliothèque Kotlin Standard, par exemple :

theCustomer.apply { 
    name = "Coho Vineyard"
    url = "http://www.cohovineyard.com/"
    city = "Redmond"
}

with () renvoie un résultat. Cela rend le code plus propre.

Vous pouvez également utiliser la fonction d'extension apply :

with(theCustomer) {
    name = "Coho Vineyard"
    url = "http://www.cohovineyard.com/"
    city = "Redmond"
}

apply - déclarée sur Toute classe , elle peut être invoquée sur des instances de tous types, elle rend le code plus lisible. À utiliser lorsque vous devez utiliser une instance de l'objet (modifier les propriétés), exprimer la chaîne d'appels. Il diffère de avec () en ce qu'il renvoie Receiver.


0 commentaires

0
votes

Quelque chose comme ça?

    theCustomer?.let{ customer ->
        customer.Name = "Coho Vineyard"
        customer.URL = "http://www.cohovineyard.com/"
        customer.City = "Redmond"
    }

Mais avec nécessite un paramètre non nullable. Je suggère d'utiliser à la place let ou apply .

    theCustomer?.apply{
        Name = "Coho Vineyard"
        URL = "http://www.cohovineyard.com/"
        City = "Redmond"
    }

ou

    with(theCustomer) {
        Name = "Coho Vineyard"
        URL = "http://www.cohovineyard.com/"
        City = "Redmond"
    }


1 commentaires

avec ne nécessite certainement pas de récepteur non nul, son paramètre de type T n'a pas de limite supérieure. Bien sûr, il est vrai que son utilisation sur une référence nullable entraînera (évidemment) que le lambda ait un this nullable.



3
votes

Kotlin fournit plusieurs fonctions de portée. Certains d'entre eux utilisent une fonction littérale avec receiver , qui permet d'écrire un code similaire à celui fourni par vous dans Visual De base. Les deux, avec et apply conviennent dans ce cas. Il est intéressant de noter que with renvoie un résultat arbitraire R tandis que apply retourne toujours le récepteur concret sur lequel la fonction a été appelée.

Pour votre exemple, considérons les deux fonctions:

  1. avec

    En utilisant avec , nous pouvons écrire le code comme suit:

    val customer = Customer().apply {
        name = "Coho Vineyard"
        url = "http://www.cohovineyard.com/"
        city = "Redmond"
    }
    

    La dernière expression du lambda passée à avec ici est une affectation, qui, en Kotlin, renvoie Unit . Vous pouvez assigner le résultat de l'appel with à une nouvelle variable qui serait alors de type Unit . Ce n'est pas utile et toute l'approche n'est pas très idiomatique car nous devons séparer la déclaration de l'initialisation réelle de customer .

  2. appliquer

    Avec apply d'autre part, nous pouvons combiner déclaration et initialisation car il renvoie son récepteur par défaut:

    val customer = Customer()
    with(customer) {
        name = "Coho Vineyard"
        url = "http://www.cohovineyard.com/"
        city = "Redmond"
    } 
    

Comme vous pouvez le voir, chaque fois que vous voulez initialiser un objet, préférez apply (fonction d'extension définie sur tous les types). Voici un autre fil de discussion sur les différences entre with et apply.


0 commentaires