Nabavite slučajni broj u Kotlinu

1. Uvod

Ovaj kratki vodič pokazat će kako generirati slučajni broj pomoću Kotlina.

2. Korištenje slučajnog broja java.lang.Math

Najjednostavniji način generiranja slučajnog broja u Kotlinu je upotreba java.lang.Math. Ispod će primjer generirati slučajni dvostruki broj između 0 i 1.

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

3. Korištenje slučajnog broja ThreadLocalRandom

Možemo i koristiti java.util.concurrent.ThreadLocalRandom za generiranje slučajne dvostruke, cijele ili duge vrijednosti. Cjelobrojne i duge vrijednosti generirane na ovaj način mogu biti pozitivne ili negativne.

ThreadLocalRandom je siguran u nitima i pruža bolje performanse u višenitnom okruženju jer pruža zasebnu Slučajno objekt za svaku nit i na taj način smanjuje svađu između niti:

@Test fun whenRandomNumberWithJavaThreadLocalRandom_thenResultsInDefaultRanges () {val randomDouble = ThreadLocalRandom.current (). NextDouble () val randomInteger = ThreadLocalRandom.current (). NextDorentLongLongLocalLongLocalLong assertTrue {randomDouble = Integer.MIN_VALUE} assertTrue {randomInteger = Long.MIN_VALUE} assertTrue {randomLong <Long.MAX_VALUE}}

4. Korištenje slučajnog broja Kotlin.js

Također možemo generirati slučajni dvostruki koristiti Matematika razred iz knjižnice kotlin.js.

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

5. Slučajni broj u danom rasponu pomoću čistog Kotlina

Koristeći čisti Kotlin, možemo stvorite popis brojeva, promiješajte ga i zatim uzmite prvi elementt s tog popisa:

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

6. Slučajni broj u danom rasponu pomoću ThreadLocalRandom

ThreadLocalRandom predstavljen u odjeljku 3, također se može koristiti za generiranje slučajnog broja u određenom rasponu:

@Test zabave whenRandomNumberWithJavaThreadLocalRandom_thenResultsInGivenRanges () {val randomDouble = ThreadLocalRandom.current (). NextDouble (1.0, 10.0) val randomInteger = ThreadLocalRandom.current (). NextIntrandom.curL (1). 10) assertTrue {randomDouble> = 1} assertTrue {randomDouble = 1} assertTrue {randomInteger = 1} assertTrue {randomLong <10}}

7. Pseudo vs sigurni generatori slučajnih brojeva

Standardne JDK implementacije java.util.Slučajno upotrijebite Linearni analogni generator za pružanje slučajnih brojeva. Problem ovog algoritma je što nije kriptografski jak, a napadači bi mogli predvidjeti njegove izlaze.

Da biste prevladali ovaj problem, trebali bismo koristiti java.security.SecureRandom na mjestima gdje nam je potrebna dobra sigurnost:

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

SecureRandom proizvodi kriptografski jake slučajne vrijednosti pomoću kriptografski jakog generatora pseudo-slučajnih brojeva (CSPRNG).

Aplikacije ne bi trebale koristiti druge načine generiranja sigurnog slučajnog broja na mjestima povezanim sa sigurnošću.

8. Zaključak

U ovom smo članku naučili nekoliko načina za generiranje slučajnog broja u Kotlinu.

Kao i uvijek, sav kôd predstavljen u ovom vodiču možete pronaći na GitHub-u.