Vo väčšine počítačové jazyky, prípad alebo podmienené (tiež známe ako prepínač) porovnáva hodnotu premennej s hodnotou niekoľkých konštánt alebo literálov a vykonáva prvú cestu s porovnávacím prípadom. v rubín, je to o niečo flexibilnejšie (a výkonnejšie).
Namiesto vykonávania jednoduchého testu rovnosti sa používa operátor rovnosti prípadov, ktorý otvára dvere mnohým novým použitiam.
Existujú však určité rozdiely od iných jazykov. v C, vyhlásenie o zmene je druh náhrady za sériu ak a goto Vyhlásenia. Prípady sú technicky označené a príkaz switch prejde na zodpovedajúci štítok. Vykazuje správanie nazývané „prepad“, pretože vykonávanie sa nezastaví, keď dosiahne inú značku.
Zvyčajne sa tomu vyhýba pomocou prerušenia, ale niekedy je úmyselné ich prelomenie. Na druhej strane vyhlásenie o prípade v Ruby možno vnímať ako skratku pre sériu ak Vyhlásenia. Neexistuje žiadny prepad, bude vykonaný iba prvý porovnávací prípad.
Základná forma vyhlásenia o prípade
Základná forma oznámenia o prípade je nasledovná.
Ako vidíte, je to štruktúrované niečo ako podmienené vyhlásenie if / else if / else. Meno (ktoré budeme nazývať hodnota), v tomto prípade zadanej z klávesnice, sa porovná s každým z prípadov z kedy klauzuly (t. prípady) a prvý, kedy bude vykonaný blok so zhodným prípadom. Ak sa žiadny z nich nezhoduje, inak blok bude vykonaný.
Čo je tu zaujímavé, je ako hodnota sa porovná s každým z týchto prípadov. Ako je uvedené vyššie, v C ++a ďalšie jazyky podobné C sa používa jednoduché porovnanie hodnoty. V Ruby sa používa operátor rovnosti prípadov.
Pamätajte, že typ ľavej strany operátora rovnosti prípadov je dôležitý a prípady sú vždy na ľavej strane. Takže pre každého kedy Klauzula, Ruby to vyhodnotí hodnota prípadu kým nenájde zhodu.
Keby sme mali vstupovať bob, Ruby by to najskôr vyhodnotil „Alice“ „Bob“, čo by bolo odvtedy nepravdivé reťazec # je definované ako porovnanie reťazcov. Ďalšie, /[qrz].+/i „Bob“ bude vykonaný, čo je odvtedy nepravdivé bob nezačína Q, R alebo Z.
Pretože žiadny z prípadov sa nezhoduje, Ruby potom vykoná klauzulu else.
Ako prichádza typ do hry
Bežným použitím príkazu je určiť typ hodnoty a urobiť niečo iné v závislosti od jeho typu. Aj keď to zlomí Rubyho obvyklé písanie kačíc, niekedy je potrebné veci urobiť.
Funguje to pomocou Trieda# (technicky, module #), ktorý skúša, či je na pravej strane is_a? na ľavej strane.
Syntax je jednoduchá a elegantná:
Ďalší možný formulár
Ak je hodnota sa vynecháva, vyhlásenie prípadu funguje trochu inak: funguje takmer presne ako vyhlásenie if / else if / else. Výhody použitia prípadu v prípadeak vyhlásenie, v tomto prípade, je iba kozmetické.
Kompaktnejšia syntax
Sú chvíle, keď je ich veľké množstvo kedy doložky. Takýto prípad sa ľahko zväčšuje príliš na to, aby sa zmestil na obrazovku. V takom prípade (nie je určená žiadna hračka), môžete použiť potom kľúčové slovo dať telo kedy doložka na rovnakom riadku.
Aj keď to robí nejaký veľmi hustý kód, pokiaľ je každý kedy klauzula je veľmi podobná, v skutočnosti sa stáva viac čitateľné.
Ak by ste mali použiť jedno-a viacriadkové, keď sú na vás ustanovenia, je to záležitosť štýlu. Zmiešanie týchto dvoch zložiek sa však neodporúča - vyhlásenie o prípade by malo mať vzor, ktorý je čo naj čitateľnejší.
Priradenie prípadu
Podobne ako v prípade vyhlásení, v prípadoch sa prípady hodnotia až do posledného vyhlásenia v kedy klauzula. Inými slovami, môžu sa použiť v úlohách na poskytnutie určitej tabuľky. Nezabudnite však, že prípady sú oveľa výkonnejšie ako jednoduché vyhľadávanie polí alebo hash. Takáto tabuľka nemusí nevyhnutne používať literály kedy doložky.
Ak neexistuje klauzula o zhode, keď a doložka o inom, vyhlásenie prípadu sa vyhodnotí nula.