Kotlin で乱数を取得する

David Mbochi Njonge 2023年6月20日
  1. Kotlin で IntRangerandom() 拡張関数を使用する
  2. Kotlin で範囲を含む random() を使用する
  3. Kotlin で排他的な範囲で random() を使用する
  4. Kotlin で Iterableshuffled() 拡張関数を使用する
  5. Kotlin で ThreadLocalRandom を使用する
  6. まとめ
Kotlin で乱数を取得する

乱数は、各数値が生成される確率が等しいことを保証するアルゴリズムを使用して、一連の数値から生成されます。

数値以外のさまざまなタイプのデータ型を生成できます。 たとえば、java.utilUUID.randomUUID() メソッドを使用して、ランダムな文字列を生成できます。

開発者がランダムな文字列を生成できるようにするこの機能は、データの一意の識別子の生成、一意のパスワードの生成、および e コマース環境での注文追跡識別子の生成に役立つため、非常に重要です。

このチュートリアルでは、Kotlin を使用して乱数を生成するために活用する方法を示します。

Kotlin で IntRangerandom() 拡張関数を使用する

拡張関数は、既存のコードを変更したり、デコレータ パターンなどの設計パターンを使用したりせずに、クラスに機能を追加する方法です。

IntelliJ 開発環境に移動し、File > New > Project を選択します。 開いたウィンドウで、プロジェクトのnamekotlin-randomと入力し、LanguageセクションでKotlinを選択し、Build SystemセクションでIntellijを選択し、最後にCreateボタンを押します 新しいプロジェクトを生成します。

Kotlin で範囲を含む random() を使用する

kotlin フォルダーの下に Main.kt ファイルを作成し、次のコードをコピーしてファイルに貼り付けます。

fun exampleOne(): Int{
   return (0..10).random();
}
fun main(){
    println("... Example One ...")
    println(exampleOne());
}

このコードでは、Int を返す exampleOne() という名前のメソッドを作成しました。 整数は、メソッド内の random() 関数によってランダムに生成されます。

random() 関数は IntRange の拡張関数であり、指定された範囲からランダムに生成された要素を返します。

範囲が空の場合、メソッドは IllegalArgumentException をスローします。 範囲の最初の要素が範囲の最後の要素より大きい場合、範囲は空です。

random() 関数は、RandomnextInt() 拡張関数を裏で使用して、指定された範囲内で均一に分散される数値を生成します。

生成される数値は、0 から 10 までの任意の数値です。 上記のコードを複数回実行すると、範囲内の任意の乱数が得られることに気付くでしょう。

出力:

... Example One ...
3

Kotlin で排他的な範囲で random() を使用する

前の例をコメントアウトし、次のコードをコピーして Main.kt ファイルに貼り付けます。

fun exampleTwo(): Int{
    return (0 until  10).random();
}
fun main(){
    println("... Example Two ...")
    println(exampleTwo());
}

前の例では、rangeTo() メソッドを表すために使用される範囲で .. を使用しました。 ただし、この例では、until を使用しました。これは、Int.until() 拡張関数を示します。

until() 拡張関数は、開始値から提供された最後の値を除外するまでの範囲を返します。 開始値は、現在の値が作用していることを示すために this として示されることがよくあります。

前の例を複数回実行すると、常に乱数が生成されますが、値 10 は生成されません。

出力:

... Example Two ...
5

Kotlin で Iterableshuffled() 拡張関数を使用する

shuffled() 関数は Iterable インターフェイスの拡張関数であり、要素の List を返します。 返されたリストにより、Collection インターフェイスの random() 拡張関数を使用して乱数を生成できます。

前の例についてコメントし、次のコードをコピーして Main.kt ファイルに貼り付けます。

fun exampleThree(): Int{
  return (0..10).shuffled().random()
}
fun main(){
    println("... Example Three ...")
    println(exampleThree());
}

このコードでは、メソッドで生成された整数を返す exampleThree() という名前のメソッドを作成しました。

0 から 10 までの数値の範囲は、shuffled() 関数によってシャッフルされたリストとして返されます。 範囲は包括的であることに注意してください。

範囲を排他的にしたい場合は、前の例で説明したように、Int.until() 関数を使用します。

random() 関数はシャッフルされたリストから乱数を生成し、リストが空の場合、関数は NoSuchElementException をスローします。

このコードを複数回実行すると、実行ごとにシャッフルされたリストから乱数が生成されます。

出力:

... Example Three ...
7

Kotlin で ThreadLocalRandom を使用する

現在のスレッドは、ThreadLocalRandom を使用して乱数を生成します。 このジェネレーターは、主に並列プログラムでオーバーヘッドと競合を削減するために使用されます。

ジェネレーターは、異なるプログラムがスレッド プールで並列に乱数にアクセスする場合に特に使用されます。

すべての使用法が ThreadLocalRandom.current.nextX() の形式である場合、XnextInt()nextLong() などのいずれかになります。これにより、ジェネレーターが複数のスレッド間で共有されないことが保証されます。 .

current() メソッドは、ThreadLocalRandom のオブジェクトを返す静的メソッドであり、現在のスレッドによってのみ呼び出すことができます。

前のコードにコメントし、次のコードをコピーして、Main.kt ファイルの後に貼り付けます。

import java.util.concurrent.ThreadLocalRandom

fun exampleFour(bound: Int): Int{
    return ThreadLocalRandom.current().nextInt(bound)
}
fun main(){
     println("... Example Four ...")
    println(exampleFour(9))
}

nextInt() メソッドは、0 から bound として指定した数値を除いて一様に分布する疑似乱数を生成します。

bound が正でない場合、メソッドは IllegalArgumentException をスローします。 上記のコードを複数回実行すると、均一に生成された別の疑似乱数が得られます。

出力:

... Example Four ...
3

まとめ

このチュートリアルでは、Kotlin で乱数を生成するさまざまな方法を説明しました。カバーされるアプローチには、次のようなものがあります。

  1. IntRangerandom() 拡張関数を使用します。
  2. Iterableshuffled() 拡張関数を使用する。
  3. ThreadLocalRandom を使用します。

また、範囲内で .. または until を使用して、生成された範囲を包括的または排他的に変更することも学びました。

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub