/ API, KOTLIN

Rolling dice in Kotlin

A little more than 2 years ago, I wrote a post on how you could create a Die rolling API in Scala. As I’m more and more interested in Kotlin, let’s do that in Kotlin.

At the root of the hierarchy lies the Rollable interface:

interface Rollable<T> {
    fun roll(): T
}

The base class is the Die:

open class Die(val sides: Int): Rollable<Int> {

    init {
        val random = new SecureRandom()
    }

    override fun roll() = random.nextInt(sides)
}

Now let’s create some objects:

object d2: Die(2)
object d3: Die(3)
object d4: Die(4)
object d6: Die(6)
object d10: Die(10)
object d12: Die(12)
object d20: Die(20)

Finally, in order to make code using Die instances testable, let’s change the class to inject the Random instead:

open class Die(val sides: Int, private val random: Random = SecureRandom()): Rollable<Int> {
    override fun roll() = random.nextInt(sides)
}

Note that the random property is private, so that only the class itself can use it - there won’t even be a getter.

The coolest thing about that I that I hacked the above code in 15 minutes in the plane. I love Kotlin :-)

Nicolas Fränkel

Nicolas Fränkel

Nicolas Fränkel is a technologist focusing on cloud-native technologies, DevOps, CI/CD pipelines, and system observability. His focus revolves around creating technical content, delivering talks, and engaging with developer communities to promote the adoption of modern software practices. With a strong background in software, he has worked extensively with the JVM, applying his expertise across various industries. In addition to his technical work, he is the author of several books and regularly shares insights through his blog and open-source contributions.

Read More
Rolling dice in Kotlin
Share this