Programmiersprache: Kotlin 1.7 Beta bringt min() und max() zurück

Das Kotlin-Update führt Neuerungen beim Aufrufen generischer Builder-Funktionen ein und stabilisiert die neuen generischen Typen, die auf keinen Fall Null sind.

In Pocket speichern vorlesen Druckansicht 21 Kommentare lesen

(Bild: Itmo.News)

Lesezeit: 2 Min.

JetBrains hat das nächste Release seiner Programmiersprache Kotlin vorgelegt. Abweichend von den bisherigen Gepflogenheiten erscheint Kotlin 1.7 jedoch zunächst nicht als Meilenstein, sondern ist als Betaversion gekennzeichnet. Als Grund für den damit einhergehenden Wechsel in der Terminologie gibt JetBrains an, dass die Bezeichnung "Beta" gemeinhin für den Abschluss der Phase von Neuentwicklungen stehe und bis zum finalen Release nur noch Verbesserungen und Stabilisierungen einfließen werden. "Beta" sei darüber hinaus der unmissverständliche Aufruf an die Community, Feedback zur neuen Version zu geben.

Wichtige Neuerungen betreffen unter anderem die Builder-Inferenz. Die spezielle Art der Typ-Inferenz erleichtert Entwicklerinnen und Entwicklern das Aufrufen generischer Builder-Funktionen, indem sie dem Compiler ermöglicht, die Typargumente eines Aufrufs anhand der Typinformationen über andere Aufrufe innerhalb seines Lambda-Arguments abzuleiten. Ab Kotlin 1.7-Beta wird die Builder-Inferenz immer dann automatisch aktiviert, wenn eine reguläre Typinferenz nicht genügend Informationen über einen Typ bekommt, ohne die in Kotlin 1.6 eingeführte Compileroption -Xenable-builder-inference anzugeben. Somit lassen sich nun eigene Builder für die Typinferenz erstellen, ohne zusätzlich Annotationen oder Optionen anwenden zu müssen.

Zurückgekehrt mit dem neuen Release sind die Collection-Funktionen min() und max(). JetBrains hatte sie in Version 1.4 umbenannt in minOrNull () und maxOrNull (), um deutlich zu machen, dass diese Funktionen null zurückgeben, wenn die Empfängerkollektion leer ist. Die damalige Anpassung sollte dazu dienen, eine dem Funktionsverhalten angepasste Nomenklatur für die Collections-API in Kotlin umzusetzen. Nun kehren die beiden genannten Funktionen wie auch minBy(), maxBy(), minWith() und maxWith() mit einem Non-Nullable Return Type zurück. Alle Funktionen geben nun das exakte Element der Kollektion zurück oder lösen eine Exception aus.

fun main() {
    val numbers = listOf<Int>()
    println(numbers.maxOrNull()) // "null"
    println(numbers.max()) // "Exception in� Collection is empty."
}

Die in Version 1.6.20 erstmals vorgestellten "Definitely Non-Nullable Types", die das Zusammenspiel mit Java beim Erweitern von generischen Klassen und Interfaces verbessern sollen, hat JetBrains weiter stabilisiert – sie sind ab sofort auch standardmäßig aktiviert.

Ein vollständiger Überblick aller weiteren Neuerungen und Verbesserungen in Kotlin 1.7-Beta, darunter auch ein Update des neuen Kotlin/Native Memory Manager, findet sich im Kotlin-Blog – einschließlich detaillierter Hinweise zur Installation der Preview in IntelliJ IDEA und Android Studio.

(map)