34 votes

Kotlin: de Retour peuvent être sortis de "quand"

L'alternative à l' switch dans Kotlin est - when. Ainsi, à l'intérieur d'un recycleur de vue de l'adaptateur, quand je suis de retour type de vue, j'utilise when:

override fun getItemViewType(position: Int): Int {
    when (position) {
        0 -> return ItemViewType.TITLE.type
        1 -> return ItemViewType.SUBTITLE.type
        2 -> return ItemViewType.ITEM.type
        else -> return -1
    }
}

Mais, la déclaration ci-dessus envoie notre message d'avertissement Return can be lifted out of 'when'.

Personne ne sait ce que peut être la bonne façon d'utiliser when? Et ce qui devrait être fait pour résoudre le cas ci-dessus?

69voto

s1m0nw1 Points 21698

Vous êtes à l'aide de when comme un simple Java switch déclaration, ce qui est correct mais pas très idiomatique, et peut être amélioré. Vous pouvez restructurer le code en deux étapes:

  1. Kotlin de l' when peut être utilisé comme une expression, elle renvoie une valeur si vous le souhaitez:

    override fun getItemViewType(position: Int): Int {
        return when (position) {
            0 -> ItemViewType.TITLE.type
            1 -> ItemViewType.SUBTITLE.type
            2 -> ItemViewType.ITEM.type
            else -> -1
         }
    }
    
  2. Le corps de la fonction, désormais composée d'une instruction unique, peut être transformée en une expression du corps:

    override fun getItemViewType(position: Int) = when (position) {
         0 -> ItemViewType.TITLE.type
         1 -> ItemViewType.SUBTITLE.type
         2 -> ItemViewType.ITEM.type
         else -> -1
    }
    

7voto

Saif C Points 176

Votre when est correcte, mais Kotlin a la capacité de soulever le retour de la 'quand' si vous êtes de retour dans tous les cas, il devient donc :

override fun getItemViewType(position: Int): Int {
    return when (position) {
        0 -> ItemViewType.TITLE.type
        1 -> ItemViewType.SUBTITLE.type
        2 -> ItemViewType.ITEM.type
        else -> -1
    }
}

2voto

msrd0 Points 3996

Dans Kotlin, plusieurs états, y compris l' if, when et try, peut renvoyer une valeur. Donc dans votre cas, vous pouvez restructurer la déclaration, avoir l' when déclaration de retour de la valeur réelle, que vous pouvez ensuite le retour de la fonction.

Donc, vous pouvez simplifier votre méthode à la suivante:

override fun getItemViewType(position: Int): Int = when (position) {
    0 -> ItemViewType.TITLE.type
    1 -> ItemViewType.SUBTITLE.type
    2 -> ItemViewType.ITEM.type
    else -> -1
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X