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.


$config[zx-auto] not found$config[zx-overlay] not found