Använda fallet (switch) Ruby Statement

På de flesta datorspråk är fallet eller villkorat (även känt 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 Ruby är det lite mer flexibelt (och kraftfullt).

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

Det finns dock vissa skillnader från andra språk. I C är ett switch-uttalande ett slags ersättare för en serie av om och går uttalanden. Fallen är tekniskt etiketter och switch-uttalandet 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

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 (dvs.. 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 används en enkel värdejämförelse i C ++ och andra C-liknande språk. 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 fall === värde tills den hittar en match.

Om vi ​​skulle mata in Guppa, Ruby skulle först utvärdera "Alice" === "Bob", vilket skulle vara falsk sedan String # === 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 ärenden ä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 en om 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.