In Ruby we use if
-statements to test values. We can test multiple values at once, and use other logical operators like "or."
In a selection statement we direct the flow of control. In Ruby we use the "if" keyword. With elsif and else we handle alternative branches. An end is required.
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.
if
-statement is not reached. The statements are not executed.# 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" end1 != 2 1 + 2 == 3
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.
else
-block is reached. The if and elseif evaluate to false, so "Z" is printed.# 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" endZ
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.
# Variable equals 5. i = 5 # Use one-line if-statements. puts "Greater than 5" if i > 5 puts "Not greater than 5" if i <= 5Not greater than 5
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.
else
-statement that can follow the unless statement. The syntax is just like an if
-block.i = 4 # Use an unless-else construct. unless i == 3 puts "UNLESS" else puts "ELSE" endUNLESS
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.
string
with puts, unless the value equals Cat. So the value Dog is displayed.animal = "Dog" # Display the animal string unless it equals Cat. puts animal unless animal == "Cat"Dog
Sometimes we need to chain together expressions in an if
-statement. We can use the "and" operators. Two syntax forms for "or" are also supported.
short
-circuit. And will stop checking after its first false result, "or" after its first true.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 end1 2 3 4
In the Ruby grammar there is an important difference between English and C-like versions. The English words have lower operator precedence.
if
-expressions. The first has "and" which means the part after the "||" is evaluated together.if
-statement use an operator which means "top" is evaluated all by itself.left = 0 top = 2 # Not true because "and" has lower precedence. if top == 2 || left == 0 and top == 3 puts "1" end # True because && has higher precedence. if top == 2 || left == 0 && top == 3 puts "2" end2If 1: (top == 2) (left == 0, top == 3) If 2: (top == 2, left == 0) (top == 3)
This statement uses a question mark and a ":" after an expression. If the expression evaluates to true, the first result is chosen.
value = 10 # Ternary statement. result = value == 10 ? 20 : 0 puts result20
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.
value = 10 # We should use two = in a conditional. if value = 20 puts true endC:/programs/file.rb:6: warning: found = in conditional, should be ==true
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.
cat_sound
is assigned to "meow" because the size variable is equal to 0.# 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)meow
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.
value = 10 size = 10 # The "then" keyword is optional. if value == size then puts true end # Omit the then. if value == 10 puts 10 endtrue 10
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
.
nil
evaluate to false—these were the only false values found in this test.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 end0 = true 1 = true -1 = true true = true false = false = false [] = true
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.
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.