Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utiliser les types de fonction et les expressions

Utiliser les types de fonction et les expressions lambda en Kotlin

    27 mai 2023 à 0:51:57

    Bonjour à tous 

    Je viens de commencé Kotlin avec les cours que google a fournie.

    Je suis dans la partie Lambda et je ne comprend pas pourquoi 5 quarters affiche que une seule fois

    fun main() {
        val coins: (Int) -> String = { quantity ->
            "$quantity quarters"
        }
        
    	val trickFunction = trickOrTreat(true, null)
        val treatFunction = trickOrTreat(false, coins)
        
     
        trickFunction()
        
        treatFunction()
        treatFunction()
        
    }
    fun trickOrTreat(isTrick: Boolean, extraTreat: ((Int) -> String)?): () -> Unit {
        if (isTrick) {
            return trick
        } else {
            if (extraTreat != null) {
                println(extraTreat(5))
            }
            	return treat
        }
    }
    
    
    val trick = {
        println("No treats!")
    }
    
    val treat = {
        println("Have a treat!")
    }

    5 quarters

    No treats!

    Have a treat!

    Have a treat!

    • Partager sur Facebook
    • Partager sur Twitter

    Doucement mais Surement 

      30 mai 2023 à 22:17:23

      Salut ! J’en ai absolument aucune idée ! On dirait que la dernière méthode n’est pas appelé. C’est très bizarre. Je vais demander autour de moi

      • Partager sur Facebook
      • Partager sur Twitter
        8 juin 2023 à 14:45:57

        Bon j’ai la réponse :

        en fait TrickOrTreat te renvoie une closure qui contient un print(« no treats ») ou un print (« have a treat »)

        cette méthode est execute 2 fois pour assigner trickFunction et treatFunction. A la fin on a donc ces deux val qui sont deux closures qui print un truc. 

        dans le cas de val treatFunction = … on passe false qui print immediatement « 5 quarters ». mais on a bien

        treatFunction = { println(have a treat) }

        donc ensuite on execute ces deux val, donc on exécute les closures et ça donne les 3 prints que tu vois

        La clé c’est que trickOrTreat fait un print au milieu dans un cas précis. C’est pour ça que 5 quarters n’est affiché qu’une fois et au début 

        • Partager sur Facebook
        • Partager sur Twitter

        Utiliser les types de fonction et les expressions

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown