Ruby Language Control Flow Or-Equals/Conditional assignment operator (||=)

Help us to keep this website almost Ad Free! It takes only 10 seconds of your time:
> Step 1: Go view our video on YouTube: EF Core Bulk Extensions
> Step 2: And Like the video. BONUS: You can also share it!

Example

Ruby has an or-equals operator that allows a value to be assigned to a variable if and only if that variable evaluates to either nil or false.

 ||= # this is the operator that achieves this. 

this operator with the double pipes representing or and the equals sign representing assigning of a value. You may think it represents something like this:

 x = x || y

this above example is not correct. The or-equals operator actually represents this:

 x || x = y

If x evaluates to nil or false then x is assigned the value of y, and left unchanged otherwise.

Here is a practical use-case of the or-equals operator. Imagine you have a portion of your code that is expected to send an email to a user. What do you do if for what ever reason there is no email for this user. You might write something like this:

 if user_email.nil?
    user_email = "[email protected]"
 end

Using the or-equals operator we can cut this entire chunk of code, providing clean, clear control and functionality.

 user_email ||= "[email protected]"

In cases where false is a valid value, care must be taken to not override it accidentally:

has_been_run = false
has_been_run ||= true
#=> true

has_been_run = false
has_been_run = true if has_been_run.nil?
#=> false


Got any Ruby Language Question?