Ruby – If-else statements

Here’s an example of a simple if-statement:

a_number = 5

if a_number < 10
  puts "#{a_number} is less than 10"
end  

This outputs:

PS C:\temp\irb> .\if-else.rb
PS C:\temp\irb> ruby .\if-else.rb
5 is less than 10
PS C:\temp\irb>

Now here's how an if-else statement looks like:

a_number = 13

if a_number < 10
  puts "#{a_number} is less than 10"
else  
  puts "#{a_number} is greater than 10"
end  

This outputs:

PS C:\temp\irb> ruby .\if-else.rb
13 is greater than 10
PS C:\temp\irb>

Now here's an example of an elsif statment (note, it is spelt "elsif" and not "elseif"):

a_number = 13

if a_number < 10
  puts "#{a_number} is less than 10"
elsif  a_number == 13
  puts "#{a_number} is an unlucky number"
else
  puts "#{a_number} is greater than 10"
end  

This outputs:

PS C:\temp\irb> ruby .\if-else.rb
13 is an unlucky number
PS C:\temp\irb>

In ruby, only the keywords "nil" and "false" evaluates to be false. Everything else (including empty strings/arrays and "0") evaluates to be true. Here are some examples:

class Human
  attr_reader :name
 
  def initialize(surname) 
    @name = surname
  end 

  def greeting 
    puts "hello everybody"
	false
  end
  
  def hungry 
    puts "I am hungry"
	true
  end
end

john = Human.new(nil)


if john.name 
  puts "john has a surname which is '#{john.name}'"
else 
  puts "john has no surname"  
end  


if john.greeting 
  puts "this is a geniune greeting"
else 
  puts "this is a sarcastic greeting"
end  
 
if john.hungry
  puts "John is genuinely hungry"
else 
  puts "John is lying and isn't that hungry"
end  

This outputs:

PS C:\temp\irb> ruby .\if-else.rb
john has no surname
hello everybody
this is a sarcastic greeting
I am hungry
John is genuinely hungry
PS C:\temp\irb>

One of the things commonly done, is to use an if-else statment to determine a value for a variable. Here is an example where we are trying to determine the value of the variable called "message":

a_number = 13

if a_number < 10
  puts "#{a_number} is less than 10"
  message = "Hence this is a small number."
else  
  puts "#{a_number} is greater than 10"
  message = "Hence this is a big number."
end  

puts message

This outputs:

PS C:\temp\irb> ruby .\if-else.rb
13 is greater than 10
Hence this is a big number.
PS C:\temp\irb>

You can rewrite this in a way to show to show that you are capturing the output of the if statement, like this:

a_number = 13

message = if a_number < 10
  puts "#{a_number} is less than 10"
  "Hence this is a small number."
else  
  puts "#{a_number} is greater than 10"
  "Hence this is a big number."
end  

puts message

If you have a really simple if-else statement, e.g.:

age = 15

price = if age <= 16   
  "half price"
else  
  "full price"
end  

puts price            # outputs: "half price"

Then it might be worth writing this if-else statement on a single line without sacrificing readability:

age = 15

price = if age <= 16 then "half price" else "full price" end  

puts price            # outputs: "half price"

Notice the inclusion of the "then" keyword here. You only use the "then" keyword when you squeeze an if-statement into one line, as we have done above.

If you just have a very simply if statement, and no else statement, then you can have even shorter single line if statements, here's an example:

def success_message
  puts "this is a success"
end

def result 
  true
end

success_message if result      # outputs "this is a success"