J'ai regardé la documentation pour les Gammes et je ne vois aucune mention de plages arrière.
Est-il possible de faire quelque chose comme :
for (n in 100..1) {
println(n)
}
Et obtenir des résultats :
100
99
98
...
J'ai regardé la documentation pour les Gammes et je ne vois aucune mention de plages arrière.
Est-il possible de faire quelque chose comme :
for (n in 100..1) {
println(n)
}
Et obtenir des résultats :
100
99
98
...
Pourquoi ce n'est pas "for (n in 100..1)" ? Ne pourrait-on pas convenir que si le premier nombre est plus grand, alors une plage compte à rebours ?
Existe-t-il un moyen d'exclure la limite inférieure ? Par exemple, si je veux aller de 100 à 2 et que je veux exclure 1.
@x2bool, bien qu'il soit utile, il y a des situations où il ne l'est pas. Par exemple, vous voulez faire une boucle à partir de 0
à count - 1
mais ne veulent pas vérifier les limites (comme en Java). Si count
devient 0, vous aurez 0 downto -1
qui va briser un algorythme.
Comme indiqué par d'autres, la bonne réponse est
for (n in 100 downTo 1) {
println(n)
}
Mais pourquoi l'équipe de Kotlin a choisi 100 downTo 1
vs 100..1
?
Je pense que la syntaxe 100..1
serait mauvais lorsque nous essayons d'utiliser des variables au lieu de littéraux. Si nous avons tapé
for (n in b..a)
alors il ne serait pas clair quelle boucle nous voulons utiliser.
Nous avions peut-être l'intention de compter à rebours, mais si b
s'avère être plus petit que a
alors notre programme compterait vraiment pour le mieux ! Ce serait une source de bugs.
Est-il possible de rendre la fonction rangeTo() un peu plus intelligente et de gérer cela automatiquement ? Pour moi, avoir une plage négative signifie compter de -1 à -100.
Juste à titre d'exemple d'une fonction de portée universelle pour "for" :
private infix fun Int.toward(to: Int): IntProgression {
val step = if (this > to) -1 else 1
return IntProgression.fromClosedRange(this, to, step)
}
Utilisation :
// 0 to 100
for (i in 0 toward 100) {
// Do things
}
// 100 downTo 0
for (i in 100 toward 0) {
// Do things
}
Je n'en ai pas trouvé. Vous pouvez obtenir le même résultat, par exemple en utilisant étape pour une certaine progression, mais vous devez toujours calculer l'étape par vous-même. Je suppose que les architectes de Kotlin veulent créer un langage parfaitement lisible. Cela signifie que l'exécution du code doit être exactement la même que celle qui est écrite, et une fonction infixe universelle comme mon "vers" ne correspond pas tout à fait à cette idée.
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.