||=-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.
puts @count
#=> nil
@count ||= 0
puts @count #=> 0
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?
@count ||= 32
puts @count #=> 0
Det verkar inte så, efter en ny tilldelning är @count fortfarande 0. ||= är egentligen bara en förkortning och kan skrivas om:
@count = @count || 32
||-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 ska skriva en metod som räknar ut några värden. Dessa värden vill du lägga till en array och sedan returnera den. Du vill att användaren av din metod ska kunna skicka med en array som ska användas, men om hon inte gör det vill du skapa en ny, tom array.
def my_function(results = nil)
results ||= []
# Gör avancerade uträkningar här
return results
end
