This part of the Kotlin Koans tutorial involved extension functions. This is a construct I have never seen in programming before, so it took me a little bit to get an idea of what it is and when to use this feature.
It seems as if the idea here is to add features to a class without have to use inheritence or some sort of delegate object. Here is the Kotlin code.
//This is the class we are adding to data class RationalNumber(val numerator: Int, val denominator: Int) //We are adding an r() method to Int which //returns an instance of RationalNumber fun Int.r(): RationalNumber = RationalNumber(toInt(), 1) //We add an r() method to Pair which returns an //instance of RationalNumber fun Pair.r(): RationalNumber = RationalNumber(first, second)
The Kotlin documentation has a motivation section that explains the purpose behind extensions. They explain that in many cases in Java, we end up with FileUtils, StringUtils, *Utils classes. In the ideal world, we would want to add features to say the List class directly rather than having a ListUtils class with a bunch of static methods.
We get something like this in JDK8 with default methods that can get placed in an interface. However, that still requires us to extend and interface to add extra methods. Extensions let us work directly on the classes we are already using.
You can click here to see Part 9