Kotlin is very much a better Java. A great example is this simple idiom for naming things:
open class Named<in T>(val name: String, check: (T) -> Boolean) : (T) -> Boolean by check { override fun toString() = name }
So I can write something like this:
fun maybe_three(check: (Int) -> Boolean) { if (check(3)) do_the_three_thing() else println("\"$check says\", Do not pass go.") } maybe_three(Named("Is it three?") { i -> 3 == i }) maybe_three(Named("Is it four?") { i -> 4 == i })
The first call of maybe_three
prints: Breakfast, lunch,
dinner. The second call prints: "Is it four?" says, Do not
pass go.
Many variations on this are possible, not just functions! What makes this
example work nicely is delegation—the
magical by
keyword— for the general feature of naming
things by overriding toString()
; and for the function
delegated to, the elegant lambda
(anonymous function) syntax for the last parameter. You can delegate
anything, not just functions, so you could make named maps, named business
objects, et al, by using delegation on existing types without
needing to change them.
No comments:
Post a Comment