!!! Listing aus dem Artikel "Keine "Inselloesung" !!! von Kai Kenig -- !!! erschienen in der iX 4/2016, S. 80 !!! Listing 1 @ü.li:Listing 1:Einfache Java-Funktion samt Entsprechung in Kotlin @li:// Java: public String listConvert(Collection collection) { StringBuilder sb = new StringBuilder(); sb.append("{"); Iterator iterator = collection.iterator(); while (iterator.hasNext()) { Integer element = iterator.next(); sb.append(element); if (iterator.hasNext()) { sb.append(", "); } } sb.append("}"); return sb.toString(); } // Kotlin: fun listConvert(collection: Collection): String { val sb = StringBuilder() sb.append("{") val iterator = collection.iterator() while (iterator.hasNext()) { val element = iterator.next() sb.append(element) if (iterator.hasNext()) { sb.append(", ") } } sb.append("}") return sb.toString() } @ü.li:Listing 2:Kotlin-Funktion aus Listing 1 im echten Kotlin-Stil @li:fun listConvert(collection: Collection): String { return collection.joinToString(prefix = "{",postfix = "}") } @ü.li:Listing 3:Unit als Rückgabetyp nutzen !!! oben: Unit -- bitte kursiv @li:interface DataProcessor { fun process(): T } class NoResultProcessor : DataProcessor { override fun process() { ... } } @ü.li:Listing 4:Defaultwerte für Funktionsparameter @li:fun bar(name: String, number: Int = 23, toUpperCase: Boolean = false): String { return (if (toUpperCase) name.toUpperCase() else name) + number } @ü.li:Listing 5:Spezialisierter getter für zur Laufzeit bestimmte Eigenschaft !!! oben: getter -- bitte kursiv @li:class Member(..., val memberCode: String, ...) { val groupCode: String get() = memberCode.substringBefore('_') } @ü.li:Listing 6:Customer-Klasse nutzt Enumerator !!! oben: Customer -- bitte kursiv @li:class Customer(val firstName:String, val lastName:String, val locale: Locale = Locale.DE_DE) { fun sayHello() = println("${locale.hello}, $firstName $lastName") } ... val myCustomer = Customer("Sandra", "Musterfrau") myCustomer.sayHello() ... @ü.li:Listing 7:Fallunterscheidung mit Tages-Enum @li:... when (setOf(day1,day2)) { setOf(Day.SAT, Day.SUN) -> print("It's a weekend night, let's party!") setOf(Day.MON, Day.TUE) -> print("Work on Tuesday, go to bed early!") ... } @ü.li:Listing 8:Schlüsselwort when mit "Smart Casting" !!! oben: when -- bitte kursiv @li:fun whatIs(x: Any) { when (x) { is Int -> println(x + 42) is String -> println(x.length) is IntArray -> println(x.sum()) } } ... whatIs(4) // 46 whatIs("4") // 1 whatIs(intArrayOf(1,2,3,4,5)) // 15 ... @ü.li:Listing 9:Map-Funktion höherer Ordnung @li:fun List.map(transform: (T) -> R): List { val result = arrayListOf() for (item in this) result.add(transform(item)) return result } @ü.li:Listing 10:Singleton-Logger @li:object Logger { val tag = "TAG" fun d(message: String) { Log.d(tag, message) } }