schakelaar, kast, standaard - 1

"Hallo Amigo!"

"Hallo, Bilaabo! Wat leuk je weer te zien. Alleen je lezingen zijn zo goed en begrijpelijk. Niet zoals dit Java Memory Model."

"Ja, Bilaabo weet hoe hij lessen moet kiezen. Vandaag ga ik je vertellen over de switch-stelling."

"Ik denk dat iemand me er al over heeft verteld."

'Ellie deed het. Dus Amigo wil geen les horen over de switch-verklaring? Misschien begin je je eigen les te geven?'

'Nee, ik wil, ik wil. Laten we horen over de switch-verklaring.'

"OK. In Java is er zoiets als een switch-statement. Het is handig wanneer je bepaalde acties moet uitvoeren, afhankelijk van verschillende waarden van een variabele."

Voorbeeld met schakelaar Gelijkwaardige code
int i = 5;
switch(i)
{
 case 1:
  System.out.println("one");
  break;
 case 2:
  System.out.println("two");
  break;
 case 3:
  System.out.println("three");
  break;
 default:
  System.out.println("many");
}
int i = 5;
if (i == 1)
{
 System.out.println("one");
}
else if (i == 2)
{
 System.out.println("two");
}
else if (i == 3)
{
 System.out.println("three");
}
else
{
 System.out.println("many");
}

Met de instructie switch kunt u naar het gewenste stuk code springen als de variabele die eraan wordt doorgegeven, overeenkomt met de waarde die volgt op het hoofdlettergebruik van het trefwoord.

Als i 1 is, springt de uitvoering naar de regel gemarkeerd met «case 1».

Als i 2 is, springt de uitvoering naar de regel gemarkeerd met «case 2».

Als i 3 is, springt de uitvoering naar de regel gemarkeerd met «case 3».

"Als er geen sprong naar een van de cases is, wordt het «default»-blok uitgevoerd."

"Ik begrijp het. En aan de rechterkant is dezelfde logica, maar geïmplementeerd met behulp van if-statements?"

"Ja."

"En wat is er met het woord 'break'? Je zei dat het alleen in loops kan worden gebruikt?"

"Ja, en hier. Als de break- instructie wordt uitgevoerd, verlaten we onmiddellijk de schakelaar ."

"Maar als de break-instructie wordt verwijderd, worden alle regels binnen de schakelaar tot het einde uitgevoerd."

Voorbeeld Uitgang (voor i = 1) Uitgang (voor i = 2)
switch(i)
{
 case 1:
  System.out.println("one");
 case 2:
  System.out.println("two");
 case 3:
  System.out.println("three");
 default:
  System.out.println("many"); }
een
twee
drie
veel
twee
drie
veel

"Eigenlijk is hoofdlettergebruik een label in de code. In de switch-instructie springen we naar het volgende label en beginnen we met het uitvoeren van alle code tot het einde van de switch, of totdat we een break-instructie tegenkomen."

"Dus als we geen afbreking schrijven, wordt de regel waar we naar springen uitgevoerd, gevolgd door alle andere regels tot aan het accolade sluiten. Klopt dat?"

"Ja."

"Een fluitje van een cent. Maar ik gebruik liever if-statements. Die hebben geen zinloze break-statements."

"Het is waar dat if-statements heel vaak compacter zijn. Maar een switch-statement is soms leesbaarder."

"Vergelijken:"

Voorbeeld met schakelaar Gelijkwaardige code
public String getName(int i)
{
 switch(i)
 {
  case 1:
   return "one";
  case 2:
   return "two";
  case 3:
   return "three";
  default:
   return "many";
}
public String getName(int i)
{
 if (i == 1)
  return "one";

 if (i == 2)
  return "two";

 if (i == 3)
  return "three";

return "many"
}

"Ik zou niet zeggen dat het leesbaarder is."

"Oké, maar hoe zit het met dit voorbeeld?"

Voorbeeld met schakelaar Gelijkwaardige code
public String getName(int i)
{
 switch(i)
 {
  case 1:
  case 2:
   return "one or two";
  case 3:
  case 4:
  case 5:
   return "three to five";
  default:
   return "many";
}
public String getName(int i)
{
 if (i == 1 || i == 2)
  return "one or two";

 if (i == 3 || i == 4 || i == 5)
  return "three to five";

return "many"
}

"Bilaabo, je voorbeeld ziet er niet helemaal goed uit. Dus ik kan de break-opdracht weglaten als ik return gebruik?"

"Dat klopt. Een return statement zal de methode onmiddellijk verlaten."

"Het lijkt erop dat if-statements altijd compacter zijn. Maar de switch-statement bleek deze keer beter leesbaar."

"Pff, eindelijk."

"Nog één ding. Je hoeft aan het einde geen default te schrijven. Als je dat niet doet, gebeurt er gewoon niets als geen van de labels overeenkomt."

"Uh, precies. Als-of-anders, maar leesbaar - veel leesbaarder!"

'Geweldig. Ik ben blij dat je mijn les leuk vond.'

"Oh, dat was ik bijna vergeten. Aanvankelijk kon je alleen primitieve typen en enums gebruiken in switch-statements. Maar nu hebben ze ondersteuning voor Strings toegevoegd."

'Bedoel je dat ik dit schrijf?'

Voorbeeld
public int getNumber(String number)
{
 switch(number)
 {
  case "one":
   return 1;
  case "two":
   return 2;
  case "three":
   return 3;
  default:
   return -1;
 }
}

"Ja. Handig, toch?"

"Ja. Wisselverklaringen zijn geweldig!"