Part 1:
Part 2:
Covered in this episode:
- Code Blocks
- if, else, unless
- case, when
- while, until, for loops
Transcript:
Hello everybody and welcome to Programming With Ruby Episode 9, Flow
Control. I’m Tyler and this video is brought to you by manwithcode.com
So far all of the programs and code that I have shown you has been
completely linear. There has been no way to loop based on a condition
or do something based on what the user inputs.
In this episode I will be showing you how to do all this, and I will
also be explaining to you what a code block is, since I’ve been
mentioning them in almost every episode previous to this.
This episode is REALLY LONG! Feel free to pause the video and think
about what’s been said or try out code yourself.
Code Blocks
Throughout the previous videos, I’ve been telling you about code
blocks, I’ve also been telling you I’ll teach you what they are in a
later episode. That episode has finally come.
Code blocks look something like this:
my_array.each do |item| puts item end
or like this:
my_array.each { |item| puts item }
Both of those actually do the same thing! The .each method takes a
block as an argument. The block is what is between the do and end
keywords, or the curly braces, depending on which format you use.
The item between the pipe characters (which is above the ENTER key) is
the variable the .each method gives you (in this case the item in the
array).
The rest of the code block is just normal Ruby code. Not so complicated, eh?
(Keep in mind that there are more metheds besides .each that take code blocks)
If, Else, and Unless
A basic if statement would look like this:
x = 3 if x < 5 # Do something end
The “x < 5” is the condition that has to be true for the code to
run. If that condition is true, the code between the “if” and “end”
keywords is run.
There are many different conditional operators you can use:
== < > <= >= !=
Just be sure to keep in mind that the “is equal” operator uses two
equal signs, not one.
If you would like code that is run when the condition is false:
x = 3 if x < 5 # Do something if true else # Do something if false end
In a similar way you can execute code if the first condition is false
but a second is true:
x = 3 if x < 5 # Do something if true elsif x == 3 # Do something if the first is false and this is true else # Do something in all are false end
In a different way you can only execute the code if two conditions are true:
x = 3 y = 2 if x == 3 and y == 2 # Do something end
You can also only execute code if one of any conditions are true:
x = 3 y = 4 if x == 3 or y == 2 # Do something end
There is also the evil twin brother of if, unless:
x = 3 unless x == 3 # if x is 3, this code will not run end
You can chain all of these together in almost any way you choose.
Case, When
Another way to evaluate conditions is using case, when:
x = 3 case x when 1 then # do something when 3 then # do something else # do something if none are true end
You can’t do many complex conditionals, but it can be nicer than a
long chain of if, else’s
while, until, and for loops
Similarly to the above if statements, while, until, and for loops will
execute code based on a condition, but they will do it multiple times.
while:
x = 1 while x < 5 x += 1 puts x end
Similar to the relationship between if, and unless. while has an evil
sister, until
x = 1 until x > 5 x += 1 puts x end
There are also for loops, which allow you to iterate over something
foods = ["ham", "eggs", "cheese"] for food in foods puts food += " is yummy!" end
There is also .each, for’s evil stepchild:
foods = ["ham&", "eggs", "cheese"] foods.each do |food| puts food += " is yummy!" end
Concrete Example
A menu system
input = "" until input == 'quit' puts " Menu (1) Hi! (2) Credits (3 or quit) Exit " input = gets.chomp! case input when "1" then puts "Hi!" when "2" then puts "Written By: Tyler" when "3" then input = 'quit' else puts "Invalid input" end end
Lets break it down.
First we set the input variable to an empty string (so the second line
dosen’t give us an error)
Then we use an until loop that quits when input is equal to ‘quit’
Next we print the menu (which is unindented so it doesn’t print to the
screen indented)
After that we get input from the user, use .chomp! to remove the
newline character created from pressing ENTER, and put the input into
the input variable
Then we have a case statement, when “1” we print “Hi!”, when “2” we
print who it was created by, when “3” we quit, otherwise we print out
“Invalid input” to tell the user they entered something wrong.
This brings us to the end of the video.
If you like these videos please donate, because I’m doing this all for free
If you have any questions, comments, or suggestions, you can leave a
comment on this page. Or you can email me at tyler@manwithcode.com
I covered a lot of material in this episode and I urge you to watch it
again, go to the original post and look at the code (link is in the
description) and write some code yourself.
Thank you very much for watching, goodbye!
Programming With Ruby Episode 8, HashesProgramming With Ruby Episode 10, Objects and Modules
For the menu system, is it possible to assign values to their selection that is stored and can be used to add to the value of another menu system? I love your videos!