Chapter 9. Multi- to Single-Expression Functions
Nat and Duncan both love Kotlin’s single-expression function definitions. When should we use this form, why might we prefer it, and what Kotlin features can we use to make more functions single expressions?
As with Java, the code in a Kotlin function is usually { defined inside braces } and uses
return to define the result of the function (unless it is Unit, Kotlin’s alias for void):
funadd(a:Int,b:Int):Int{returna+b}
If the top level of the code is a single expression though, we can optionally drop the result type, and define the code with an expression after an equals sign:
funaddToo(a:Int,b:Int):Int=a+b
We can read this as: the result of function add equals a + b.
Which makes sense for a single expression, and can also read nicely when that expression is itself composed of subexpressions:
funmax(a:Int,b:Int):Int=when{a>b->aelse->b}
This interpretation makes less sense for functions that have side effects, especially those that perform I/O or write to mutable state. For instance:
funprintTwice(s:String):Unit=println("$s\n$s")
We can’t read this as the result of printTwice equals println(..), because println doesn’t have a result, or at least it doesn’t return one.
Its function is entirely side effects, as we explored in Chapter 7.
Reserve Single-Expression Functions for Calculations
If we adopt a convention of reserving single-expression functions for calculations (“Calculations”), then ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access