Intro

Like many other languages, Crystal has a few methods of controlling a programs flow of execution.

if/elsif/else

if and elsif conditions are evaluated on being truthy or falsy

crystal
# Exampe if/elsif/else block.
if is_stuff
    puts "its stuff"
elsif is_things
    puts "its things"
else
    puts "its something else"
end

# An if condition can be used at the end of an expression.
stuff = "stuff" if is_stuff

unless

unless can be though if as a synonym for if not.

crystal
# Exampe unless/else block.
unless is_stuff
    puts "its not stuff, its things"
else
    puts "its stuff"
end

# An unless condition can be used at the end of an expression.
stuff = "stuff" unless not_stuff

case/when

case/when blocks are usually more suitable than an if/else block when there is a larger number of conditions to check for.

crystal
# Exampes of case/when block.
items = 10

# Check equality 
how_much_stuff = case items
    when 0
    "no stuff"
    when 1
    "a little stuff"
    when 5
    "a bit more stuff"
    when 10
    "a lot of stuff"
    else
    "maybe get some things"
end

# Evaluate expression
how_much_stuff = case
    when items == 0
    "no stuff"
    when 1 < items < 5
    "a little stuff"
    when 5 < items < 10
    "a bit more stuff"
    when items > 10
    "a lot of stuff"
    else
    "maybe get some things"
end

Considerations

  • Crystal treats false, nil and null pointers as falsy, everything else is truthy

Tags