kapcsoló, tok, alapértelmezett - 1

– Szia Amigo!

"Szia, Bilaabo! Örülök, hogy újra látlak. Csak az előadásaid olyan jók és érthetőek. Nem úgy, mint ez a Java memóriamodell."

"Igen, Bilaabo tudja, hogyan kell leckéket választani. Ma a switch nyilatkozatról fogok mesélni."

– Azt hiszem, valaki már mesélt róla.

– Ellie igen. Szóval, Amigo nem akar leckét hallani a switch-kijelentésről? Talán elkezdenéd tanítani a sajátodat?

"Nem, akarom, akarom. Hallgassunk a switch nyilatkozatról."

"OK. A Java-ban van valami, amit switch utasításnak neveznek. Ez kényelmes, ha bizonyos műveleteket kell végrehajtania valamely változó különböző értékétől függően."

Példa kapcsolóval Egyenértékű kód
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");
}

A switch utasítással a kívánt kódrészletre ugorhat, ha a neki átadott változó megegyezik a kulcsszó kis- és nagybetűjét követő értékkel.

Ha i 1, akkor a végrehajtás az «1. eset» sorra ugrik.

Ha i 2, akkor a végrehajtás a „2. eset” sorra ugrik.

Ha i 3, akkor a végrehajtás a „3. eset” sorra ugrik.

"Ha nincs ugrás egyik esetre sem, akkor az «alapértelmezett» blokk végrehajtásra kerül."

"Értem. És a jobb oldalon ugyanaz a logika, de if utasításokkal van megvalósítva?"

"Igen."

"És mi a helyzet a "break" szóval? Azt mondtad, hogy csak hurokban használható?"

"Igen, és itt. Amikor a break utasítás végrehajtásra kerül, azonnal kilépünk a kapcsolóból ."

"De ha a break utasítást eltávolítják, akkor a kapcsolón belüli összes sor a végéig végrehajtásra kerül."

Példa Kimenet (i = 1 esetén) Kimenet (i = 2 esetén)
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"); }
egy
kettő
három
sok
kettő
három
sok

"Valójában a case egy címke a kódban. A switch utasításban a következő címkére ugrunk, és elkezdjük végrehajtani az összes kódot a váltás végéig, vagy amíg nem találkozunk egy break utasítással."

"Tehát, ha nem írunk törést, akkor az a sor, amelyre ugrunk, végrehajtásra kerül, majd az összes többi sor a záró kapcsos zárójelig. Így van?"

"Igen."

De jobban szeretem használni az if utasításokat. Nincsenek ezek az értelmetlen break utasítások.

"Igaz, hogy ha az állítások nagyon gyakran tömörebbek. De a switch utasítás néha jobban olvasható."

"Hasonlítsa össze:"

Példa kapcsolóval Egyenértékű kód
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"
}

– Nem mondanám, hogy olvasmányosabb.

– Jó, de mi van ezzel a példával?

Példa kapcsolóval Egyenértékű kód
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, a példád nem egészen jól néz ki. Szóval, kihagyhatom a break utasítást, ha return-t használok?"

"Így van. A return utasítás azonnal kilép a metódusból."

"Úgy tűnik, hogy ha az állítások mindig tömörebbek. De a switch utasítás ezúttal olvashatóbbnak bizonyult."

– Fú, végre.

"Még egy dolog. Nem kell alapértelmezettet írni a végére. Ha nem, akkor egyszerűen nem történik semmi, ha egyik címke sem egyezik."

– Ó, pontosan. Mintha más, de olvasható – sokkal olvashatóbb!

"Remek. Örülök, hogy tetszett a leckém."

"Ó, majdnem elfelejtettem. Kezdetben csak primitív típusokat és enumokat lehetett használni a switch utasításokban. Most azonban hozzáadták a Strings támogatását."

– Úgy érted, hogy én írom ezt?

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

– Igen. Kényelmes, igaz?

"Igen. A Switch kijelentések nagyszerűek!"