Kotlin Ternary voorwaardelijke operator

1. Overzicht

Kort gezegd is er geen ternaire operator in Kotlin. Gebruik echter als en wanneer uitdrukkingen helpen om deze leemte op te vullen.

In deze tutorial zullen we een paar verschillende manieren bekijken om de ternaire operator na te bootsen.

2. als en wanneer Uitdrukkingen

In tegenstelling tot andere talen, als en wanneer in Kotlin zijn uitdrukkingen. Het resultaat van zo'n uitdrukking kan aan een variabele worden toegewezen.

Gebruikmakend van dit feit, beide als en wanneer kunnen op hun eigen manier worden vervangen door de ternaire operator.

2.1. If-else gebruiken

Laten we eens kijken naar het gebruik van de als uitdrukking om de ternaire operator na te bootsen:

val resultaat = if (a) "ja" anders "nee"

In de bovenstaande uitdrukking, if een ingesteld op waar, onze resultaat variabele is ingesteld op Ja. Anders is het ingesteld op Nee.

Het is vermeldenswaard dat het resultaattype hangt af van de uitdrukking aan de rechterkant. Over het algemeen is het type Ieder. Als de rechterkant bijvoorbeeld een Boolean type, het resultaat zal zijn Boolean ook:

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

2.2. Gebruik makend van wanneer

We kunnen ook een wanneer expressie om een ​​pseudo-ternaire operator te maken:

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

De code is eenvoudig, duidelijk en gemakkelijk te lezen. Als een is waar, wijs het resultaat zijn Ja. Wijs het anders toe aan Nee.

2.3. Elvis-operator

Soms gebruiken we als expressies om enige waarde te extraheren wanneer dat niet het geval is nul of retourneer een standaard exemplaar wanneer dat het geval is nul:

val a: String? = null val resultaat = if (a! = null) a else "Standaard"

Het is ook mogelijk om hetzelfde te doen met wanneer uitdrukkingen:

val resultaat = wanneer (a) {null -> "Standaard" else -> a}

Omdat dit zo'n veel voorkomend patroon is, heeft Kotlin er een speciale operator voor:

val result = a?: "Standaard"

De ?: staat bekend als de Elvis-operator. Het retourneert de operand als dat niet het geval is nul. Anders retourneert het de standaardwaarde die rechts van het ?: operator.

2.4. DSL

Er is zeker een verleiding om een ​​DSL te maken die een ternaire operator nabootst. Maar de taalbeperkingen van Kotlin zijn te strak om een ​​100% reproductie van de traditionele ternaire syntaxis mogelijk te maken.

Laten we daarom deze verleiding vermijden en gewoon een van de eerder genoemde oplossingen gebruiken.

3. Conclusie

Hoewel Kotlin geen ternaire operator heeft, zijn er enkele alternatieven die we kunnen gebruiken - als en wanneer. Ze zijn geen syntactische suiker, maar complete uitdrukkingen, zoals we eerder hebben gezien.

Zoals altijd is de code beschikbaar op GitHub.