Ve většině počítačové jazyky, případ nebo podmíněný (také známý jako přepínač) příkaz porovnává hodnotu proměnné s hodnotou několika konstant nebo literálů a provádí první cestu s odpovídajícím případem. v Rubín, je to o něco flexibilnější (a výkonnější).
Namísto provádění jednoduchého testu rovnosti se používá operátor rovnosti případů, který otevírá dveře mnoha novým účelům.
Existují však určité rozdíly od jiných jazyků. v C, příkaz switch je jakýmsi nahrazením řady pokud a goto prohlášení. Tyto případy jsou technicky štítky a příkaz switch přejde na odpovídající štítek. To projevuje chování zvané „průlom“, protože provádění se nezastaví, když dosáhne jiného štítku.
Tomu se obvykle vyhneme pomocí prohlášení o přerušení, ale občas je úmyslné. Na druhou stranu lze případ Ruby považovat za zkratku pro řadu -li prohlášení. Neexistuje žádný průlom, bude proveden pouze první porovnávací případ.
Základní forma prohlášení o případu
Základní forma prohlášení o případu je následující.
Jak vidíte, je to strukturované něco jako podmíněný příkaz if / else if / else. Jméno (kterému budeme říkat
hodnota), v tomto případě zadané z klávesnice, se porovná s každým z případů z když klauzule (tj. případy) a první, kdy bude proveden blok s odpovídajícím případem. Pokud se žádný z nich neshoduje, jiný blok bude proveden.Co je tady zajímavé je jak hodnota je porovnána s každým z případů. Jak je uvedeno výše, v C ++a dalších C-podobných jazycích se používá jednoduché porovnání hodnot. V Ruby se používá operátor rovnosti případu.
Nezapomeňte, že typ levé strany operátora rovnosti případů je důležitý a případy jsou vždy levou stranou. Takže pro každého když Klauzule, Ruby to vyhodnotí hodnota případu dokud nenajde shodu.
Kdybychom měli vstupovat Bob, Ruby by to nejprve vyhodnotil "Alice" "Bob", což by bylo od té doby falešné Tětiva# je definováno jako porovnání řetězců. Další, /[qrz].+/i "Bob" bude proveden, což je od té doby falešné Bob nezačíná Q, R nebo Z.
Protože žádný z případů neodpovídá, Ruby poté provede klauzuli else.
Jak se typ dostává do hry
Běžné použití příkazu case je určit typ hodnoty a udělat něco jiného v závislosti na jeho typu. Přestože se tím ruší obvyklé psaní kachen Ruby, je někdy nutné všechno udělat.
Funguje to pomocí Třída# (technicky, Modul#), který testuje, zda je na pravé straně je? levá strana.
Syntaxe je jednoduchá a elegantní:
Další možný formulář
Pokud hodnota je vynechán, příkaz case funguje trochu jinak: funguje téměř přesně jako příkaz if / else if / else. Výhody použití případu přes-li prohlášení, v tomto případě, je pouze kosmetické.
Kompaktnější syntaxe
Jsou chvíle, kdy existuje velké množství malých když doložky. Takové případové prohlášení snadno roste příliš velké, aby se vešlo na obrazovku. Pokud se jedná o tento případ (není určena žádná hříčka), můžete použít pak klíčové slovo, aby tělo když klauzule na stejném řádku.
I když to dělá nějaký velmi hustý kód, pokud každý když klauzule je velmi podobná, ve skutečnosti se stává více čitelný.
Když byste měli použít jednořádkové a vířádkové, když jsou na vás klauze, je to záležitost stylu. Smíchání obou se však nedoporučuje - prohlášení o případu by mělo mít vzorec, aby byl co nejčitelnější.
Přiřazení případu
Stejně jako v případě výroků se případové výkazy vyhodnotí až do posledního výroku v když doložka. Jinými slovy, lze je použít při zadávání úkolů jako druh tabulky. Nezapomeňte však, že případové příkazy jsou mnohem silnější než jednoduché vyhledávání polí nebo hashů. Taková tabulka nemusí nutně používat literály když doložky.
Pokud není k dispozici shoda, když klauzule a žádná jiná klauzule, pak bude případ vyhodnocen nula.