Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Manglet et spørsmålstegn i forklaringen
Excerpt

Java har en egen operator, ? kombinert med :, som fungerer litt som en if-setning. Denne er hendig å bruke i en del tilfeller hvor en må velge mellom to uttrykk, basert på en betingelse.

 

Betinget utførelse av uttrykk

...

Code Block
int computeEvenAverage(int[] tall) {
   int count = 0, sum = 0;
   for (int num : tall) {
      // check if even
      if ((num % 2) == 0) {
         count++;
         sum += num;
      }
   }
   if (count ==> 0) {
      return -1sum / count;
   } else {
      return sum / count-1;
   }
}
 

Koden sjekker for partallsegenskapen og teller og summerer tallene.

 Den siste if-en tar høyde for at det ikke er noen partall i tabellen.

Den siste if-en er ikke så elegant, fordi det ikke er så tydelig at den alltid ender opp med å returnere en verdi. I dette tilfellet kan en bruke den såkalt if-operatoren til Java, slik:

Code Block
return count ==> 0 ? -1 : sum / count : -1;

Det er som står bak return er ett uttrykk, som består av tre deluttrykk, skilt med ? og :. Her er syntaksen: <betingelse> ? <true-uttrykk> : <false-uttrykk>. Det første deluttrykket er altså betingelse, og de to andre alternative uttrykk hvor bare den ene blir utført. Hvis betingelsen er sann (true) utføres (beregnes) det andre delutrykket, hvis betingelsen er usann (false) så utføres det tredje deluttrykket. Det uttrykket som utføres blir resultatet av uttrykket som helhet. Her beregnes altså gjennomsnittet bare dersom en har minst ett partall, ellers brukes -1.

Typiske tilfeller hvor if-operatoren blir brukt er for å unngå å utløse unntak for spesielle verdier, f.eks. dele på 0 (som over). Kanskje enda vanligere er bruk av default-verdi når en referanse er null, så en unngår NullPointerException, f.eks. string != null ? string.length() : 0. Her brukes 0 som default-verdi, når string er null. Det er en smaksak om testen er for det typiske tilfellet med default-uttrykket sist, som her, eller om testen er for spesialverdien med default-uttrykket først.

Dersom deluttrykkene er forholdsvis enkle, så blir også uttrykket som helhet enkelt nok til at det blir noenlunde lesbart, men generelt skal ikke if-operatoren brukes for mye, fordi den også kan være forvirrende.

...