Conditionals
Previously, we mentioned that Ruby allows us to compare values, and returns
true
or false
:1 < 2 # "1 is less than 2"
2 < 1 # "2 is less than 1"
24*365 > 10000 # There are more than 10,000 hours in a year
1 == 1 # "1 is equivalent to 1"
1 == 2 # "1 is equivalent to 2"
1 != 1 # "1 is NOT equivalent to 1"
1 != 2 # "1 is NOT equivalent to 2"
This becomes useful in conjunction with the
if
statement, which allows us to do things conditionally in our programs, rather than doing them on every run.Let's see how this works. Locate the file called
app/controllers/programs_controller.rb
and let's start a new program where it says:def first_program
# Your code goes below.
@your_output = "Replace this string with your output"
render("programs/first_program.html.erb")
end
First, in Chrome, navigate to
https://ruby-intro-[YOUR CLOUD 9 USERNAME].c9users.io/first
. That is where the output of this other program is being displayed. Modify @your_output
to confirm this.Next, let's try this:
def first_program
# Your code goes below.
@your_output = "Hi!"
if 1 < 2
@your_output = "duh"
end
render("programs/first_program.html.erb")
end
Now switch the
1 < 2
to 2 < 1
and refresh the page.Ok, here's the deal with
if
:- It must have a matching
end
, so just type it before you type anything else and forget it. - Code that comes between the
if
andend
will only be executed if the expression next to theif
evaluates totrue
. - If the expression is
false
, then the code inside theif
statement will simply be ignored.
You can also have multi-branch
if
statements:def first_program
# Your code goes below.
the_number = rand(100)
if the_number < 25
@your_output = "It's going to be your lucky day today"
elsif the_number > 75
@your_output = "Don't leave home today"
else
@your_output = "It'll be an okay day today"
end
render("programs/first_program.html.erb")
end
- Note that there's no space in
elsif
. - The conditions are checked in top-down priority, so even if more than one is true, whichever one is first has its branch executed; the rest are ignored.
- If none are true, the final
else
fallback branch is executed; but you don't have to have one if you don't want one.
Inside a branch of an
if
statement, you can have as many lines of code as you want -- and you can even have whole other multi-branch if statements, if that's what you need.Finally, another handy thing to have in your toolbelt are the logical operators
&&
and ||
. These allow you to combine comparisons; try these out in rails console
:1 < 2 && 2 < 3 # Is 1 less than 2 AND 2 less than 3? Duh
1 < 2 && 3 < 2 # Is 1 less than 2 AND 3 less than 2? I guess not
2 < 1 && 3 < 2 # Is 2 less than 1 AND 3 less than 2? Duh
1 < 2 || 2 < 3 # Is 1 less than 2 OR 2 less than 3? Yep
1 < 2 || 3 < 2 # Is 1 less than 2 OR 3 less than 2? I guess so
2 < 1 || 3 < 2 # Is 2 less than 1 OR 3 less than 2? Duh
Basically,
&&
is stricter than ||
; both comparisons have to be true in order for the whole statement to be true when combined with &&
; either one being true is sufficient for ||
.Can you modify the program to randomly choose between "rock", "paper", and "scissors", and display it on the page on each refresh?
After that, can you display whether the random choice would have won, lost, or tied against "rock"?
As you might be starting to notice, computers just do very simple things, but they do them really fast. And one of the most useful things to have computers do quickly for us is process big lists of things. For that, we need to learn about Loops in Ruby.
Last modified 5yr ago