Dapatkan Nomor Acak di Kotlin

1. Perkenalan

Tutorial singkat ini akan mendemonstrasikan cara menghasilkan angka acak menggunakan Kotlin.

2. Nomor Acak Menggunakan java.lang.Math

Cara termudah untuk menghasilkan nomor acak di Kotlin adalah dengan menggunakan java.lang.Math . Contoh di bawah ini akan menghasilkan angka ganda acak antara 0 dan 1.

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

3. Nomor Acak Menggunakan ThreadLocalRandom

Kita juga dapat menggunakan java.util.concurrent.ThreadLocalRandom untuk menghasilkan nilai ganda, bilangan bulat, atau panjang acak. Nilai bilangan bulat dan panjang yang dihasilkan dengan cara ini bisa menjadi positif atau negatif .

ThreadLocalRandom aman untuk thread dan memberikan kinerja yang lebih baik dalam lingkungan multithread karena menyediakanobjek Random terpisahuntuk setiap thread dan dengan demikian mengurangi perselisihan di antara thread:

@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. Nomor Acak Menggunakan Kotlin.js

Kita juga bisa menghasilkan ganda acak menggunakan kelas Matematika dari pustaka kotlin.js .

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

5. Nomor Acak dalam Rentang Tertentu Menggunakan Kotlin Murni

Dengan menggunakan Kotlin murni, kita dapat membuat daftar angka, mengocoknya dan kemudian mengambil elemen pertama t dari daftar itu:

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

6. Nomor Acak dalam Rentang Yang Diberikan Menggunakan ThreadLocalRandom

ThreadLocalRandom yang disajikan di bagian 3 juga dapat digunakan untuk menghasilkan nomor acak dalam rentang 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. Generator Nomor Acak Pseudo vs Aman

Implementasi JDK standar java.util.Random menggunakan Generator Kongruensial Linier untuk memberikan nomor acak. Masalah dengan algoritme ini adalah tidak kuat secara kriptografik, dan keluarannya dapat diprediksi oleh penyerang.

Untuk mengatasi masalah ini, kita harus menggunakan java.security.SecureRandom di tempat-tempat di mana kita membutuhkan keamanan yang baik:

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

SecureRandom menghasilkan nilai acak yang kuat secara kriptografik menggunakan generator nomor acak-semu (CSPRNG) yang kuat secara kriptografis.

Aplikasi tidak boleh menggunakan cara lain untuk menghasilkan nomor acak yang aman di tempat-tempat yang terkait dengan keamanan.

8. Kesimpulan

Di artikel ini, kita telah mempelajari beberapa cara untuk menghasilkan nomor acak di Kotlin.

Seperti biasa, semua kode yang disajikan dalam tutorial ini dapat ditemukan di GitHub.