Få et tilfeldig nummer i Kotlin
1. Introduksjon
Denne korte opplæringen vil demonstrere hvordan du genererer et tilfeldig tall ved hjelp av Kotlin.
2. Tilfeldig nummer ved bruk java.lang.Math
Den enkleste måten å generere et tilfeldig tall i Kotlin er å bruke java.lang.Math. Nedenfor vil eksemplet generere et tilfeldig dobbelt tall mellom 0 og 1.
@Test moro nårRandomNumberWithJavaUtilMath_thenResultIsBetween0And1 () {val randomNumber = Math.random () assertTrue {randomNumber> = 0} assertTrue {randomNumber <1}}
3. Tilfeldig nummer ved bruk ThreadLocalRandom
Vi kan også bruke java.util.concurrent.ThreadLocalRandom for å generere en tilfeldig dobbel, heltall eller lang verdi. Heltall og lange verdier generert på denne måten kan være både positive eller negative.
ThreadLocalRandom er trådsikker og gir bedre ytelse i et flertrådet miljø fordi det gir en egen Tilfeldig objekt for hver tråd og reduserer dermed striden mellom tråder:
@Test fun whenRandomNumberWithJavaThreadLocalRandom_thenResultsInDefaultRanges () {val randomDouble = ThreadLocalRandom.current (). NextDouble () val randomInteger = ThreadLocalRandom.current (). NextInt () val randomLong = ThreadLocalRandom. assertTrue {randomDouble = Integer.MIN_VALUE} assertTrue {randomInteger = Long.MIN_VALUE} assertTrue {randomLong <Long.MAX_VALUE}}
4. Tilfeldig nummer ved bruk Kotlin.js
Vi kan også generere en tilfeldig dobbel bruker Matte klasse fra kotlin.js-biblioteket.
@Test fun whenRandomNumberWithKotlinJSMath_thenResultIsBetween0And1 () {val randomDouble = Math.random () assertTrue {randomDouble> = 0} assertTrue {randomDouble <1}}
5. Tilfeldig antall i et gitt område ved bruk av ren Kotlin
Ved å bruke ren Kotlin kan vi lage en liste med tall, stokke den og ta de første element fra den listen:
@Test fun whenRandomNumberWithKotlinNumberRange_thenResultInGivenRange () {val randomInteger = (1..12). Shuffled (). First () assertTrue {randomInteger> = 1} assertTrue {randomInteger <= 12}}
6. Tilfeldig nummer i et gitt område ved bruk ThreadLocalRandom
ThreadLocalRandom presentert i avsnitt 3 kan også brukes til å generere et tilfeldig tall i et gitt område:
@Test fun whenRandomNumberWithJavaThreadLocalRandom_thenResultsInGivenRanges () {val randomDouble = ThreadLocalRandom.current (). NextDouble (1.0, 10.0) val randomInteger = ThreadLocalRandom.current (). NextInt (1, 10) val randomLong = Thom. 10) assertTrue {randomDouble> = 1} assertTrue {randomDouble = 1} assertTrue {randomInteger = 1} assertTrue {randomLong <10}}
7. Pseudo vs Secure Random Number Generators
Standard JDK implementeringer av java.util.Random bruk en Lineær Congruential Generator for å oppgi tilfeldige tall. Problemet med denne algoritmen er at den ikke er kryptografisk sterk, og dens utganger kan forutsies av angripere.
For å løse dette problemet, vi burde bruke java.security.SecureRandom på steder der vi trenger god sikkerhet:
moro når
SecureRandom produserer kryptografisk sterke tilfeldige verdier ved hjelp av en kryptografisk sterk pseudo-tilfeldig tallgenerator (CSPRNG).
Applikasjoner skal ikke bruke andre måter å generere et sikkert tilfeldig tall på steder relatert til sikkerhet.
8. Konklusjon
I denne artikkelen har vi lært noen måter å generere et tilfeldig tall i Kotlin.
Som alltid kan all kode som presenteres i denne opplæringen bli funnet på GitHub.