||=-operatorn i Ruby
I Ruby, liksom de flesta andra programmeringsspråk, finns det något som kallas abbreviated assignment (förkortad tilldelning). Det är operatorer som +=
och -=
som låter oss lägga till respektive dra ifrån värdet på en redan existerande variabel.
Om man är ny i Ruby-världen finns det risk för förvirring när man stöter på ||=
i andras källkod. Vad gör den och vad är den bra till? Jag tänkte förklara med ett exempel.
|
|
Okej, vad händer här egentligen? Vi börjar med en instansvariabel @count
som är odefinierad (nil
). Sedan använder vi ||=
-operatorn och @count
är nu 0. Har vi bara gjort en vanlig tilldelning?
|
|
Det verkar inte så, efter en ny tilldelning är @count
fortfarande 0. ||=
är egentligen bara en förkortning och kan skrivas om:
|
|
||
-operatorn i Ruby fungerar så här: först undersöks operanden till vänster. Om den har ett värde som inte är nil
eller false
så returneras det värdet. Annars returneras värdet på operanden till höger.
Så om vi ska översätta den senaste raden kod till “ren svenska”: sätt variabeln @count
till 32 om @count
inte redan har något värde.
När har jag användning för detta?
Säg till exempel att du har har en metod i en webbapplikation som hämtar den inloggade användaren från databasen. För att undvika onödiga anrop till databasen väljer du att spara undan användaren i en instansvariabel. Koden för detta ser ut så här:
|
|
Det här är ett perfekt användningsområde för ||=-operatorn. Du kan spara en hel rad genom att i stället skriva så här:
|
|
Uppdaterat 2011-11-24: Tack till Linh som fick mig att uppdatera med ett bättre exempel.