Java Academy · leksjon

Fallgruver for lesbarhet

Hold uttrykkene tydelige.

Leksjon 4 av 413 trinn

Fallgruver for lesbarhet er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.

Kraft kan gå ut over lesbarheten

Ternæruttrykk er kompakte, men overdreven bruk kan gjøre koden kryptisk.

Målet er tydelighet, ikke færrest mulig tegn. En linje som leseren ikke kan tolke med et øyekast, er en feil som bare venter på å oppstå.

Denne leksjonen tar for seg vanlige fallgruver og hvordan de kan unngås.

Fallgruve: Dyp nesting

Det er vanskelig å lese og lett å gjøre feil når mange ternæruttrykk stables på én linje.

Hvert ekstra nivå øker den mentale innsatsen som kreves for å følge logikken.

// hard to follow on one line
String g = s>=90?"A":s>=80?"B":s>=70?"C":s>=60?"D":"F";

Løsning: Bruk if/else if

Når det finnes mange grener, er en if/else if-kjede tydeligere enn en lang kjede med ternæruttrykk.

Hver betingelse får sin egen linje og er enkel å skanne og feilsøke.

String g;
if (s >= 90) g = "A";
else if (s >= 80) g = "B";
else if (s >= 70) g = "C";
else g = "F";

Fallgruve: Manglende parenteser

Hvis et ternæruttrykk kombineres med + uten parenteser, endres betydningen.

Fordi + har høyere prioritet enn ?:, kan sammenkoblingen ta opp en del av betingelsen eller verdien.

int n = 5;
// surprising: + groups before ?:
String out = "n is " + n > 3 ? "big" : "small"; // does NOT compile as intended

Løsning: Sett ternæruttrykket i parentes

Sett alltid et ternæruttrykk i parentes når det brukes i en strengsammenkobling.

Da blir grensene tydelige, og resultatet blir som forventet.

public class Main {
    public static void main(String[] args) {
        int n = 5;
        String out = "n is " + (n > 3 ? "big" : "small");
        System.out.println(out);
    }
}

Fallgruve: Bivirkninger inni uttrykket

Hvis metodekall med bivirkninger plasseres i begge grenene, blir det uklart hva som kjøres.

Det er ikke tydelig ved første øyekast hvilket kall som utføres, og bare én av grenene blir noen gang kjørt.

Foretrekk if/else når handlingene er viktige.

// unclear which side effect happens
boolean ok = check();
int r = ok ? save() : rollback();

Fallgruve: Lange verdier i grenene

Når verdien for sant eller usant er et langt uttrykk, blir ternæruttrykket en vegg av tekst.

Trekk først komplekse deluttrykk ut i navngitte variabler, og bruk deretter et kort ternæruttrykk.

// cramped
double total = vip ? base*0.8 + tax + ship - coupon : base + tax + ship;

Løsning: Gi mellomverdier navn

Når delsummer trekkes ut, blir valget tydelig og selvforklarende.

Ternæruttrykket kan nå leses som naturlig språk.

public class Main {
    public static void main(String[] args) {
        boolean vip = true;
        double regular = 100.0, discounted = 80.0;
        double total = vip ? discounted : regular;
        System.out.println(total);
    }
}

Fallgruve: Overflødig boolsk logikk

Det er unødvendig å skrive flag ? true : false; betingelsen er allerede en boolsk verdi.

Bruk bare betingelsen direkte. På samme måte er flag ? false : true ganske enkelt !flag.

boolean active = user != null;
// not: user != null ? true : false
boolean inactive = user == null;

Formater ternæruttrykk over flere linjer

Hvis et ternæruttrykk må beholdes, hjelper god formatering. Plasser ? og : først på hver linje, og juster dem på linje med hverandre.

Da blir en kjede til en lettlest stige med betingelser.

String tier = points >= 1000 ? "gold"
            : points >= 500  ? "silver"
            : "bronze";

En sjekkliste for lesbarhet

Før et ternæruttrykk tas i bruk, bør følgende spørsmål stilles: Er dette ett enkelt valg? Er typene kompatible? Er parentesene tydelige?

Hvis svaret på ett av spørsmålene er nei, bør if/else brukes, eller variabler trekkes ut. Lesbar kode er bedre enn smart kode.

Rask sjekk

Finn den ryddigste omskrivingen.

Oppsummering

Ternæruttrykk er bare nyttige når de holdes enkle. Unngå dyp nesting, manglende parenteser, bivirkninger og overflødig boolsk logikk.

Trekk komplekse verdier ut i navngitte variabler, og formater lange kjeder som stiger.

Velg formen som er lettest å lese når det er tvil.

Gratis å komme i gang

Lær deg Java med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
104
Leksjoner
374

Ofte stilte spørsmål

Er leksjonen «Fallgruver for lesbarhet» gratis?

Ja – hele teksten i «Fallgruver for lesbarhet» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Fallgruver for lesbarhet»?

Hold uttrykkene tydelige. Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Java Academy?

Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Fallgruver for lesbarhet»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?

Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Den ternære operatoren
  2. Nøstede ternære operatorer
  3. Ternær operator kontra if/else
  4. Fallgruver for lesbarhet
← Tilbake til Java Academy