Krijg een willekeurig nummer in Kotlin

1. Inleiding

Deze korte tutorial laat zien hoe je een willekeurig getal genereert met Kotlin.

2. Willekeurig nummer gebruiken java.lang.Math

De eenvoudigste manier om een ​​willekeurig getal in Kotlin te genereren, is door te gebruiken java.lang.Math. Onderstaand voorbeeld genereert een willekeurig dubbel getal tussen 0 en 1.

@Test leuk whenRandomNumberWithJavaUtilMath_thenResultIsBetween0And1 () {val randomNumber = Math.random () assertTrue {randomNumber> = 0} assertTrue {randomNumber <1}}

3. Willekeurig nummer gebruiken ThreadLocalRandom

We kunnen ook gebruik maken van java.util.concurrent.ThreadLocalRandom om een ​​willekeurige dubbele, gehele of lange waarde te genereren. Geheel getal en lange waarden die op deze manier worden gegenereerd, kunnen zowel positief als negatief zijn.

ThreadLocalRandom is thread-safe en biedt betere prestaties in een multithread-omgeving omdat het een aparte Willekeurig object voor elke thread en vermindert zo de strijd tussen threads:

@Test plezier whenRandomNumberWithJavaThreadLocalRandom_thenResultsInDefaultRanges () {val randomDouble = ThreadLocalRandom.current (). NextDouble () val randomInteger = ThreadLocalRandom.current (). NextInt () val randomLong = ThreadLocalRandom. assertTrue {randomDouble = Geheel getal.MIN_VALUE} assertTrue {randomInteger = Long.MIN_VALUE} assertTrue {randomLong <Long.MAX_VALUE}}

4. Willekeurig nummer gebruiken Kotlin.js

We kunnen ook een willekeurige dubbele genereren de ... gebruiken Wiskunde klasse uit de kotlin.js-bibliotheek.

@Test leuk whenRandomNumberWithKotlinJSMath_thenResultIsBetween0And1 () {val randomDouble = Math.random () assertTrue {randomDouble> = 0} assertTrue {randomDouble <1}}

5. Willekeurig getal in een bepaald bereik met Pure Kotlin

Met pure Kotlin kunnen we maak een lijst met nummers, schud deze en neem de eerste element van die lijst:

@Test leuk whenRandomNumberWithKotlinNumberRange_thenResultInGivenRange () {val randomInteger = (1..12) .shuffled (). First () assertTrue {randomInteger> = 1} assertTrue {randomInteger <= 12}}

6. Willekeurig getal in een bepaald bereik met ThreadLocalRandom

ThreadLocalRandom gepresenteerd in sectie 3 kan ook worden gebruikt om een ​​willekeurig getal in een bepaald bereik te genereren:

@Test plezier whenRandomNumberWithJavaThreadLocalRandom_thenResultsInGivenRanges () {val randomDouble = ThreadLocalRandom.current (). NextDouble (1.0, 10.0) val randomInteger = ThreadLocalRandom.current (). NextInt (1, 10) val randomDouble = ThreadLongocal (randomLong next = ThreadLongocal (random). 10) assertTrue {randomDouble> = 1} assertTrue {randomDouble = 1} assertTrue {randomInteger = 1} assertTrue {randomLong <10}}

7. Pseudo versus beveiligde generatoren van willekeurige getallen

Standaard JDK-implementaties van java.util.Random gebruik een lineaire congruentiële generator om willekeurige getallen te geven. Het probleem met dit algoritme is dat het niet cryptografisch sterk is en dat de uitvoer ervan door aanvallers kan worden voorspeld.

Om dit probleem op te lossen, we zouden moeten gebruiken java.security.SecureRandom op plaatsen waar we goede beveiliging nodig hebben:

leuk whenRandomNumberWithJavaSecureRandom_thenResultsInGivenRanges () {val secureRandom = SecureRandom () secureRandom.nextInt (100) assertTrue {randomLong> = 0} assertTrue {randomLong <100}}

SecureRandom produceert cryptografisch sterke willekeurige waarden met behulp van een cryptografisch sterke pseudo-willekeurige nummergenerator (CSPRNG).

Toepassingen mogen geen andere manieren gebruiken om een ​​veilig willekeurig getal te genereren op plaatsen die verband houden met beveiliging.

8. Conclusie

In dit artikel hebben we een paar manieren geleerd om een ​​willekeurig getal in Kotlin te genereren.

Zoals altijd is alle code die in deze tutorial wordt gepresenteerd, te vinden op GitHub.