Aleatoriedade não é caos: como Kotlin resolve o problema do Stack Overflow
\n\nTodo desenvolvedor já escreveu código para gerar um número aleatório pelo menos uma vez na vida. Parece simples, não é? Mas quando essa pergunta é feita no Stack Overflow (e a pergunta "How can I get a random number in Kotlin?" acumula milhares de visualizações), fica claro: há mais armadilhas do que parece. Especialmente se você está migrando do Java ou Python.
\n\nNeste artigo, abordaremos a geração de números aleatórios em Kotlin, desde técnicas simples até as mais avançadas. Você aprenderá como obter um número inteiro aleatório, um número decimal, como definir um intervalo e até mesmo como gerar um random criptograficamente seguro para segurança. Vamos lá!
\n\nFundamentos: Random em Kotlin
\n\nKotlin não possui sua própria classe separada para random — ele usa o poderoso java.util.Random do Java, mas com uma sintaxe muito mais conveniente. Graças às funções de extensão, escrever código Kotlin random pode ser feito literalmente em uma linha.
A maneira mais simples: Random.nextInt()
\n\nSe você precisa apenas de um número inteiro aleatório (de 0 ao valor máximo de Int), use:
\n\nimport kotlin.random.Random\n\nfun main() {\n val randomNumber = Random.nextInt()\n println("Número aleatório: $randomNumber")\n}\n\nCada execução produzirá um novo valor. Mas na maioria das vezes precisamos limitar o intervalo. Para isso, existe uma versão sobrecarregada:
\n\nval fromZeroToTen = Random.nextInt(10) // 0..9\nval fromFiveToFifteen = Random.nextInt(5, 15) // 5..14\n\nImportante: Em Kotlin, assim como em Java, o limite superior não é incluído. Random.nextInt(10) retornará um número de 0 a 9.\n\nNúmeros decimais: Random.nextDouble() e Random.nextFloat()
\n\nPara gerar um float aleatório em Kotlin ou double, use:
\n\nval randomDouble = Random.nextDouble() // 0.0..1.0\nval randomFloat = Random.nextFloat() // 0.0..1.0\n\n// Com intervalo:\nval doubleInRange = Random.nextDouble(10.0, 20.0) // 10.0..20.0\n\nObserve: nextFloat() não suporta intervalo — apenas nextDouble(). Se precisar de um float em um intervalo, converta:
val customFloat = Random.nextDouble(1.5, 5.5).toFloat()\n\nGeração de números aleatórios em um intervalo: exemplos práticos
\n\nNa maioria das vezes, em projetos reais, é necessário um número aleatório em um intervalo específico em Kotlin. Vamos analisar os cenários mais comuns.
\n\nNúmero inteiro aleatório de 1 a 100 (inclusive)
\n\nPara incluir o limite superior, basta adicionar 1:
\n\nval diceRoll = Random.nextInt(1, 7) // 1..6 (como um dado)\nval lottery = Random.nextInt(1, 101) // 1..100\n\nÍndice aleatório de um array ou lista
\n\nUma das tarefas mais comuns é obter um elemento aleatório de uma coleção:
\n\nval colors = listOf("Vermelho", "Azul", "Verde", "Amarelo")\nval randomColor = colors[Random.nextInt(colors.size)]\nprintln("Cor aleatória: $randomColor")\n\nMas em Kotlin existe uma maneira ainda mais elegante — a função random():
val randomColor = colors.random()\nprintln("Cor aleatória: $randomColor")\n\nPor baixo dos panos, ela faz a mesma coisa, mas o código fica mais limpo.
\n\nNúmero aleatório com passo
\n\nÀs vezes, é necessário gerar números múltiplos de um determinado valor. Por exemplo, números pares de 0 a 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\nTécnicas avançadas: sequências e criptografia segura
\n\nSequência aleatória de números
\n\nSe precisar gerar uma lista de números aleatórios, use generate