Kotlin is fun
!
Over the last year, I have been exclusively writing new Android code (and converting old code) in Kotlin. It’s such an expressive, succint and fun (excuse the fun
pun) language to write with. I won’t go into all the reasons right now plus many others have written about this before.
Today I want to share a small snippet which demonstrates a recent warm and fuzzy feeling I got writing in Kotlin.
I have been working on a requirement to measure network calls in our app using an OKHttp NetworkInterceptor
and log the stats to our analytics platform.
The obvious way to write this is something like this (code is simplified):
fun intercept() {
// ...
val start = SystemClock.elapsedRealtime()
val result = doSomethingWeWantToMeasure()
val duration = SystemClock.elapsedRealtime() - start
log(duration)
// ...
}
This works fine but the meat of the function’s logic is polluted with measurement code making it harder for your colleagues to grok what’s going on.
Enter inline
generic function with lambda
Here’s how an inline function can help this code:
fun intercept() {
// ...
val result = measure { doSomethingWeWantToMeasure() }
// ...
}
inline fun <T> measure(action: () -> T) {
val start = SystemClock.elapsedRealtime()
val result = action()
val duration = SystemClock.elapsedRealtime() - start
log(duration)
return result
}
Better, no? Now I can concentrate on reading what the intercept()
function’s main intention is without skipping over lines of measurement code. We also benefit from the option of reusing that code in other places where we want to profile performance.
What is inline
?
I am still quite new to this so this may not be 100% for the experts but my simple explanation is:
inline
allows you to call a function with a lambda argument within a closure ({ ... }
) rather than passing the lambda likemeasure(myLamda)
.
You can read the longer, more technical (and possibly more accurate) explanation here.
In the mean time, happy Kotlin-ing and feel free to ask questions or add your favourite Kotlin warm-and-fuzzies in the comments.