Break a continue - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Java

Break a continue

java

21. října 2002, 00.00 | Poslední pokračování seriálu o začátcích v jazyku Java. Dnes dokončíme cykly, přesněji řečeno se zastavíme u příkazů break a continue a dále se podíváme na to, jak používat návěští.

Poznámka redaktora: tímto dílem naše seriálové povídání o začátcích v jazyku Java končí. Ve výčtu témat jistě některé schází, ovšem autor se jim většinou věnoval v některém ze svých předcházejících článků (např. řízení vyjímek, či generování javadocu). Věřím, že se s tématem Javy na stránkách Builderu ještě setkáme, a to jak již na aplikační úrovni, tak i v populárních řešeních pro www.

V příkladech jsem již zmínil příkaz break či jeho bratra continue. Jejich význam v cyklech je vcelku jasný. Break okamžitě ukončí cyklus, ve kterém se právě nachází. Zatímco continue se pouze okamžitě přesunu na začátek cyklu.

Oba dva příkazy se vždy týkají pouze aktuálního (nejnižšího cyklu) ve který se nacházejí. Lze je použít ve všech třech cyklech for, while, do-while.

     while  (i < 1024) {
          if  (terminate) break  ;
     }

nebo

     for  (int i = 0; i < 1024; i++) {
          if  (i == 255) continue  ;
     }

Návěstí

Break a continue však mají ještě další význam. Ten je spjat s návěštími1.

Dříve než se podíváme na syntaxi je nutné připomenou, že dnes už se s návěštími moc nepracuje, i když se sním dají dělat opravdu brilantní kousky. Jeho zápis neumožňuje tak snadné čtení, obzvláště jedná-li se o mnoha násobně vnořené cykly.

Syntaxe návěští v programu se zakončí dvojtečkou za ní bezprostředně následovat nějaký cyklus. Celé to má význam zhruba následujícího rázu. Návěští je de-facto jméno pro cyklus, který ho následuje. Když pak voláte ať již break či continue s názvem návěští. Pouze říkáte, aby se předal tento příkaz vámi udanému návěští. (Pro vnořený cyklus to samozřejmě znamená jeho okamžité ukončení.)

     int i;
     moje_navesti: for  (int z = 0; z < 3 ; z++) { // návěští
          System.out.println("zacatek for");
          i = 0;
          while  (i < 2) {
               i++;
               System.out.println("zacatek while");
               if  (z == 1) { continue  moje_navesti; } // odkaz na návěští
               System.out.println("konec while");
          }
          System.out.println("konec for");
     }
     System.out.println("ending");

Vypíše to následující. Druhém kole foru se ukončí while a s ním i aktuální kolo foru, následně se přejde na nové kolo foru atd.

zacatek for
zacatek while
konec while
zacatek while
konec while
konec for
zacatek for
zacatek while
zacatek for
zacatek while
konec while
zacatek while
konec while
konec for
ending

Switch

Switch je typický prostředek jak testovat proměnou zda nabývá nějakou z množství hodnot. Naneštěstí pro pascalisty je switch v Javě rozdílné od case v Pascalu. Javě se opět vzala za vzor C++.

Switch funguje, tak že u testuje vámi zadanou proměnou2 na jednotlivé hodnoty, které ji nabízíte. Když nalezne shodnou hodnotu, tak provede zadané příkazy. Následné (rozdíl oproti Pascalu) všechny následující case považuje také jako za pravdivé a tudíž je také provede.

     int my_int = 1;
     String S = "";
     switch  (my_int) {
          case  0: S += "nula";
          case  1: S += "jedna";
          case  2: S += "dva";
     }
     System.out.println(S); // jednadva

Zmíněný neduh se projeví tak, že se vypíše jednadva. Lze ho odstranit tak, že za každým case bude break, pak již funguje jako v Pacalu.

     int my_int = 1;
     String S = "";
     switch  (my_int) {
          case  0: { S += "nula"; break;  }
          case  1: { S += "jedna"; break;  }
          case  2: { S += "dva"; break;  }
     }
     System.out.println(S); // jedna

Taky vás napadlo, že toto by se dalo taky napsat pomocí if-else-if-.... A co tohle víte, proč v case není standardně break? Protože Java neumožňuje zadat více hodnot jako jeden case. Například hodnoty 'a' až 'c' se zapíší takto:

     switch  (my_char) {
          case  'a':
          case  'b':
          case  'c': { S += "a az c"; break;  }
     }

Pokud by jste se chtěli ptát např. na hodnoty a až z, pak by bylo mnohem vhodnější napsat to jako if př. if ((int) my_char >= (int) 'a' && (int) my_char <= (int) 'z') { ...

Switch je možno také rozšířit o defaultní hodnotu tj. to co se má udělat jestliže žádný case nebyl vybrán jako vyhovující.

     int my_int = 5;
     String S = "";
     switch  (my_int) {
          case  0: { S += "nula"; break;  }
          case  1: { S += "jedna"; break;  }
          case  2: { S += "dva"; break;  }
          default  : { S += "jina hodnota"; break;  }
     }
     System.out.println(S); // jina hodnota

1. – v Pacalu label a goto. Goto je v Javě zakázané a label se nepoužívá. Místo nich se právě používají ony dva příkazy.
2. – Musí to být celočíselný typ či char.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Java  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: