Como obter um número aleatório em Kotlin: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Aleatoriedade não é caos: como Kotlin resolve o problema do Stack Overflow

\n\n

Todo 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\n

Neste 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\n

Fundamentos: Random em Kotlin

\n\n

Kotlin 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.

\n\n

A maneira mais simples: Random.nextInt()

\n\n

Se você precisa apenas de um número inteiro aleatório (de 0 ao valor máximo de Int), use:

\n\n
import kotlin.random.Random\n\nfun main() {\n    val randomNumber = Random.nextInt()\n    println("Número aleatório: $randomNumber")\n}
\n\n

Cada execução produzirá um novo valor. Mas na maioria das vezes precisamos limitar o intervalo. Para isso, existe uma versão sobrecarregada:

\n\n
val fromZeroToTen = Random.nextInt(10)   // 0..9\nval fromFiveToFifteen = Random.nextInt(5, 15) // 5..14
\n\n
Importante: 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\n

Números decimais: Random.nextDouble() e Random.nextFloat()

\n\n

Para gerar um float aleatório em Kotlin ou double, use:

\n\n
val 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\n

Observe: nextFloat() não suporta intervalo — apenas nextDouble(). Se precisar de um float em um intervalo, converta:

\n\n
val customFloat = Random.nextDouble(1.5, 5.5).toFloat()
\n\n

Geração de números aleatórios em um intervalo: exemplos práticos

\n\n

Na 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\n

Número inteiro aleatório de 1 a 100 (inclusive)

\n\n

Para incluir o limite superior, basta adicionar 1:

\n\n
val 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\n

Uma das tarefas mais comuns é obter um elemento aleatório de uma coleção:

\n\n
val colors = listOf("Vermelho", "Azul", "Verde", "Amarelo")\nval randomColor = colors[Random.nextInt(colors.size)]\nprintln("Cor aleatória: $randomColor")
\n\n

Mas em Kotlin existe uma maneira ainda mais elegante — a função random():

\n\n
val randomColor = colors.random()\nprintln("Cor aleatória: $randomColor")
\n\n

Por baixo dos panos, ela faz a mesma coisa, mas o código fica mais limpo.

\n\n

Nú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\n
fun 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\n

Técnicas avançadas: sequências e criptografia segura

\n\n

Sequência aleatória de números

\n\n

Se precisar gerar uma lista de números aleatórios, use generate

Blogs

Book Recommendations