Daugumoje kompiuterių kalbos, atvejis arba sąlyginis (dar žinomas kaip jungiklis) sakinys lygina kintamojo vertę su kelių konstantų ar literų verte ir vykdo pirmąjį kelią su atitikimo atveju. Į Rubinas, jis yra šiek tiek lankstesnis (ir galingesnis).
Vietoj to, kad būtų atliekamas paprastas lygybės testas, naudojamas lygių galimybių operatorius, atveriantis duris daugeliui naujų galimybių.
Tačiau yra keletas skirtumų nuo kitų kalbų. Į C, jungiklio teiginys yra savotiškas eilės pakeitimas jei ir eik teiginius. Dėžutės yra techniškai etiketės, ir perjungti teiginį pereis prie atitikimo etiketės. Tai rodo elgesį, vadinamą „permetimu“, nes vykdymas nesustoja pasiekus kitą etiketę.
Paprastai to išvengiama naudojant pertraukos teiginį, tačiau kartais kritimas yra tyčinis. Atvirkščiai, „Ruby“ atvejo teiginys gali būti vertinamas kaip trumpinys keletui jei teiginius. Nepastebima, bus įvykdytas tik pirmasis atitikimo atvejis.
Pagrindinė bylos pareiškimo forma
Pagrindinė bylos aprašymo forma yra tokia.
Kaip matote, tai susisteminta panašiai kaip sąlyginis teiginys. Vardas (kurį mes vadinsime vertės), šiuo atveju įvedamas iš klaviatūros, lyginamas su kiekvienu atveju iš klaviatūros kada išlygos (t. atvejų), o pirmasis, kai bus vykdomas blokas su atitikimo pavyzdžiu. Jei nė vienas iš jų nesutampa, Kitas blokas bus įvykdytas.
Kas čia įdomaus kaip vertė lyginama kiekvienu atveju. Kaip minėta aukščiau C ++ir kitose C tipo kalbose naudojamas paprastas verčių palyginimas. „Ruby“ yra naudojamas lygybės operatorius.
Atminkite, kad svarbus yra lygybės lygybės operatoriaus kairės pusės tipas, o atvejai visada yra kairiosios pusės. Taigi, kiekvienam kada sąlyga, Ruby įvertins atvejo reikšmė kol suras atitiktį.
Jei mes įvestume Bobas, Pirmiausia įvertins Ruby "Alisa" "Bobas", o tai būtų klaidinga Eilutė Nr. apibrėžiamas kaip stygų palyginimas. Kitas, /[qrz].+/i „Bobas“ būtų įvykdytas, o tai klaidinga nuo tada Bobas neprasideda Q, R ar Z.
Kadangi nė vienas iš atvejų neatitiko, „Ruby“ įvykdys kitą sąlygą.
Kaip tipas ateina į žaidimą
Paprastai atvejo teiginys yra naudojamas norint nustatyti vertės tipą ir padaryti ką nors skirtingą, atsižvelgiant į jo rūšį. Nors tai sulaužys įprastą „Ruby“ ančių tipizavimą, kartais reikia viską susitvarkyti.
Tai veikia naudojant Klasė# (techniškai Modulis #) operatorius, kuris patikrina, ar dešinė pusė yra? Kairioji pusė.
Sintaksė yra paprasta ir elegantiška:
Kita galima forma
Jei vertės Jei praleistas, atvejo teiginys veikia šiek tiek kitaip: jis veikia beveik tiksliai taip, kaip teiginys if / else if / else. Bylos teiginio naudojimo pranašumaijei teiginys, šiuo atveju, yra tik kosmetinis.
Kompaktiškesnė sintaksė
Kartais yra daugybė mažų kada išlygos. Toks atvejis lengvai išauga per didelis, kad tilptų ekrane. Tokiu atveju (nenaudojamas punas) galite naudoti tada raktinis žodis sudėti kada išlyga toje pačioje eilutėje.
Nors tai sukuria labai tankų kodą, kol kiekvienas kada sąlyga yra labai panaši, ji iš tikrųjų tampa daugiau skaitoma.
Kai jūs turėtumėte naudoti vienos eilutės ir kelių eilučių, kai išlygos priklauso nuo jūsų, tai yra stiliaus klausimas. Tačiau nerekomenduojama maišyti dviejų - atvejo formuluotė turi atitikti modelį, kad būtų kuo suprantamesnė.
Atvejo priskyrimas
Panašiai kaip teiginiai, atvejų teiginiai vertinami pagal paskutinį teiginį kada išlyga. Kitaip tariant, jie gali būti naudojami užduotyse, siekiant pateikti savotišką lentelę. Tačiau nepamirškite, kad atvejų teiginiai yra daug galingesni nei paprastų masyvo ar maišos paieškų. Tokioje lentelėje nebūtinai reikia naudoti rašmenis kada išlygos.
Jei nėra atitikimo, kai sąlyga, ir nėra kitos sąlygos, tada bylos teiginys bus įvertintas kaip nulis.