What are alternatives for ternary operators in Kotlin?

Kotlin: Alternativer til den Ternære Operator

07/11/2000

Rating: 3.93 (6685 votes)

Mange udviklere, der kommer fra sprog som Java, C# eller JavaScript, er vant til at bruge den ternære operator (betingelse ? værdi_hvis_sand: værdi_hvis_falsk) for at skrive korte, betingede tildelinger. Det kan derfor komme som en overraskelse, at Kotlin bevidst har undladt denne operator. Men frygt ej! Kotlin tilbyder i stedet mere kraftfulde og læsbare alternativer, der er dybt integreret i sprogets design. Denne artikel vil guide dig igennem de forskellige måder, hvorpå du kan opnå den samme funktionalitet som den ternære operator, og hvorfor Kotlins tilgang ofte er at foretrække.

How to write ternary operators in Kotlin?
In Java, ternary operators are written with the following syntax condition is evaluated and executes true_block if true, else false_block is executed. There are no conditional operators in Kotlin. We can use conditional expressions such as if, when and try syntax We can write a simplified version in a single statement.
Indholdsfortegnelse

Hvorfor findes den ternære operator ikke i Kotlin?

Den primære årsag til, at Kotlin ikke har en ternær operator, er, at kontrolstrukturer som if, when og try-catch er udtryk (expressions) og ikke kun udsagn (statements). Forskellen er fundamental:

  • Et udsagn (statement) udfører en handling, men returnerer ikke en værdi. Et traditionelt if-udsagn i Java er et eksempel på dette.
  • Et udtryk (expression) evalueres til en værdi og kan derfor tildeles til en variabel, returneres fra en funktion eller bruges som en del af et større udtryk.

Da if i Kotlin er et udtryk, kan det direkte returnere en værdi. Dette gør en separat ternær operator overflødig. Kotlins designere prioriterede læsbarhed og mente, at if (a) b else c er mere eksplicit og lettere at forstå for alle udviklere end den mere kryptiske a ? b: c syntaks.

Det primære alternativ: if-else som et udtryk

Den mest direkte erstatning for den ternære operator i Kotlin er at bruge en if-else-blok som et udtryk. Syntaksen er enkel og letlæselig.

Lad os se på et klassisk eksempel, hvor vi finder det mindste af to tal. I Java kunne man bruge den ternære operator:

// Java eksempel int num1 = 82731, num2 = 32854; int small = num1 > num2 ? num2: num1; System.out.println(small);

I Kotlin opnår vi præcis det samme med et if-else-udtryk på en enkelt linje:

// Kotlin eksempel fun main() { val num1 = 82731 val num2 = 32854 val small = if (num1 > num2) num2 else num1 println(small) }

Her evalueres if (num1 > num2). Hvis betingelsen er sand, returnerer udtrykket værdien num2. Hvis den er falsk, returnerer det værdien fra else-grenen, altså num1. Resultatet tildeles direkte til variablen small. Det er lige så kortfattet som den ternære operator, men bruger en velkendt og letforståelig syntaks.

Why is Kotlin ternary not applicable?
Because of the if-else expression in kotlin language if, while are the conditional expression so it will manage the operands based on the conditions. So ternary is not applicable and not useable for the programmer. This is a Guide to Kotlin Ternary.

Håndtering af flere betingelser: if-else-if og 'when'

Når logikken bliver mere kompleks end en simpel sand/falsk-betingelse, skinner Kotlins udtryksbaserede tilgang virkelig igennem. Her har vi to fremragende værktøjer: if-else-if-stigen og det endnu mere kraftfulde when-udtryk.

Brug af if-else-if-stigen

Du kan kæde flere if-else-betingelser sammen for at håndtere flere mulige udfald. Husk, at den sidste else er obligatorisk, når du bruger det som et udtryk, da udtrykket altid skal garantere en værdi.

Forestil dig et simpelt program, der giver en besked baseret på brugerens menuvalg:

fun main() { println("Vælg din bestilling") println("a: Pizza\nb: Pommes Frites\nc: Burger") val svar = readLine() val besked = if (svar == "a") { "Lækkert! Din pizza bliver leveret snarest." } else if (svar == "b") { "Godt valg! Dine pommes frites er hos dig om 30 minutter." } else if (svar == "c") { "Din burger er næsten klar, velbekomme!" } else { "Ugyldig bestilling." } println(besked) }

Dette er funktionelt, men kan blive lidt rodet med mange betingelser. Her kommer when ind i billedet.

Det elegante alternativ: 'when'-udtrykket

when i Kotlin er en slags forbedret `switch`-statement, men det kan også bruges som et udtryk, hvilket gør det til et fantastisk alternativ til komplekse if-else-if-kæder. Det er ofte mere læsbart og struktureret.

Is there a ternary operation in Kotlin?
There is no ternary operation in Kotlin, but there are some fun ways to work around that. As others have pointed out, a direct translation into Kotlin would look like this: But, personally, I think that can get a bit cluttered and hard to read. There are some other options built into the library. You can use takeIf {} with an elvis operator:

Lad os omskrive menu-eksemplet med when:

// Samme menu-eksempel med 'when' val besked = when (svar) { "a" -> "Lækkert! Din pizza bliver leveret snarest." "b" -> "Godt valg! Dine pommes frites er hos dig om 30 minutter." "c" -> "Din burger er næsten klar, velbekomme!" else -> "Ugyldig bestilling." } println(besked)

Som du kan se, er koden renere og mere overskuelig. when kan også håndtere mere komplekse betingelser, såsom at tjekke for værdier inden for et interval (range):

fun main() { print("Indtast procent: ") val procent = readLine()?.toIntOrNull() ?: 0 val karakter = when (procent) { in 90..100 -> 'A' in 80..89 -> 'B' in 70..79 -> 'C' in 60..69 -> 'D' else -> 'E' } println("Karakter: $karakter") }

Specialtilfældet: Null-checks med Elvis-operatoren (?:)

Et meget almindeligt scenarie, hvor den ternære operator ofte bruges, er til at tjekke for null og tildele en standardværdi. Kotlin, med sit fokus på null-sikkerhed, har en dedikeret og elegant operator til netop dette formål: Elvis-operatoren (?:).

Navnet kommer af, at operatoren, hvis man vender hovedet på sned, ligner en smiley med Elvis Presleys karakteristiske frisure.

Syntaksen er: val resultat = muligvisNullVærdi ?: standardVærdi

Operatoren fungerer således: Hvis udtrykket på venstre side ikke er null, returneres dets værdi. Hvis det *er* null, returneres værdien på højre side.

Lad os se et eksempel, hvor vi vil sammensætte et fuldt navn, men hvor efternavnet kan være null.

What are alternatives for ternary operators in Kotlin?
This tutorial teaches alternatives for Ternary Operators in Kotlin like if-else expression, if-else-if ladder, when expression, and Elvis operator. Syntax: We can put a condition using <, >, ==, etc., in a condition block that returns Boolean.
fun main() { val fornavn: String? = "Katie" val efternavn: String? = null // Uden Elvis-operatoren ville det se sådan ud: // val fuldeNavnGammel = fornavn + " " + (if (efternavn != null) efternavn else "") // Med Elvis-operatoren: val fuldeNavn = fornavn + " " + (efternavn ?: "") println(fuldeNavn) // Output: Katie }

Elvis-operatoren gør koden ekstremt kompakt og letlæselig for null-håndtering, hvilket er en meget hyppig opgave i softwareudvikling.

Sammenligningstabel

For at give et hurtigt overblik, er her en tabel, der sammenligner den traditionelle ternære operator med Kotlins alternativer.

ScenarieJava (Ternær Operator)Kotlin (Alternativ)Kommentar
Simpel betingelseval x = a > b ? a: b;val x = if (a > b) a else bLige så kortfattet, men bruger standard if-else syntaks.
Flere betingelserIndlejret ternær (ofte ulæseligt)val x = when { ... }when er markant mere læsbart og skalerbart.
Null-checkval x = y != null ? y: "default";val x = y ?: "default"Elvis-operatoren er specialiseret og ekstremt koncis.

Ofte Stillede Spørgsmål (OSS)

Spørgsmål: Kommer jeg til at savne den ternære operator i Kotlin?
Svar: I starten vil du måske instinktivt forsøge at skrive ? :, men du vil hurtigt vænne dig til at bruge if-else som et udtryk. De fleste udviklere finder Kotlins måde mere læsbar og fleksibel i længden, især når logikken bliver mere kompleks.
Spørgsmål: Kan jeg bruge when til en simpel sand/falsk-betingelse?
Svar: Ja, det kan du godt. Du kan skrive when (betingelse) { true -> værdi1; false -> værdi2 }. Dog er et simpelt if-else-udtryk generelt anset for at være mere idiomatisk og en smule kortere for dette specifikke tilfælde.
Spørgsmål: Hvad er den største fordel ved at bruge udtryk i stedet for udsagn?
Svar: Det fører til mere koncis og funktionel kode. Da et udtryk altid returnerer en værdi, kan du tildele resultatet direkte til en val (en uforanderlig variabel), hvilket reducerer behovet for midlertidige, foranderlige variabler (var). Dette kan gøre din kode mere sikker og lettere at ræsonnere om.

Konklusion

Selvom Kotlin ikke har en ternær operator, er det ikke en mangel, men et bevidst designvalg. Ved at gøre kontrolstrukturer som if og when til kraftfulde udtryk, giver sproget udviklere værktøjer, der er mere fleksible, skalerbare og frem for alt mere læsbare. Fra det simple if-else-udtryk, der direkte erstatter den ternære operator, til det elegante when-udtryk for kompleks logik, og den specialiserede Elvis-operator for null-håndtering, har du alt, hvad du behøver for at skrive ren, udtryksfuld og effektiv betinget kode i Kotlin.

Hvis du vil læse andre artikler, der ligner Kotlin: Alternativer til den Ternære Operator, kan du besøge kategorien Sundhed.

Go up