One comes after another. With an if-statement, we introduce a branch. We can avoid statements and jump to other ones.
Selection statements. Here we direct the flow of control. And with elsif and else we handle alternative branches. In Ruby an end-statement is often required.
If example. After the if-keyword we place an expression. Ruby then checks whether this statement evaluates to true or false. If it evaluates to true, the inner block is entered.
However: If the expression evaluates to false, the inner block of an if-statement is not reached. The statements are not executed.
Based on: Ruby 2 Ruby program that uses if-statements # Some integer variables. a = 1 b = 2 c = 3 # Test for inequality. if a != b puts "1 != 2" end # Add and then test for equality. if a + b == c puts "1 + 2 == 3" end Output 1 != 2 1 + 2 == 3
Elsif, else. An if-statement can have more parts. It can include an elsif-statement and an else-statement. They are reached only when the initial if-statement evaluates to false.
Here: The statement within the else-block is reached. The if, and the elseif, both evaluate to false. "Z" is printed.
Tip: For performance, putting the condition that matches most often first is fastest. Fewer conditions must be evaluated in total.
Ruby program that uses if, elsif and else # Two integers. a = 1 b = 2 # Use if, elsif, else on the integers. if a > b # Not reached. print "X" elsif a == b # Not reached. print "Y" else # This is printed. print "Z" end Output Z
One-line. Ruby supports one-line if-statements. The "if" is used to modify the preceding statement. These statements are only run if the if-expression evaluates to true.
Here: The first statement has no effect because the variable is not greater than 5. But the second statement takes effect.
Ruby program that uses one-line if-statements # Variable equals 5. i = 5 # Use one-line if-statements. puts "Greater than 5" if i > 5 puts "Not greater than 5" if i <= 5 Output Not greater than 5
Unless. This is a negated if-statement. It has the same functionality as an if-statement that tests for false, not true. But this syntactic sugar is sometimes useful.
Also: There is an else-statement that can follow the unless statement. The syntax is just like an if-block.
Ruby program that uses unless i = 4 # Use an unless-else construct. unless i == 3 puts "UNLESS" else puts "ELSE" end Output UNLESS
Unless, one line. An unless modifier can also be used on one line. This syntax makes programs readable, almost like English: you take a certain action unless a condition is true.
Here: We display the value of the string with puts, unless the value equals Cat. So the value Dog is displayed.
Ruby program that uses unless, one-line animal = "Dog" # Display the animal string unless it equals Cat. puts animal unless animal == "Cat" Output Dog
And, or. Sometimes we need to chain together expressions in an if-statement. We can use the "and" or "&&" operators. They have the same effect. Two syntax forms for "or" are also supported.
Short-circuit: These operators short-circuit. And will stop checking after its first false result, "or" after its first true.
Note: The English operators (and, or) are easier to read. But the symbolic ones are more familiar to developers of C-like languages.
Ruby program that uses and, or animal1 = "cat" animal2 = "dog" # And operators. if animal1 == "cat" and animal2 == "dog" puts 1 end if animal1 == "cat" && animal2 == "dog" puts 2 end # Or operators. if animal1 == "whale" or animal2 == "dog" puts 3 end if animal1 == "whale" || animal2 == "dog" puts 4 end Output 1 2 3 4
Ternary. This statement uses a question mark and a ":" after an expression. If the expression evaluates to true, the first result is chosen.
Otherwise: The second value is used as the result. Here, the value equals 10, so the result is 20. The 0 is returned in all other cases.
Ruby that uses ternary value = 10 # Ternary statement. result = value == 10 ? 20 : 0 puts result Output 20
Equals. In an if-conditional, two equals signs check for equality. Ruby will report a warning if you use just one equals sign. An assignment uses one equals. A conditional, two.
But: The program still compiles. In some languages, this syntax results in a fatal, compile-time error.
Ruby that causes equals sign warning value = 10 # We should use two = in a conditional. if value = 20 puts true end Warning C:/programs/file.rb:6: warning: found = in conditional, should be == Output true
Assign. Like a method, an if-statement returns a value. This comes from the last statement evaluated. We can assign a variable to the result of an if-statement.
Result: In this program, the variable cat_sound is assigned to "meow" because the size variable is equal to 0.
Ruby that assigns to if # Set size to zero. size = 0 # Assign cat_sound to result of if-statement. cat_sound = if size == 0 "meow" else "roar" end puts(cat_sound) Output meow
Then. This keyword can be part of an if-statement. But usually in Ruby programs do not use the "then." This keyword may be preferred if makes the code clearer to read.
Note: In programming, clarity is key. But standard forms—using Ruby that other developers also use—is also important.
This document will omit the optional then for all expressions as that is the most common usage of if.
Ruby that uses then keyword value = 10 size = 10 # The "then" keyword is optional. if value == size then puts true end # Omit the then. if value == 10 puts 10 end Output true 10
True, false. In an if-statement all values can be evaluated for truth. In this program, we test for truth. We test numbers, empty collections like arrays, and nil.
Numbers: All numbers (including 0) evaluate to true. Other programming languages sometimes treat 0 as false, but not Ruby.
Empty array: An empty Array evaluates also to true. Empty collections are treated the same as ones with elements.
Nil: False and nil evaluate to false—these were the only false values found in this test.
Ruby that tests for true, false values = [0, 1, -1, true, false, nil, Array.new()] # Test all the values for truth. values.each do |v| if v puts String(v) + " = true" else puts String(v) + " = false" end end Output 0 = true 1 = true -1 = true true = true false = false = false  = true
A summary. The if-statement is an imperative branching statement. This means it affects what statements are next executed. Its effect is directly specified by the programmer.
Some concepts. With an if-statement, we create conditional blocks. The data in our programs influences what operations are taken. An elseif and else provide alternative paths.