Java Switch utasítás

1. Áttekintés

Ebben az oktatóanyagban megtudhatjuk, mi a kapcsoló utasítás és hogyan kell használni.

A kapcsoló utasítás lehetővé teszi számunkra, hogy több beágyazottat cseréljünk ha más felépíti és így javítja a kódunk olvashatóságát.

Kapcsoló az idők folyamán fejlődött - új támogatott típusok kerültek be, különösen a Java 5 és 7 rendszerekben. Továbbá folyamatosan fejlődik - kapcsoló kifejezéseket valószínűleg bevezetnek a Java 12-be.

Az alábbiakban néhány kód példát mutatunk be a kapcsoló nyilatkozat, a szünet nyilatkozat, a kapcsoló érv/ügy értékek és a Húrs be egy kapcsoló nyilatkozat.

Térjünk át a példára.

2. Példa a felhasználásra

Tegyük fel, hogy a következők vannak beágyazva ha más nyilatkozatok:

public String exampleOfIF (String állat) {String eredmény; if (állat.egyenlő ("KUTYA") || állat.egyenlő ("CAT")) {eredmény = "háziállat"; } else if (állat.egyenlő ("TIGER")) {eredmény = "vadállat"; } else {eredmény = "ismeretlen állat"; } visszatérési eredmény; }

A fenti kód nem néz ki jól, és nehéz lenne fenntartani és indokolni. Az olvashatóság javítása érdekében használhatjuk a kapcsoló nyilatkozat itt:

public String exampleOfSwitch (String animal) {Karakterlánc eredménye; kapcsoló (állat) {eset "KUTYA": eredmény = "háziállat"; szünet; "CAT" eset: eredmény = "háziállat"; szünet; "TIGER" eset: eredmény = "vadállat"; szünet; alapértelmezett: eredmény = "ismeretlen állat"; szünet; } visszatérési eredmény; }

A fentiek szerint összehasonlítjuk a kapcsoló érv állat a többivel ügy értékek. Ha egyik sem ügy értékek megegyeznek az argumentummal, akkor a alapértelmezett a címke végrehajtásra kerül.

Egyszerűen fogalmazva: szünet utasítás a kilépéshez használatos kapcsoló nyilatkozat.

3. Az szünet Nyilatkozat

Bár a legtöbb kapcsoló a való életben tett állítások azt sugallják, hogy a ügy blokkokat kell végrehajtani, a szünet utasítás szükséges a kilépéshez kapcsoló miután a blokk befejeződött.

Ha elfelejtjük írni a szünet, az alatta lévő blokkok végrehajtásra kerülnek.

Ennek bemutatásához hagyjuk ki a szünet utasításokat, és adja hozzá a kimenetet a konzolhoz minden blokkhoz:

public String megfeledkezikBreakInSwitch (String animal) {switch (animal) {case "DOG": System.out.println ("háziállat"); alapértelmezett: System.out.println ("ismeretlen állat"); }}

Végezzük el ezt a kódot felejtsd elBreakInSwitch("KUTYA"), és ellenőrizze a kimenetet annak bizonyítására, hogy az összes blokk végrehajtásra kerül:

háziállat ismeretlen állat

Tehát óvatosnak kell lennünk, és hozzá kell tennünk szünet utasításokat az egyes blokkok végén, kivéve, ha szükség van a következő címke alatti kódra való áthelyezésre.

Az egyetlen blokk, ahol a szünet nem szükséges, az utolsó, de a szünet az utolsó blokkig a kód kevésbé hibára hajlamos.

Kihasználhatjuk ezt a viselkedést is kihagyni szünet amikor ugyanazt a kódot akarjuk végrehajtani több esetkérdéshez. Írjuk át az előző szakaszban szereplő példát az első 2 eset összesítésével:

public String exampleOfSwitch (String animal) {Karakterlánc eredménye; kapcsoló (állat) {eset "DOG": eset "CAT": eredmény = "háziállat"; szünet; "TIGER" eset: eredmény = "vadállat"; szünet; alapértelmezett: eredmény = "ismeretlen állat"; szünet; } visszatérési eredmény; }

4. kapcsoló Érv és ügy Értékek

Most beszéljük meg a megengedett típusokat kapcsoló érv és ügy értékeket, az azokra vonatkozó követelményeket és a kapcsoló utasítás a Strings-kel működik.

4.1. Adattípusok

Nem hasonlíthatjuk össze az összes objektumtípust és primitívet a kapcsoló nyilatkozat. A kapcsoló csak négy primitívvel és azok burkolóival működik, valamint a enum típus és a Húr osztály:

  • byte és Byte
  • rövid és Rövid
  • int és Egész szám
  • char és karakter
  • enum
  • Húr

Húr típus a kapcsoló Java 7-vel kezdődő utasítás.

enum típust a Java 5-ben vezették be, és a kapcsoló nyilatkozat azóta.

A pakoló osztályok a Java 5 óta elérhetők.

Természetesen, kapcsoló érv és ügy az értékeknek azonos típusúaknak kell lenniük.

4.2. Nem nulla Értékek

Nem mehetünk át a nulla érték érvként a kapcsoló nyilatkozat. Ha megtesszük, a program dob NullPointerException, az elsőnket használva kapcsoló példa:

@Test (várható = NullPointerException.class) public void whenSwitchAgumentIsNull_thenNullPointerException () {String animal = null; Assert.assertEquals ("háziállat", s.exampleOfSwitch (állat)); }

Természetesen mi sem mehetünk át nulla értékként a ügy címke a kapcsoló nyilatkozat. Ha megtesszük, a kód nem fordul le.

4.3. Ügy Értékek fordítási idejű konstansokként

Ha megpróbáljuk kicserélni a KUTYA esetérték a változóval kutya a kód nem fordul össze, amíg meg nem jelöljük a kutya változó as végső:

végső húros kutya = "KUTYA"; Vonós macska = "CAT"; kapcsoló (állat) {eset kutya: // összeállítja az eredmény = "háziállat"; case cat: // nem fordítja össze az eredmény = "macska"}

4.4. Húr Összehasonlítás

Ha egy kapcsoló utasítás az egyenlőség operátorral összehasonlította azokat a húrokat, amelyeket nem tudtunk összehasonlítani a Húr argumentum a új üzemeltető a Húr esetérték helyesen.

Szerencsére a kapcsoló operátor használja a egyenlő () módszer a motorháztető alatt.

Bemutassuk ezt:

@Test public void whenCompareStrings_thenByEqual () {String animal = new String ("DOG"); assertEquals ("háziállat", s.exampleOfSwitch (állat)); }

5. kapcsoló Kifejezések

A JDK 13 már elérhető, és a JDK 12-ben először bevezetett új funkció továbbfejlesztett változatát hozza: a kapcsoló kifejezés.

Annak érdekében, hogy lehetővé tegyük, át kell mennünk –Engedhető-előnézet az összeállítónak.

5.1. Az új kapcsoló Kifejezés

Lássuk, mi az új kapcsoló kifejezés úgy néz ki, mint amikor hónapra vált:

var eredmény = váltás (hónap) {eset JANUÁR, JÚNIUS, JÚLIUS -> 3; eset FEBRUÁR, SZEPTEMBER, OKTÓBER, NOVEMBER, DECEMBER -> 1; eset AUGUSZTUS MÁJUS, MÁJUS, MÁJUS -> 2; alapértelmezett -> 0; }; 

Küldés olyan értékben, mint Hónap.JÚNIUS beállítaná eredmény nak nek 3.

Figyelje meg, hogy az új szintaxis a ->operátor a kettőspont helyett, amivel megszoktuk kapcsoló nyilatkozatok. Továbbá nincs szünet kulcsszó: Az kapcsoló a kifejezés nem esik át ügys.

Egy másik kiegészítés az a tény, hogy most vesszővel tagolt kritériumaink lehetnek.

5.2. A hozam Kulcsszó

Kicsit továbbhaladva, kódblokkok segítségével lehetőség nyílik a kifejezés jobb oldalán zajló események pontos ellenőrzésére. Ilyen esetben a kulcsszót kell használnunk hozam:

var eredmény = váltás (hónap) {eset JANUÁR, JÚNIUS, JÚLIUS -> 3; eset FEBRUÁR, SZEPTEMBER, OKTÓBER, NOVEMBER, DECEMBER -> 1; eset AUGUSZTUS MÁRCIUS, MÁJUS, MÁJUS - - {int hónapLength = month.toString (). length (); hozam hónapHossz * 4; } alapértelmezett -> 0; };

Míg a példánk kissé önkényes, itt az a lényeg, hogy itt több Java nyelvhez férhettünk hozzá.

5.3. Bent visszatérve kapcsoló Kifejezések

Közötti különbségtétel következményeként kapcsoló nyilatkozatok és kapcsoló kifejezések, lehetséges Visszatérés belülről a kapcsoló nyilatkozat, de ezt nem tehetjük meg a kapcsoló kifejezés.

A következő példa tökéletesen érvényes és összeáll:

váltás (hónap) {eset JANUÁR, JÚNIUS, JÚLIUS -> {return 3; } alapértelmezett -> {return 0; }}

A következő kód azonban nem áll össze, ahogy próbáljuk Visszatérés bezáró kapcsoló kifejezésen kívül:

var eredmény = váltás (hónap) {eset JANUÁR, JÚNIUS, JÚLIUS -> {visszatérés 3; } alapértelmezett -> {return 0; }};

5.4. Kimerültség

Használat során kapcsoló nyilatkozatok, teljesen mindegy, hogy minden esetre kiterjed-e.

Például a következő kód tökéletesen érvényes és összeáll:

váltás (hónap) {eset JANUÁR, JÚNIUS, JÚLIUS -> 3; eset FEBRUÁR, SZEPTEMBER -> 1; }

Mert kapcsoló kifejezések ellenére a fordító ragaszkodik ehhez minden lehetséges esetre kiterjed. Például a következő kódrészlet nem fordítható össze, mivel nincs alapértelmezett eset, és nem minden lehetséges esetet fed le:

var eredmény = váltás (hónap) {eset JANUÁR, JÚNIUS, JÚLIUS -> 3; eset FEBRUÁR, SZEPTEMBER -> 1; }

A kapcsoló kifejezés azonban akkor érvényes, ha minden lehetséges esetet lefedünk, például a következő példában:

var eredmény = váltás (hónap) {eset JANUÁR, JÚNIUS, JÚLIUS -> 3; eset FEBRUÁR, SZEPTEMBER, OKTÓBER, NOVEMBER, DECEMBER -> 1; eset AUGUSZTUS MÁJUS, MÁJUS, MÁJUS -> 2; }

Felhívjuk figyelmét, hogy a fenti kódrészlet nem rendelkezik a alapértelmezett ügy. Amíg minden esetre kiterjed, a kapcsoló kifejezés érvényes lesz.

6. Következtetés

Ebben az oktatóanyagban megtanultuk a kapcsoló utasítás Java-ban. Eldönthetjük, hogy használjuk-e kapcsoló az olvashatóság és az összehasonlított értékek típusa alapján.

A kapcsoló állítás jó jelölt azokra az esetekre, amikor korlátozott számú lehetőségünk van egy előre meghatározott készletben (pl .: a hét napjai). Ellenkező esetben minden egyes alkalommal új érték hozzáadásakor vagy eltávolításakor módosítanunk kell a kódot, ami nem biztos, hogy megvalósítható. Ezekben az esetekben más megközelítéseket is figyelembe kell vennünk, például a polimorfizmust vagy más tervezési mintákat, például a Command-ot.

Mint mindig, a teljes JDK 8 kód és a JDK 13 kód elérhető a GitHubon.