Kotlin Ternary Conditional Operator

1. Übersicht

Kurz gesagt, es gibt in Kotlin keinen ternären Operator . Die Verwendung von if- und when- Ausdrücken hilft jedoch, diese Lücke zu schließen.

In diesem Tutorial werden verschiedene Möglichkeiten untersucht, um den ternären Operator nachzuahmen.

2. ob und wann Ausdrücke

Im Gegensatz zu anderen Sprachen sind ob und wann in Kotlin Ausdrücke. Das Ergebnis eines solchen Ausdrucks kann einer Variablen zugewiesen werden .

Mit dieser Tatsache kann sowohl wenn als auch wann der ternäre Operator auf seine eigene Weise ersetzt werden.

2.1. Mit if-else

Lassen Sie uns einen Blick auf die Verwendung des if- Ausdrucks werfen , um den ternären Operator nachzuahmen:

val result = if (a) "yes" else "no"

Wenn im obigen Ausdruck a auf true gesetzt ist , wird unsere Ergebnisvariable auf yes gesetzt . Andernfalls wird es auf Nein gesetzt .

Es ist erwähnenswert, dass der Ergebnistyp vom Ausdruck auf der rechten Seite abhängt . Im Allgemeinen ist der Typ Beliebig . Wenn die rechte Seite beispielsweise einen Booleschen Typ hat, ist das Ergebnis ebenfalls Boolesch :

val result: Boolean = if (a == b) true else false

2.2. Verwenden wann

Wir können auch einen when- Ausdruck verwenden, um einen pseudo-ternären Operator zu erstellen:

val result = when(a) {   true -> "yes"   false -> "no" }

Der Code ist einfach, unkompliziert und leicht zu lesen. Wenn eine ist wahr , weisen Sie das Ergebnis zu sein , ja . Andernfalls weisen Sie es Nr . Zu.

2.3. Elvis-Betreiber

Manchmal verwenden wir if- Ausdrücke, um einen Wert zu extrahieren, wenn er nicht null ist, oder geben einen Standardwert zurück, wenn er null ist :

val a: String? = null val result = if (a != null) a else "Default"

Es ist auch möglich, dasselbe zu tun, wenn Ausdrücke:

val result = when(a) { null -> "Default" else -> a }

Da dies ein so verbreitetes Muster ist, hat Kotlin einen speziellen Operator dafür:

val result = a ?: "Default"

Das ?: Ist als Elvis-Operator bekannt. Es gibt den Operanden zurück, wenn er nicht null ist . Andernfalls wird der Standardwert zurückgegeben, der rechts vom Operator ?: Angegeben ist .

2.4. DSL

Es ist sicherlich eine Versuchung, ein DSL zu erstellen, das einen ternären Operator nachahmt. Die Sprachbeschränkungen von Kotlin sind jedoch zu streng, um eine 100% ige Reproduktion der traditionellen ternären Syntax zu ermöglichen.

Vermeiden wir daher diese Versuchung und verwenden Sie einfach eine der zuvor genannten Lösungen.

3. Fazit

Obwohl Kotlin keinen ternären Operator hat, gibt es einige Alternativen, die wir verwenden können - ob und wann . Sie sind kein syntaktischer Zucker, sondern vollständige Ausdrücke, wie wir zuvor gesehen haben.

Wie immer ist der Code auf GitHub verfügbar.