Existe-t-il un moyen de chaîner plusieurs let pour plusieurs variables nullables dans kotlin?
fun example(first: String?, second: String?) {
first?.let {
second?.let {
// Do something just if both are != null
}
}
}
Je veux dire, quelque chose comme ça:
fun example(first: String?, second: String?) {
first?.let && second?.let {
// Do something just if both are != null
}
}
Réponses:
Si vous êtes intéressé, voici deux de mes fonctions pour résoudre ce problème.
Usage:
la source
Voici quelques variantes, selon le style que vous voudrez utiliser, si vous avez tout de types identiques ou différents, et si la liste d'un nombre inconnu d'éléments ...
Types mixtes, tous ne doivent pas être nuls pour calculer une nouvelle valeur
Pour les types mixtes, vous pouvez créer une série de fonctions pour chaque nombre de paramètres qui peuvent sembler ridicules, mais qui fonctionnent bien pour les types mixtes:
Exemple d'utilisation:
Exécuter un bloc de code lorsque la liste ne contient aucun élément nul
Deux saveurs ici, d'abord pour exécuter un bloc de code lorsqu'une liste contient tous les éléments non nuls, et deuxièmement pour faire de même lorsqu'une liste a au moins un élément non nul. Les deux cas passent une liste d'éléments non nuls au bloc de code:
Les fonctions:
Exemple d'utilisation:
Un léger changement pour que la fonction reçoive la liste des éléments et effectue les mêmes opérations:
Exemple d'utilisation:
Ces variations peuvent être modifiées pour avoir des valeurs de retour telles que
let()
.Utiliser le premier élément non nul (Coalesce)
Similaire à une fonction SQL Coalesce, renvoie le premier élément non nul. Deux saveurs de la fonction:
Exemple d'utilisation:
Autres variations
... Il existe d'autres variantes, mais avec plus de spécifications, cela pourrait être réduit.
la source
whenAllNotNull
avec déstructurant comme ceci:listOf(a, b, c).whenAllNotNull { (d, e, f) -> println("$d $e $f")
.Vous pouvez écrire votre propre fonction pour cela:
la source
Vous pouvez créer une
arrayIfNoNulls
fonction:Vous pouvez ensuite l'utiliser pour un nombre variable de valeurs avec
let
:Si vous avez déjà un tableau, vous pouvez créer une
takeIfNoNulls
fonction (inspirée detakeIf
etrequireNoNulls
):Exemple:
la source
Pour le cas où il suffit de vérifier deux valeurs et de ne pas avoir à travailler avec des listes:
Exemple d'utilisation:
la source
En fait, vous pouvez simplement le faire, vous savez? ;)
Il n'y a rien de mal à utiliser un contrôle nul normal dans Kotlin.
Et c'est beaucoup plus lisible pour tous ceux qui examineront votre code.
la source
let
raccourci pour faire ces vérificationsJe préfère en fait le résoudre en utilisant les fonctions d'assistance suivantes:
Et voici comment vous devez les utiliser:
la source
J'ai résolu ce problème en créant des fonctions qui répliquent plus ou moins le comportement de with, mais prennent plusieurs paramètres et n'appellent que la fonction de tous les paramètres est non nulle.
Ensuite, je l'utilise comme ceci:
Le problème évident avec ceci est que je dois définir une fonction pour chaque cas (nombre de variables) dont j'ai besoin, mais au moins je pense que le code semble propre lors de leur utilisation.
la source
Tu pourrais aussi faire ça
la source
J'ai légèrement amélioré la réponse attendue:
cela rend cela possible:
la source
Pour toute quantité de valeurs à vérifier, vous pouvez utiliser ceci:
Et il sera utilisé comme ceci:
les éléments envoyés au bloc utilisent le caractère générique, vous devez vérifier les types si vous souhaitez accéder aux valeurs, si vous avez besoin d'utiliser un seul type, vous pouvez le transformer en génériques
la source