November 25, 2014

Ruby – Conditional Initialization

What if you want to create a new variable/object (aka initialise a varaible), but only if it doesn’t already exist. This is possible using the following assingment operator:


You can find all my latest posts on medium.

||= # this is called the “or equal assignment operator”

There is also a similar operator, “&&=” but this isn’t used that often.

Here’s an example:

john ||=

Here an object called “john” is created, but only if it doesn’t already exist.

This also works for simple variables, e.g.

irb(main):017:0* x = 5
=> 5
irb(main):018:0> puts x
=> nil
irb(main):019:0> x ||= 10
=> 5
irb(main):020:0> puts x
=> nil
irb(main):021:0> x = nil
=> nil
irb(main):024:0> puts x

=> nil
irb(main):025:0> x ||= 10
=> 10
irb(main):026:0> puts x
=> nil

Note, conditional inizialation also wroks with other data types, such as strings and arrays. The only exception is that it doesn’t work for setting/unsetting booleans.

There are alternatives to using “||=”, for example, by making use of the “unless” keyword:

john = unless john