Získajte náhodné číslo v Kotline

1. Úvod

Tento krátky tutoriál ukáže, ako vygenerovať náhodné číslo pomocou Kotlina.

2. Použitie náhodného čísla java.lang.Math

Najjednoduchší spôsob, ako vygenerovať náhodné číslo v Kotline, je použiť java.lang.Math. Nasledujúci príklad vygeneruje náhodné dvojité číslo medzi 0 a 1.

@Test zábava whenRandomNumberWithJavaUtilMath_thenResultIsB Between0And1 () {val randomNumber = Math.random () assertTrue {randomNumber> = 0} assertTrue {randomNumber <1}}

3. Použitie náhodného čísla ThreadLocalRandom

Môžeme tiež použiť java.util.concurrent.ThreadLocalRandom na vygenerovanie náhodnej dvojnásobnej, celočíselnej alebo dlhej hodnoty. Celé číslo a dlhé hodnoty generované týmto spôsobom môžu byť pozitívne aj negatívne.

ThreadLocalRandom je bezpečný pre vlákna a poskytuje lepší výkon v prostredí s viacerými vláknami pretože poskytuje samostatné Náhodné objekt pre každé vlákno, a tým znižuje spory medzi vláknami:

@Test zábava whenRandomNumberWithJavaThreadLocalRandom_thenResultsInDefaultRanges () {val randomDouble = ThreadLocalRandom.current (). NextDouble () val randomInteger = ThreadLocalRandom.current (). NextInt () val randomLong = ThreadLocalRandom.current {) assertTrue {randomDouble = Integer.MIN_VALUE} assertTrue {randomInteger = Long.MIN_VALUE} assertTrue {randomLong <Long.MAX_VALUE}}

4. Použitie náhodného čísla Kotlin.js

Môžeme tiež vygenerovať náhodné dvojité pomocou Matematika triedy z knižnice kotlin.js.

@Test zábava whenRandomNumberWithKotlinJSMath_thenResultIsB Between0And1 () {val randomDouble = Math.random () assertTrue {randomDouble> = 0} assertTrue {randomDouble <1}}

5. Náhodné číslo v danom rozsahu pomocou Pure Kotlin

Použitím čistého Kotlina môžeme vytvorte zoznam čísel, zamiešajte ho a potom vezmite prvých elemenz tohto zoznamu:

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

6. Náhodné číslo v danom rozsahu pomocou ThreadLocalRandom

ThreadLocalRandom uvedené v časti 3 možno tiež použiť na vygenerovanie náhodného čísla v danom rozsahu:

@Test zábava whenRandomNumberWithJavaThreadLocalRandom_thenResultsInGivenRanges () {val randomDouble = ThreadLocalRandom.current (). NextDouble (1.0, 10.0) val randomInteger = ThreadLocalRandom.current (). NextInt (1, 10) val randomLong = ThreadLocal = ThreadLocal 10) assertTrue {randomDouble> = 1} assertTrue {randomDouble = 1} assertTrue {randomInteger = 1} assertTrue {randomLong <10}}

7. Pseudo vs bezpečné generátory náhodných čísel

Štandardné implementácie JDK z java.util.Random použite lineárny generátor zhody na poskytnutie náhodných čísel. Problém tohto algoritmu spočíva v tom, že nie je kryptograficky silný a jeho výstupy by mohli útočníci predvídať.

Na prekonanie tohto problému mali by sme použiť java.security.SecureRandom na miestach, kde potrebujeme dobrú bezpečnosť:

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

SecureRandom produkuje kryptograficky silné náhodné hodnoty pomocou kryptograficky silného generátora pseudonáhodných čísel (CSPRNG).

Aplikácie by nemali používať iné spôsoby generovania bezpečného náhodného čísla na miestach súvisiacich s bezpečnosťou.

8. Záver

V tomto článku sme sa naučili niekoľko spôsobov, ako vygenerovať náhodné číslo v Kotline.

Ako vždy, všetok kód uvedený v tomto tutoriále nájdete na GitHub.