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.