1.はじめに

この短いチュートリアルでは、Kotlinを使って乱数を生成する方法を説明します。

2.

java.lang.Math

を使った乱数

Kotlinで乱数を生成する最も簡単な方法は

java.lang.Math

を使うことです。以下の例では、0から1の間のランダムな二重数が生成されます。

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

3.

ThreadLocalRandom

を使った乱数


java.util.concurrent.ThreadLocalRandom

を使用して、ランダムなdouble、integer、またはlongの値を生成することもできます。 ** この方法で生成された整数値とlong値は、正または負の両方になる可能性があります。


  • ThreadLocalRandom

    はスレッドセーフであり、マルチスレッド環境でより良いパフォーマンスを提供します。** すべてのスレッドに対して個別の

    Random

    オブジェクトが提供されるため、スレッド間の競合が軽減されます。

@Test
fun whenRandomNumberWithJavaThreadLocalRandom__thenResultsInDefaultRanges() {
    val randomDouble = ThreadLocalRandom.current().nextDouble()
    val randomInteger = ThreadLocalRandom.current().nextInt()
    val randomLong = ThreadLocalRandom.current().nextLong()
    assertTrue { randomDouble >= 0 }
    assertTrue { randomDouble < 1 }
    assertTrue { randomInteger >= Integer.MIN__VALUE }
    assertTrue { randomInteger < Integer.MAX__VALUE }
    assertTrue { randomLong >= Long.MIN__VALUE }
    assertTrue { randomLong < Long.MAX__VALUE }
}

4. Kotlin.jsを使った乱数

kotlin.jsライブラリの

Math

クラスを使ってランダムなdoubleを生成することもできます。

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

5.純粋なKotlinを使った与えられた範囲の乱数

純粋なKotlinを使って、


数字のリストを作成し、それをシャッフルしてから、そのリストから最初の要素を取り出すことができます。

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

6.

ThreadLocalRandom

を使用して特定の範囲内の乱数

セクション3で提示された

ThreadLocalRandom

は、与えられた範囲の乱数を生成するためにも使うことができます。

@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 < 10 }
    assertTrue { randomInteger >= 1 }
    assertTrue { randomInteger < 10 }
    assertTrue { randomLong >= 1 }
    assertTrue { randomLong < 10 }
}

7.まとめ

この記事では、Kotlinで乱数を生成する方法をいくつか学びました。

いつものように、このチュートリアルで紹介されているすべてのコードはhttps://github.com/eugenp/tutorials/tree/master/core-kotlin[GitHubに載っています]。