În majoritatea limbajelor computerului, cazul sau condiționalul (cunoscut și ca și) intrerupator) instrucțiunea compară valoarea unei variabile cu cea a mai multor constante sau literale și execută prima cale cu un caz de potrivire. În Ruby, este ceva mai flexibil (și mai puternic).
În loc de un simplu test de egalitate, se utilizează operatorul de egalitate de cazuri, deschizând ușa pentru multe noi utilizări.
Cu toate acestea, există unele diferențe față de alte limbi. În C, o declarație de comutare este un fel de înlocuire pentru o serie de dacă și goto declarații. Cazurile sunt etichetate din punct de vedere tehnic, iar declarația de comutare va trece pe eticheta potrivită. Aceasta prezintă un comportament numit "fallthroughrough", deoarece execuția nu se oprește atunci când ajunge la o altă etichetă.
Acest lucru este de obicei evitat folosind o declarație de pauză, dar căderea este uneori intenționată. Afirmația de caz din Ruby, pe de altă parte, poate fi văzută ca o scurtătură pentru o serie de dacă declarații. Nu există nicio cădere, doar primul caz de potrivire va fi executat.
Forma de bază a unei declarații de caz este următoarea.
După cum puteți vedea, aceasta este structurată ca o afirmație condițională if / else if / else. Numele (pe care îl vom numi valoare), în acest caz introdus de la tastatură, este comparat cu fiecare dintre cazurile din cand clauze (adică. cazuri), și primul când blocul cu un caz de potrivire va fi executat. Dacă nici unul dintre ei nu se potrivește, altfel blocul va fi executat.
Ce este interesant aici este Cum valoarea este comparată cu fiecare dintre cazuri. Așa cum am menționat mai sus, în C ++ și în alte limbi C-like, se utilizează o comparație simplă a valorilor. În Ruby, se folosește operatorul de egalitate de cazuri.
Nu uitați că tipul părții din stânga a unui operator de egalitate a cazurilor este important, iar cazurile sunt întotdeauna pe partea stângă. Deci, pentru fiecare cand clauza, Ruby va evalua Valoarea cazului === până găsește o potrivire.
Dacă ar fi să intrăm Bob, Ruby ar evalua mai întâi "Alice" === "Bob", ceea ce ar fi fals de atunci String # === este definit ca fiind comparația șirurilor. Următor →, /[qrz Alan.+/i === "Bob" ar fi executat, ceea ce este fals deoarece Bob nu începe cu Q, R sau Z.
Deoarece niciunul dintre cazuri nu s-a potrivit, Ruby va executa apoi clauza altfel.
O utilizare obișnuită a declarației de caz este de a determina tipul de valoare și de a face ceva diferit în funcție de tipul acesteia. Deși acest lucru rupe tastarea obișnuită a raței lui Ruby, uneori este necesar să terminăm lucrurile.
Acest lucru funcționează folosind Clasa # === (tehnic, Modul # ===) operator, care testează dacă partea dreaptă is_a? partea stângă.
Sintaxa este simplă și elegantă:
Dacă valoare este omisă, afirmația de caz funcționează puțin diferit: funcționează aproape exact ca o declarație if / else if / else. Avantajele utilizării declarației de caz față de an dacă afirmația, în acest caz, sunt doar cosmetice.
Există momente în care există un număr mare de mici cand clauze. O astfel de afirmație crește cu ușurință prea mare pentru a se potrivi pe ecran. Când este cazul (nu este prevăzut niciun punct), puteți utiliza apoi cuvânt cheie pentru a pune corpul cand clauză pe aceeași linie.
În timp ce acest lucru creează un cod foarte dens, atât timp cât fiecare cand clauza este foarte similară, devine de fapt Mai Mult care poate fi citit.
Când ar trebui să utilizați o linie unică și mai multe linii atunci când clauzele depind de dvs., este o problemă de stil. Cu toate acestea, amestecarea celor două nu este recomandată - o declarație de caz ar trebui să urmeze un model pentru a fi cât mai citibil posibil.
Ca și afirmațiile dacă, declarațiile de caz se evaluează la ultima declarație din cand clauză. Cu alte cuvinte, ele pot fi utilizate în misiuni pentru a oferi un fel de tabel. Cu toate acestea, nu uitați că afirmațiile de caz sunt mult mai puternice decât căutările simple de tip array sau hash. Un astfel de tabel nu trebuie neapărat să folosească literale în cand clauze.
Dacă nu există nicio potrivire atunci când clauza și nici o altă clauză, atunci instrucțiunea de caz se va evalua zero.