Dapatkan Nombor Rawak di Kotlin

1. Pengenalan

Tutorial ringkas ini akan menunjukkan cara menghasilkan nombor rawak menggunakan Kotlin.

2. Nombor Rawak Menggunakan java.lang.Math

Kaedah termudah untuk menghasilkan nombor rawak di Kotlin adalah dengan menggunakan java.lang.Math . Contoh di bawah akan menghasilkan nombor berganda rawak antara 0 dan 1.

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

3. Nombor Rawak Menggunakan ThreadLocalRandom

Kita juga boleh menggunakan java.util.concurrent.ThreadLocalRandom untuk menghasilkan nilai berganda, integer atau panjang rawak. Nilai integer dan panjang yang dihasilkan dengan cara ini boleh menjadi positif atau negatif .

ThreadLocalRandom selamat menggunakan benang dan memberikan prestasi yang lebih baik dalam persekitaran berbilang benang kerana menyediakanobjek Rawak yang terpisahuntuk setiap utas dan dengan itu mengurangkan perbalahan antara utas:

@Test fun whenRandomNumberWithJavaThreadLocalRandom_thenResultsInDefaultRanges() { val randomDouble = ThreadLocalRandom.current().nextDouble() val randomInteger = ThreadLocalRandom.current().nextInt() val randomLong = ThreadLocalRandom.current().nextLong() assertTrue { randomDouble >= 0 } assertTrue { randomDouble = Integer.MIN_VALUE } assertTrue { randomInteger = Long.MIN_VALUE } assertTrue { randomLong < Long.MAX_VALUE } }

4. Nombor Rawak Menggunakan Kotlin.js

Kita juga boleh menghasilkan dua kali ganda secara rawak menggunakan kelas Matematik dari perpustakaan kotlin.js .

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

5. Nombor Rawak dalam Julat Diberi Menggunakan Kotlin Murni

Dengan menggunakan Kotlin tulen, kita dapat membuat senarai nombor, mengacaknya dan kemudian mengambil elemen pertama dari senarai itu:

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

6. Nombor Rawak dalam Julat Diberi Menggunakan ThreadLocalRandom

ThreadLocalRandom yang disajikan dalam bahagian 3 juga dapat digunakan untuk menghasilkan nombor rawak dalam julat tertentu:

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

7. Pseudo vs Penjana Nombor Rawak Selamat

Pelaksanaan JDK standard java.util.Random menggunakan Linear Congruential Generator untuk memberikan nombor rawak. Masalah dengan algoritma ini adalah bahawa ia tidak kuat secara kriptografi, dan outputnya dapat diramalkan oleh penyerang.

Untuk mengatasi masalah ini, kita harus menggunakan java.security.SecureRandom di tempat yang kita perlukan keselamatan yang baik:

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

SecureRandom menghasilkan nilai rawak kriptografi kuat menggunakan penjana nombor pseudo-rawak kriptografi (CSPRNG).

Aplikasi tidak boleh menggunakan cara lain untuk menghasilkan nombor rawak yang selamat di tempat yang berkaitan dengan keselamatan.

8. Kesimpulannya

Dalam artikel ini, kami telah mempelajari beberapa cara untuk menghasilkan nombor rawak di Kotlin.

Seperti biasa, semua kod yang ditunjukkan dalam tutorial ini boleh didapati di GitHub.