2
votes

Passer un paramètre à une fonction uniquement s'il n'est pas nul

J'ai besoin de passer un paramètre Nullable à une fonction qui n'accepte que les objets non Nullables, mais dont la valeur par défaut est définie.

Actuellement, j'utilise un let:

val myFunResult = myFun(myString?:default)

C'est verbeux et ce n'est pas plus possible lorsqu'il y a plus qu'un paramètre facultatif. J'aurais besoin de quelque chose comme

fun myFun(a:String = "qqq"): Whatever {...}

val myString:String? = getNullableString()

val myFunResult = myString.?let{myFun(it)}?:myFun()

Y a-t-il un moyen pratique de faire ça?


2 commentaires

Je remarque que votre fonction ne renvoie rien !!


Oui, ce n'est qu'un exemple pour clarifier le problème, vous pouvez oublier le devoir si vous préférez :) Je vais le corriger


3 Réponses :


1
votes

Vous pouvez autoriser la transmission de valeurs Nullable comme paramètres dans votre fonction, changer la valeur par défaut nommée en null et définir la valeur par défaut réelle dans le corps de la fonction:

fun myFun(a: String? = null) {
    val a = a ?: DEFAULT_VALUE
    // rest of the function
}

val myFunResult = myFun(myString)

p >


2 commentaires

En effet, mais je n'ai pas toujours le contrôle sur la fonction que j'appelle (de plus, cela cache un peu la valeur par défaut réelle dans le corps de la méthode). Une autre façon?


@OldManofAran Oui, malheureusement, vous perdez un peu de clarté avec celui-ci. L'autre façon pour le code propre serait simplement d'encapsuler votre approche actuelle dans une autre fonction bien nommée qui prend un argument Nullable. Je ne pense pas qu'il y ait autre chose car Kotlin crée une méthode synthétique qui appelle la fonction avec une valeur par défaut codée en dur.



1
votes

Si vous ne voulez pas répéter la valeur par défaut en dehors de la fonction (je ne le ferais pas), vous allez devoir faire une sorte de vérification conditionnelle. Personnellement, je trouve que l'expression let est difficile à lire lors de la numérisation de code, et j'irais probablement avec un if . Gardez à l'esprit que dans Kotlin, si est une expression:

if(myString == null) myFun() else myFun(myString)


0 commentaires

0
votes

Depuis que vous l'avez mentionné, vous ne pouvez pas modifier la fonction initiale que vous appelez. L'écriture d'une nouvelle fonction pour appeler la fonction initiale pourrait être une approche plus lisible.

fun myFun(a:String = "qqq"): Whatever {...}
fun myNewFun(a:String? = null): Whatever = if(a == null) myFun() else myFun(a)


0 commentaires