J'ai un morceau de code comme suit:
when { dateFrom == null && dateTo == null -> Unit dateFrom != null -> params["lastUpdated"] = "$dateFrom," dateTo != null -> params["lastUpdated"] = ",$dateTo" else -> params["lastUpdated"] = "$dateFrom,$dateTo" }
Puis-je échapper au quand
d'une manière comme continue
dans une boucle ?
J'utilise maintenant dateFrom == null && dateTo == null -> Unit
mais ce n'est pas très élégant. ( dateFrom == null && dateTo == null -> True
est également possible, mais également pas très élégant)
3 Réponses :
Il n'y a pas de moyen direct de faire cela. Au lieu de simplement renvoyer Unit
, ce qui semble correct dans ce cas, vous pouvez encapsuler l'instruction when
dans un appel de fonction en ligne de portée, comme run {...}
, et utilisez un return @ label
:
run { when { dateFrom == null && dateTo == null -> return@run /* ... */ } }
Cette construction peut être plus utile si les branches when
sont plus complexes qu'une seule instruction.
Je pense que quand
devrait également fonctionner avec des étiquettes. C'est la meilleure solution pour résoudre ce problème pour le moment.
Votre partie else
ne réussira jamais, car l'une des 3 premières conditions sera vraie
.
Donc votre code équivaut à ceci:
when { dateFrom != null && dateTo != null -> params["lastUpdated"] = "$dateFrom,$dateTo" dateFrom != null -> params["lastUpdated"] = "$dateFrom," dateTo != null -> params["lastUpdated"] = ",$dateTo" }
et enfin ceci:
when { dateFrom != null -> params["lastUpdated"] = "$dateFrom," dateTo != null -> params["lastUpdated"] = ",$dateTo" else -> Unit }
Je pense que vous vouliez peut-être avoir: p >
when { dateFrom == null && dateTo == null -> Unit dateFrom != null -> params["lastUpdated"] = "$dateFrom," dateTo != null -> params["lastUpdated"] = ",$dateTo" }
Si c'est ce que vous vouliez, il n'y a aucun cas de simplification supplémentaire.
L'autre est-il même nécessaire?
Pour le cas où les deux sont nuls, alors l'OP veut retourner explicitement Unit
Je pense que le but de la question est que l'OP ne veut pas renvoyer Unit
. Il veut s'en débarrasser, comme si vous sautiez une itération dans une boucle en utilisant continue
.
Si tel est le cas, le else peut être omis.
Si vous réécrivez vos conditions, vous pouvez vous débarrasser du cas où vous avez maintenant Unit
when { dateFrom != null && dateTo != null -> params["lastUpdated"] = "$dateFrom,$dateTo" dateFrom != null -> params["lastUpdated"] = "$dateFrom," dateTo != null -> params["lastUpdated"] = ",$dateTo" }