Hur man använder ärende / switch-uttalandet i Ruby

I de flesta datorspråk, fallet eller villkorat (även känd som växla) uttalande jämför värdet på en variabel med värdet för flera konstanter eller bokstäver och kör den första sökvägen med ett matchande fall. I Rubin, det är lite mer flexibelt (och kraftfullt).

Istället för att ett enkelt jämställdhetstest utförs, används likabehandlingsoperatören, vilket öppnar dörren för många nya användningar.

Det finns dock vissa skillnader från andra språk. I C, en switch-uttalande är en typ av ersättning för en serie av om och går uttalanden. Fallen är tekniskt etiketter och växla uttalande går till matchande etikett. Detta visar ett beteende som kallas "genombrott", eftersom exekveringen inte slutar när den når en annan etikett.

Detta undviks vanligtvis genom att använda en break-uttalande, men genombrott är ibland avsiktligt. Falluttalandet i Ruby kan å andra sidan ses som ett kort för en serie av om uttalanden. Det finns inget genomslag, bara det första matchande fallet kommer att köras.

Den grundläggande formen för ett ärendeuttalande

instagram viewer

Den grundläggande formen för ett ärende är som följer.

Som ni ser är detta strukturerat något som ett om / annat om / annat villkorligt uttalande. Namnet (som vi kallar värde), i det här fallet som matats in från tangentbordet, jämförs med vart och ett av fallen från när klausuler (d.v.s. fall), och det första när blocket med ett matchande fall kommer att köras. Om ingen av dem matchar, annan block kommer att köras.

Det som är intressant här är hur värdet jämförs med vart och ett av fallen. Som nämnts ovan, i C ++och andra C-liknande språk används en enkel värdejämförelse. I Ruby används ärendet likabehandlingsoperatör.

Kom ihåg att typen av vänster sida för en likabehandlingsoperatör är viktig och fallen är alltid vänster sida. Så för varje när klausul, kommer Ruby att utvärdera fallvärde tills den hittar en match.

Om vi ​​skulle mata in GuppaSkulle Ruby först utvärdera "Alice" "Bob", vilket skulle vara falsk sedan Sträng# definieras som jämförelsen av strängarna. Nästa, /ebritqrzachte.+/i "Bob" skulle köras, vilket är falskt sedan Guppa börjar inte med Q, R eller Z.

Eftersom inget av fallen matchade kommer Ruby att verkställa den andra klausulen.

Hur typen kommer in i spelet

En vanlig användning av ärendeuppgifterna är att bestämma typen av värde och göra något annorlunda beroende på dess typ. Även om detta bryter Rubys vanliga anka typ, är det ibland nödvändigt att få saker gjort.

Detta fungerar med hjälp av Klass# (tekniskt sett Modul#) operatör, som testar om höger sida är en? vänster sida.

Syntaxen är enkel och elegant:

En annan möjlig form

Om värde är utelämnad, ärendeklarationen fungerar lite annorlunda: det fungerar nästan exakt som ett if / else if / annars uttalande. Fördelarna med att använda ärendeklarationen jämfört med enom uttalande, i det här fallet, är bara kosmetiska.

En mer kompakt syntax

Det finns tillfällen då det finns ett stort antal små när klausuler. Ett sådant ärende blir lätt för stort för att passa på skärmen. När detta är fallet (ingen ordlista avsedd) kan du använda sedan nyckelord för att sätta kroppen på när klausul på samma linje.

Även om detta ger en mycket tät kod, så länge som var och en när klausulen är väldigt lik, den blir faktiskt Mer läsbar.

När du ska använda enlinje och flera linjer när klausuler är upp till dig handlar det om stil. Det rekommenderas dock inte att blanda de två - ett ärende ska följa ett mönster för att vara så läsbart som möjligt.

Falluppgift

Liksom om uttalanden, ärenden uttalanden utvärderas till det sista uttalandet i när klausul. Med andra ord kan de användas i uppdrag för att tillhandahålla ett slags bord. Glöm emellertid inte att uttalanden från fallet är mycket kraftfullare än enkla uppsättningar eller hashuppslag. En sådan tabell behöver inte nödvändigtvis använda bokstäver i när klausuler.

Om det inte finns någon matchning när klausul och ingen annan klausul kommer bedömningen av ärendet att utvärderas till noll.