Szerezzen véletlenszerű számot Kotlinban

1. Bemutatkozás

Ez a rövid bemutató bemutatja, hogyan lehet véletlen számot előállítani Kotlin segítségével.

2. Véletlen szám használata java.lang.Math

A véletlenszám generálásának legegyszerűbb módja Kotlinban a használata java.lang.Math. Az alábbi példa véletlenszerű dupla számot generál 0 és 1 között.

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

3. Véletlen szám használata ThreadLocalRandom

Használhatjuk is java.util.concurrent.ThreadLocalRandom véletlenszerű dupla, egész vagy hosszú érték generálásához. Az így generált egész és hosszú érték egyaránt lehet pozitív vagy negatív.

ThreadLocalRandom szálbiztos és jobb teljesítményt nyújt többszálas környezetben mert külön biztosít Véletlen objektum minden szálhoz, és ezzel csökkenti a szálak közötti vitát:

@Test fun whenRandomNumberWithJavaThreadLocalRandom_thenResultsInDefaultRanges () {val randomDouble = ThreadLocalRandom.current (). NextDouble () val randomInteger = ThreadLocalRandom.current (). NextInt () val randomLong = ThreadLong = ThreadLong = ThreadLoc = ThreadLong = ThreadLoc = (véletlenszerűen) Long = ThreadLock assertTrue {randomDouble = Egész.MIN_VALUE} assertTrue {randomInteger = Hosszú.MIN_VALUE} assertTrue {randomLong <Hosszú.MAX_VALUE}}

4. Véletlen szám használata Kotlin.js

Generálhatunk véletlenszerű duplát is használni a Math osztály a kotlin.js könyvtárból.

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

5. Véletlenszám egy adott tartományban a tiszta Kotlin használatával

A tiszta Kotlin segítségével megtehetjük hozzon létre egy listát a számokról, keverje össze, majd vegye be az első element ebből a listából:

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

6. Véletlenszám egy adott tartományban ThreadLocalRandom

ThreadLocalRandom A 3. szakaszban bemutatott adatok véletlenszerű szám előállítására is használhatók egy adott tartományban:

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

7. Pszeudo vs biztonságos véletlenszám-generátorok

A JDK szabványos megvalósításai java.util.Random használjon lineáris kongruenciális generátort véletlenszámok megadásához. Ennek az algoritmusnak az a problémája, hogy nem kriptográfiailag erős, és kimeneteit a támadók megjósolhatják.

A probléma megoldása érdekében használnunk kellene java.security.SecureRandom olyan helyeken, ahol jó biztonságra van szükségünk:

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

SecureRandom kriptográfiailag erős véletlenértékeket állít elő kriptográfiailag erős ál-véletlenszám-generátor (CSPRNG) felhasználásával.

Az alkalmazások nem használhatnak más módszereket biztonságos véletlenszám előállítására a biztonsággal kapcsolatos helyeken.

8. Következtetés

Ebben a cikkben megtanultunk néhány módszert véletlenszerű szám előállítására Kotlinban.

Mint mindig, ebben az oktatóanyagban bemutatott összes kód megtalálható a GitHubon.