Slides
Next: Loops >>

Truthiness

Computers have a very strict idea of when things are true and false.

Truthiness

(Unlike Stephen Colbert...)

True or False?

Try the following in irb:

  • 1 < 2
  • 2 + 2 < 4
  • 2 + 2 <= 4
  • 2.even?
  • 4.odd?
  • "apple".empty?
  • "".empty?

Conditions

The magic word if is called a CONDITIONAL.

if age < 18 then
  puts "Sorry, adults only."
end

One-Line Condition

Ruby has a compact way of putting an entire if expression on one line:

puts "Sorry, adults only." if age < 18

Note that:

  • the action comes first in a one-line condition
  • this sounds kind of natural
    • "Go to bed if you're sleepy."

if... then... else... end

The magic word else allows BRANCHING.

if age >= 18 then
  puts "allowed"
else
  puts "denied"
end

Like a fork in the road, the program chooses one path or the other.

(In Ruby, then is optional, so we usually leave it off, but if it makes your code clearer, go ahead and use it.)

2 + 2 = 4

Sadly, this expression:

2 + 2 = 4

causes a SyntaxError. You need to do

2 + 2 == 4

instead. Why?

The Tragedy of the Equal Sign

  • a single equal sign means ASSIGNMENT
    • name = "Alice" -- "assign the variable 'name' to the value 'Alice'"
  • two equal signs means COMPARISON
    • name == "Alice" -- "does the variable 'name' contain the string 'Alice'?"

This is confusing, and you should feel confused.

  • (it's all FORTRAN's fault)

LAB: Good Friend, Bad Friend

  • Your hello.rb program should currently look something like this:

    puts "What is your name?"
    name = gets.strip
    puts "Hello, " + name + "!"
    
  • Now change hello.rb so that it doesn't always say hello!

    • If the user's name is "Darth" then say "Go away!"

Conjunction Junction

  • You can make more complicated logical expressions using conjunctions like and, or, not:

    • X and Y means "are both X and Y true?"
    • X or Y means "is either X or Y (or both) true?"
    • not X means "is X false?" (think about it)
  • For example:

    if age >= 18 or parent.gave_permission? then
      puts "allowed"
    else
      puts "denied"
    end
    

LAB: Enemies List

  • Change hello.rb so that it says "Go away!" if the user's name is any one of a number of evil names
  • For instance, Voldemort, Satan, Lex Luthor...
comments powered by Disqus