If You Please
Ruby keeps things straightforward: an if statement is written using the if
keyword. An if block – the code that an if statement can run – starts with the if
statement and ends with the end
keyword. Let’s see an example:
name = "Bridge" if name == "Bridge" puts "Hello Bridge" end
Do you remember the equality operator: ==
? We use this with the if
keyword to say **if* the stuff on the left side of ==
is the same as the stuff on the right side, then execute all of the following code until you reach the end
keyword.* This is called a conditional statement.
In the example above, we’re saying **if* the value stored in the variable name
is the same as the string “Bridge”, then display the words “Hello Bridge” on the screen.* It can’t get any easier than that, right?
It’s Ruby, Let’s Simplify
It can get easier than that. Ruby is super expressive – it doesn’t want us to write more code than needed for the interpreter to understand what we want to do. This means that we can simplify the above example even more.
If your if block only has one statement, you can just place the condition at the end of that statement without formally writing the whole block. Let’s take a look:
name = "Bridge" puts "Hello Bridge" if name == "Bridge"
If you run this code, you’ll get the exact same result as the first example – we’re just changing the way we tell Ruby what we want to do. This time, we’re saying display “Hello Bridge” on the screen only if the name is Bridge.
If your if
block contains more than one statement, then you’ll have to use a regular if … end block:
name = "Bridge" if name == "Bridge" puts "Hello Bridge" puts "Nice to see you here, Bridge" end
Quick Recap
Conditional statements are a huge part of programming – without them, we wouldn’t be able to interact with our programs. This is important stuff, so we want to make sure that you understand it all.
See if you can predict the output of the program below – write down your prediction and test your answer by running the code on your computer. If you don’t quite understand the result, head over to The Forums and ask for help before proceeding any further. You’ll be using this concept a lot in your future programs, so you need to make sure you understand it now!
firstname = "Rob" lastname = "Stark" if firstname == "Jaime" puts "Hey Jaime" end puts "How are you, #{firstname}?" puts "Winter is coming." if lastname == "Stark"
How did you do? Did your prediction match the output of the program? Great! We’ve got a lot more to see, so let’s keep moving!
A Keyword For The Rest
Let’s say you want to display Use the Force, Luke if the name
is Luke – just use an if
statement, right? Easy!
But what if you want to display something else if the name
is not Luke? We could just write another if
statement, but there must be something else we can do. How else can we display something else on the screen?
We’re not very subtle, are we? The else
keyword is here to help us do something else if the if
statement is not true:
name = "TK421" if name == "Luke" puts "Use the Force, Luke" else puts "These are not the droids you are looking for" end
This is an if block that contains an else clause. We’re simply telling Ruby if the if
statement evaluates to true
, run the code in this block; otherwise, run the code in the else
block.
Not Equal
You should already know about the not equal relational operator from our previous lessons. Ruby uses the same operator that we used in our pseudocode: !=
.
So another way to write the above example would be like this:
name = "TK421" if name != "Luke" puts "These are not the droids you are looking for" else puts "Use the Force, Luke" end
This time we’re saying if the name
is *not** Luke, display the words “These are not the droids you are looking for.” Otherwise, display the words “Use the Force, Luke.”*
Equal and Not Equal are two very important foundations in any program. Make sure that you really understand these concepts!
When One Condition Is Not Enough
Adding logic to our programs greatly expands what we can make them do. But sometimes we need to test more than one condition. We may need to check two or more conditions and if they’re both true or if only one of them true.
That’s where And (&&
) and Or (||
) come in. You should remember these from before.
We could test two or more conditions by using nested if
statements:
username = "Dumbledore" password = "Sherbet Lemon" if username == "Dumbledore" if password == "Sherbet Lemon" puts "Welcome, Albus." end end
Here we’re saying if the username
is “Dumbledore”, then run this code: if the password
is “Sherbet Lemon”, then run this code: display “Welcome, Albus” on the screen.
That’s not easy to read or understand, is it? It’s much easier to use the and keyword (represented by two ampersands, &&
, in Ruby) to check both conditions at the same time:
username = "Dumbledore" password = "Sherbet Lemon" if username == "Dumbledore" && password == "Sherbet Lemon" puts "Welcome, Albus." end
Now we’re saying if the username
is “Dumbledore” *and** the password
is “Sherbet Lemon”, then display “Welcome Albus” on the screen*.
That’s much better: now we can easily read the code and understand what it does!
If we want to test several conditions to see if at least one of them evaluates to true
, we can use the or keyword (represented by two pipe characters, ||
, in Ruby) to check all conditions at the same time:
kiwis = 0 apples = 7 oranges = 0 if kiwis > 0 || apples > 0 || oranges > 0 puts "You have at least one fruit" else puts "You don't have any fruits" end
Here we’re saying if kiwis
is more than 0, *or** if apples
is more than 0, or if oranges
is more than 0, then display “You have at least one fruit” on the screen. Otherwise, display “You don’t have any fruits” on the screen”*. Only one of the three conditions needs to be true
for the if
block to run.
Trust us, you don’t want to see what that example looks like using nested if statements (but you could always try to write it to see for yourself)!
Again, This Is Ruby
Ruby has a special keyword that you won’t see in many other languages: the unless
keyword. It’s the exact opposite of the if
keyword – it means if not
. Here’s an example:
name = "Joey" puts "These are not the droids you are looking for" unless name == "Luke"
Using the unless
keyword can be tricky if you want to keep your code easy to read and understand. There are a few rules you’ll want to follow:
1. **Don't** use more than one logical condition. 2. **Don't** use it with a negative statement - `unless` is already negative. 3. **Never** use an `unless` statement with an `else` clause!
You can read a quick discussion about the unless
keyword on Signal v. Noise, the blog from the folks at Basecamp.
Summary
In this lesson we covered basic conditional operations in Ruby. You can now tell the interpreter to run a set of statements only if one or more conditions are true – and what to do if those conditions aren’t true.
In the next lesson, we’ll dig deeper into conditional operations and see even more useful ways to build good programs!
Important Words
- Conditional operation
if
end
else
unless
Exercise
Write a Ruby program that outputs either “Good morning”, “Good afternoon”, “Good evening”, or “Hello” based on the value of a time_of_day
variable that can hold a string like "morning"
.
Once your program is finished, post it in the Forums so we can make sure you understand the basics of conditional operations in Ruby.
We can’t wait to see what you make!