Java Academy · Oppitunti

Luettavuuden sudenkuopat

Pidä lausekkeet selkeinä.

Oppitunti 4/413 vaihetta

Luettavuuden sudenkuopat on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.

Teho voi heikentää luettavuutta

Ternary-operaattorit ovat tiiviitä, mutta niiden liiallinen käyttö voi tehdä koodista vaikeaselkoista.

Tavoitteena on selkeys, ei merkkien vähäinen määrä. Rivi, jota lukija ei pysty hahmottamaan yhdellä silmäyksellä, on ongelma, joka odottaa toteutumistaan.

Tässä oppitunnissa käsitellään yleisiä sudenkuoppia ja niiden välttämistä.

Sudenkuoppa: Syvä sisäkkäisyys

Monien ternary-operaattorien ketjuttaminen samalle riville on vaikealukuista ja altistaa virheille.

Jokainen ylimääräinen taso moninkertaistaa logiikan seuraamiseen tarvittavan ajattelutyön.

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

Korjaus: Käyttäkää if/else if -rakennetta

Kun haaroja on paljon, if/else if -ketju on selkeämpi kuin pitkä ketju.

Jokainen ehto on omalla rivillään, joten koodi on helppo silmäillä ja virheenkorjata.

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

Sudenkuoppa: Puuttuvat sulkeet

Ternary-operaattorin yhdistäminen +-operaattoriin ilman sulkeita muuttaa merkityksen.

Koska + sitoo tiukemmin kuin ?:, merkkijonon yhdistäminen voi ottaa mukaansa osan ehdosta tai arvosta.

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

Korjaus: Sulkekaa ternary-operaattori

Lisätkää aina sulkeet ternary-operaattorin ympärille, kun sitä käytetään merkkijonojen yhdistämisessä.

Näin rajat ovat selkeät ja tulos on odotetun mukainen.

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

Sudenkuoppa: Sivuvaikutukset sisällä

Sivuvaikutuksia aiheuttavien metodikutsujen sijoittaminen molempiin haaroihin peittää sen, mitä suoritetaan.

Yhdellä silmäyksellä ei ole selvää, kumpi kutsu suoritetaan, ja vain toinen haara suoritetaan joka tapauksessa.

Suosikaa if/else-rakennetta, kun toiminnoilla on merkitystä.

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

Sudenkuoppa: Pitkät haarojen arvot

Kun tosi- tai epätosiarvo on pitkä lauseke, ternary-operaattorista tulee tekstimuuri.

Irrottakaa monimutkaiset alilausekkeet ensin nimetyiksi muuttujiksi ja käyttäkää sen jälkeen lyhyttä ternary-operaattoria.

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

Korjaus: Nimetkää välivaiheen arvot

Välisummaa vastaavien arvojen erottaminen tekee valinnasta ilmeisen ja itsestään dokumentoivan.

Ternary-operaattori näyttää nyt tavalliselta kieleltä.

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);
    }
}

Sudenkuoppa: Tarpeeton boolean-logiikka

Ilmaus flag ? true : false on tarpeeton, sillä ehto on jo itsessään boolean-arvo.

Käyttäkää ehtoa sellaisenaan. Vastaavasti flag ? false : true on yksinkertaisesti !flag.

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

Muotoilkaa moniriviset ternary-operaattorit

Jos ternary-operaattori on säilytettävä, muotoilu auttaa. Sijoittakaa ? ja : rivien alkuun ja kohdistakaa ne.

Näin ketjusta tulee luettava ehtojen tikapuurakenne.

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

Luettavuuden tarkistuslista

Kysykää ennen ternary-operaattorin hyväksymistä: Onko kyse yhdestä yksinkertaisesta valinnasta? Ovatko tyypit yhteensopivia? Ovatko sulkeet selkeät?

Jos jokin vastaus on kielteinen, suosikaa if/else-rakennetta tai erottakaa muuttujat. Luettava koodi voittaa nokkelan koodin.

Pikatarkistus

Tunnistakaa selkeämpi uudelleenkirjoitus.

Kertaus

Ternary-operaattorit auttavat vain, kun ne pysyvät yksinkertaisina. Välttäkää syvää sisäkkäisyyttä, puuttuvia sulkeita, sivuvaikutuksia ja tarpeetonta boolean-logiikkaa.

Irrottakaa monimutkaiset arvot nimetyiksi muuttujiksi ja muotoilkaa pitkät ketjut tikapuurakenteiksi.

Jos epäröitte, valitkaa muoto, joka on selkein lukea.

Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”Luettavuuden sudenkuopat” ilmainen?

Kyllä – oppitunnin ”Luettavuuden sudenkuopat” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Luettavuuden sudenkuopat”?

Pidä lausekkeet selkeinä. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Luettavuuden sudenkuopat”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Ternäärioperaattori
  2. Ternäärioperaattorien ketjuttaminen
  3. Ternäärioperaattori vai if/else
  4. Luettavuuden sudenkuopat
← Takaisin: Java Academy