Ruby Flow Control

Revision as of 20:50, 19 November 2007 by Neil (Talk | contribs) (Using else and elsif Constructs)

Revision as of 20:50, 19 November 2007 by Neil (Talk | contribs) (Using else and elsif Constructs)

One of the most powerful features of Ruby (and every other programming or scripting language for that matter) is the ability to build intelligence and logic into code. This is achieved through the use of control structures which decide what code is executed based on logical expressions.

In this chapter of Ruby Essentials we will look at how such control structures are built.

The Ruby if Statement

The if statement is the most basic of the Ruby control structures. if statements simply specify a section of Ruby script to be executed when a specified criteria is met. The syntax for an if statement is as follows:

if expression then
  ruby code
end

In the above outline, the expression is a logical expression that will evaluate to either true or false. if the expression is true, then the code represented by ruby code will execute. Otherwise the code is skipped. end marks the end of the if statement.

Let's look at an example:

if 10 < 20 then
    print "10 is less than 20"
end

When executed, the script will display the string "10 is less than 20", because the 10 < 20 expression evaluated to true.

If this was any language other than Ruby we would now move on to the next section. Except that this is Ruby we are talking about, so we have more flexibility. Firstly, we can drop the then keyword and get the same result:

if 10 < 20
    print "10 is less than 20"
end

We can also place the if after the print statement, and in doing so, drop the end statement:

print "10 is less than 20" if 10 < 20

Similarly, we can place a colon (:) between the if expression and the statement to be executed:

if 10 < 20: print "10 is less than 20" end

The expression to be evaluated can also include logical operators. For example:

if firstname == "john" && lastname == "smith" then
print "Hello John!"
end

Using else and elsif Constructs

The if control structure outlined above allows you to specify what should happen if a particular expression evaluates to true. It does not, however, provide the option to specify something else that should happen in the event that the expression evaluates to false. This is where the if ... else construct comes into play.

The syntax for if ... else is similar to the simple if statement with the exception that the else statement can be used to specify alternate action:

if customerName == "Fred"
      print "Hello Fred!"
else 
      print "You're not Fred! Where's Fred?"
end

As shown in the above example the code block following the if statement is executed when the expression is evaluated to be true (i.e the customerName variable contains the string "Fred") and the script after the else statement is executed when the customerName does not match the string "Fred".

elsif structures take the if ... else ... concept a step taken a step further to implement if ... else ... if ... else ... structures. For example:

if customerName == "Fred"
      print "Hello Fred!"
elsif customerName == "John"
      print "Hello John!" 
elsif customername == "Robert"
      print "Hello Bob!"
end

This construct may also be expressed a little more economically using a colon (:) to separate the elsif from the print statement:

if customerName == "Fred" : print "Hello Fred!"
elsif customerName == "John" : print "Hello John!" 
elsif customername == "Robert" : print "Hello Bob!"
end

The Ruby Ternary Operator