Mich hat gestört, dass man die Kurzschreibweise für Funktionen (mit Gleichheitszeichen) nicht verwenden kann, wenn man z.B. vorher noch requirements testet:
fun foo(arg:Int): Int {
require(arg >= 0) { "muss positiv sein" }
return Math.sqrt(arg)
}
Noch ein guter Tipp für data class: Wenn man dessen Konstruktor-Parameter noch irgendwie manipulieren oder testen will, hilft ein “Fake-Konstruktor” weiter. Nehmen wie dieses Beispiel, wo die übergebene Liste “eigentlich” vorher sortiert werden soll:
data class Foo(val list:List<String>)
Die Lösung ist etwas umständlich, funktioniert aber einwandfrei:
data class Foo private constructor (val list: List<String>) {
companion object Companion {
operator fun invoke(list: List<String>) = Foo(list.sorted())
}
}
Falls jemand einen hübscheren Weg weiß, möge er ihn preisgeben…