L'aléatoire n'est pas le chaos : comment Kotlin résout le problème de Stack Overflow
\n\nChaque développeur a écrit au moins une fois dans sa vie du code pour générer un nombre aléatoire. Rien de plus simple, semble-t-il ? Mais quand cette question est posée sur Stack Overflow (et la question "How can I get a random number in Kotlin?" recueille des milliers de vues), il devient clair qu'il y a plus d'embûches qu'il n'y paraît. Surtout si vous venez de Java ou Python.
\n\nDans cet article, nous allons explorer la génération de nombres aléatoires en Kotlin, des techniques simples aux plus avancées. Vous apprendrez à obtenir un entier aléatoire, un nombre décimal, à définir une plage et même à générer un random cryptographique pour la sécurité. C'est parti !
\n\nLes bases : Random en Kotlin
\n\nKotlin n'a pas sa propre classe dédiée au random — il utilise le puissant java.util.Random de Java, mais avec une syntaxe bien plus pratique. Grâce aux fonctions d'extension, écrire du code Kotlin random peut se faire en une seule ligne.
La méthode la plus simple : Random.nextInt()
\n\nSi vous avez besoin simplement d'un nombre entier aléatoire (de 0 à la valeur maximale de Int), utilisez :
\n\nimport kotlin.random.Random\n\nfun main() {\n val randomNumber = Random.nextInt()\n println("Nombre aléatoire : $randomNumber")\n}\n\nChaque exécution donnera une nouvelle valeur. Mais le plus souvent, nous avons besoin de limiter la plage. Pour cela, il existe une version surchargée :
\n\nval fromZeroToTen = Random.nextInt(10) // 0..9\nval fromFiveToFifteen = Random.nextInt(5, 15) // 5..14\n\nImportant : En Kotlin, comme en Java, la limite supérieure n'est pas incluse. Random.nextInt(10) retournera un nombre de 0 à 9.\n\nNombres décimaux : Random.nextDouble() et Random.nextFloat()
\n\nPour générer un float aléatoire en Kotlin ou un double, utilisez :
\n\nval randomDouble = Random.nextDouble() // 0.0..1.0\nval randomFloat = Random.nextFloat() // 0.0..1.0\n\n// Avec une plage :\nval doubleInRange = Random.nextDouble(10.0, 20.0) // 10.0..20.0\n\nNotez que nextFloat() ne prend pas en charge les plages — seulement nextDouble(). Si vous avez besoin d'un float dans une plage, convertissez :
val customFloat = Random.nextDouble(1.5, 5.5).toFloat()\n\nGénération de nombres aléatoires dans une plage : exemples pratiques
\n\nLe plus souvent, dans les projets réels, vous aurez besoin d'un nombre aléatoire dans une plage donnée en Kotlin. Examinons les scénarios les plus courants.
\n\nEntier aléatoire de 1 à 100 (inclus)
\n\nPour inclure la limite supérieure, ajoutez simplement 1 :
\n\nval diceRoll = Random.nextInt(1, 7) // 1..6 (comme un dé)\nval lottery = Random.nextInt(1, 101) // 1..100\n\nIndex aléatoire d'un tableau ou d'une liste
\n\nL'une des tâches les plus courantes est d'obtenir un élément aléatoire d'une collection :
\n\nval colors = listOf("Rouge", "Bleu", "Vert", "Jaune")\nval randomColor = colors[Random.nextInt(colors.size)]\nprintln("Couleur aléatoire : $randomColor")\n\nMais Kotlin propose une manière encore plus élégante — la fonction random() :
val randomColor = colors.random()\nprintln("Couleur aléatoire : $randomColor")\n\nSous le capot, elle fait la même chose, mais le code est plus propre.
\n\nNombre aléatoire avec un pas
\n\nParfois, vous devez générer des nombres multiples d'une certaine valeur. Par exemple, des nombres pairs de 0 à 100 :
\n\nfun randomEven(max: Int): Int {\n val half = max / 2\n return Random.nextInt(0, half + 1) * 2\n}\n\nprintln(randomEven(100)) // 0, 2, 4, ..., 100\n\nTechniques avancées : séquences et cryptographie
\n\nSéquence aléatoire de nombres
\n\nSi vous devez générer une liste de nombres aléatoires, utilisez generate