01/11/2023
I programmeringens verden er evnen til at træffe beslutninger fundamental. Ligesom vi i vores dagligdag tager en jakke på, hvis det er koldt, eller lader den ligge, hvis det er varmt, skal vores computerprogrammer kunne reagere forskelligt baseret på forskellige situationer. Disse beslutningsprocesser kaldes betingelser, og de er en af de vigtigste grundpiller i al softwareudvikling. Uden dem ville kode være statisk og ude af stand til at håndtere den dynamiske natur i den virkelige verden. I Kotlin, et moderne og kraftfuldt programmeringssprog, bruger vi primært if/else-sætninger til at implementere denne logik. Denne artikel vil guide dig igennem alt, hvad du behøver at vide for at mestre betingede kommandoer i Kotlin.
Logical operators are used to determine the logic between variables or values. Given that x = 6 and y = 3, the table below explains the logical operators: JavaScript also contains a conditional operator that assigns a value to a variable based on some condition. let voteable = (age < 18) ? "Too young":"Old enough";[/caption]
Hvordan man udtrykker betingelser med if/else
Kernen i enhver betingelse er et spørgsmål, der kan besvares med enten 'ja' eller 'nej' – eller i programmeringens sprog, true eller false. Disse værdier kaldes boolean-værdier. For at stille disse spørgsmål i kode bruger vi sammenligningsoperatorer til at skabe booleske udtryk.
Forståelse af booleske udtryk
Et boolesk udtryk er simpelthen en stump kode, der evalueres til enten true eller false. Det kombinerer værdier, variabler og operatorer. Du kender måske allerede tildelingsoperatoren (=), som giver en variabel en værdi, f.eks. val x = 5. Sammenligningsoperatorer er anderledes; de sammenligner værdierne på hver side og returnerer et boolesk resultat.
Lad os se på den mest almindelige: lighedsoperatoren (==).
println(5 == 5)
Hvis du kører denne kode, vil outputtet være true, fordi 5 er lig med 5. Hvis du derimod skriver println(5 == 6), vil outputtet være false.
Der findes flere sammenligningsoperatorer, som er essentielle at kende:
<(mindre end)>(større end)<=(mindre end eller lig med)>=(større end eller lig med)!=(ikke lig med)
At mestre disse er det første skridt til at skrive effektive if-sætninger.
Den simple if-sætning
Nu hvor vi forstår booleske udtryk, kan vi bygge vores første if-sætning. Forestil dig, at vi programmerer logikken for et trafiklys. Den første og vigtigste regel er: Hvis lyset er rødt, skal du stoppe.
I Kotlin udtrykkes dette således:
fun main() { val trafficLightColor = "Red" if (trafficLightColor == "Red") { println("Stop") } }Lad os bryde det ned: Vi starter med nøgleordet if, efterfulgt af vores betingelse (trafficLightColor == "Red") i parentes. Da værdien af trafficLightColor er "Red", evalueres udtrykket til true. Derfor udføres koden inden i krølleparenteserne { }, og programmet udskriver "Stop". Hvis variablen havde en anden værdi, ville betingelsen være false, og intet ville blive udskrevet.
Udvidelse med else og else if
En simpel if-sætning håndterer kun én situation. Men hvad skal der ske, hvis lyset ikke er rødt? Her kommer else-grenen ind i billedet.
Tilføjelse af en else-gren
En else-gren giver en alternativ handling, der skal udføres, når if-betingelsen er falsk. Den skal altid følge umiddelbart efter en if-bloks lukkende krølleparentes.
fun main() { val trafficLightColor = "Green" if (trafficLightColor == "Red") { println("Stop") } else { println("Go") } }I dette eksempel er trafficLightColor sat til "Green". Betingelsen trafficLightColor == "Red" er derfor false. Programmet springer koden i if-blokken over og udfører i stedet koden i else-blokken. Resultatet er, at "Go" bliver udskrevet.
Håndtering af flere betingelser med else if
Et trafiklys har mere end to farver. Der er også gul, som betyder 'sæt farten ned'. For at håndtere tre eller flere mulige udfald kan vi tilføje en eller flere else if-grene mellem if og else.
fun main() { val trafficLightColor = "Yellow" if (trafficLightColor == "Red") { println("Stop") } else if (trafficLightColor == "Yellow") { println("Slow down") } else { println("Go") } }Her tjekker programmet betingelserne i rækkefølge:
- Er
trafficLightColorlig med "Red"? Nej, det erfalse. - Programmet fortsætter til næste gren. Er
trafficLightColorlig med "Yellow"? Ja, det ertrue. - Koden i
else if-blokken udføres, og "Slow down" udskrives. - Da en sand betingelse er fundet, ignoreres alle efterfølgende
else if- ogelse-grene.
En almindelig logisk fejl og hvordan man undgår den
Vores nuværende kode har en potentiel fejl. Hvad sker der, hvis trafiklyset er i stykker, og variablen får en uventet værdi som "Black"?
fun main() { val trafficLightColor = "Black" if (trafficLightColor == "Red") { println("Stop") } else if (trafficLightColor == "Yellow") { println("Slow down") } else { println("Go") } }Med denne kode vil outputtet være "Go"! Det er fordi else-grenen fungerer som en "catch-all" – den kører, hvis ingen af de foregående betingelser er sande. Dette er logisk forkert og potentielt farligt. Vi ønsker kun at udskrive "Go", hvis farven specifikt er "Green".
Løsningen er at tilføje endnu en else if for den grønne farve og bruge den sidste else til at håndtere ugyldige tilstande.
fun main() { val trafficLightColor = "Black" if (trafficLightColor == "Red") { println("Stop") } else if (trafficLightColor == "Yellow") { println("Slow down") } else if (trafficLightColor == "Green") { println("Go") } else { println("Invalid traffic light color") } }Nu vil outputtet korrekt være "Invalid traffic light color". Dette er et eksempel på robust programmering, hvor vi forudser og håndterer uventede situationer.
Sammenligningstabel: Operatorer i Kotlin
For at give et hurtigt overblik er her en tabel over de mest almindelige sammenligningsoperatorer, du vil bruge i dine if-sætninger.
| Operator | Betydning | Eksempel | Resultat |
|---|---|---|---|
== | Er lig med | 5 == 5 | true |
!= | Er ikke lig med | "Hej" != "Verden" | true |
< | Mindre end | 10 < 20 | true |
> | Større end | 10 > 20 | false |
<= | Mindre end eller lig med | 7 <= 7 | true |
>= | Større end eller lig med | 8 >= 9 | false |
Ofte Stillede Spørgsmål
Hvad er forskellen på = og ==?
Dette er en meget almindelig fejl for nye programmører. Enkelt lighedstegn (=) er tildelingsoperatoren. Den bruges til at give en variabel en værdi (f.eks. val score = 100). Dobbelt lighedstegn (==) er sammenligningsoperatoren. Den bruges til at sammenligne to værdier for at se, om de er ens, og den returnerer altid true eller false.
Kan jeg have en if-sætning inde i en anden if-sætning?
Ja, absolut. Dette kaldes "nested if-statements" (indlejrede if-sætninger). Det giver mulighed for mere kompleks og detaljeret logik. For eksempel kan du først tjekke, om en bruger er logget ind, og derefter, inde i den if-blok, tjekke om brugeren har administratorrettigheder.
val isLoggedIn = true val isAdmin = false if (isLoggedIn) { println("Bruger er logget ind.") if (isAdmin) { println("Velkommen, admin!") } else { println("Velkommen, bruger!") } } else { println("Login venligst.") }Hvad sker der, hvis jeg udelader else-delen?
En if-sætning kan sagtens stå alene uden en else- eller else if-gren. Det betyder simpelthen, at en bestemt kodeblok kun skal udføres, hvis betingelsen er sand. Hvis den er falsk, fortsætter programmet blot med at udføre koden efter if-blokken, uden at der sker noget specielt.
Hvornår skal jeg bruge when i stedet for en lang kæde af if/else if?
Kotlin tilbyder en mere elegant og læsbar struktur kaldet when, som er ideel, når du skal tjekke en enkelt variabel mod mange mulige værdier. Vores trafiklys-eksempel kan skrives meget pænere med when:
val trafficLightColor = "Yellow" when (trafficLightColor) { "Red" -> println("Stop") "Yellow" -> println("Slow down") "Green" -> println("Go") else -> println("Invalid traffic light color") }Generelt, hvis du har mere end to eller tre else if-grene, der alle tjekker den samme variabel, er when ofte et bedre og mere læsbart valg.
Hvis du vil læse andre artikler, der ligner Styr din kode med if/else i Kotlin, kan du besøge kategorien Sundhed.
