Rubyには、制御フロー式と呼ばれるものがあります。これはプログラムの実行の流れを制御するために使い、真または偽とみなされる値を受け取ります。 真または偽とみなされる値を作るために使える演算子もあり、これらは比較演算子と呼ばれます。
コードを実行するかしないかを制御するための、主な制御式が2つあります。言い換えると、どちらの分岐が実行されるかを決めるものです。
その2つとは、if式とunless式です。
比較演算子は、値を比較してtrueまたはfalseを返すために使います。
以下に挙げる演算子は、比較する2つの値が同じ型であることを必要とします。値の型が同じでない場合、コンパイラーはエラーを投げます。
以下は演算子の一覧と、trueになる例です。
| 演算子 | 説明 | 例 |
|---|---|---|
| < | より小さい | 4 < 5 |
| <= | 以下 | 4 <= 4 |
| > | より大きい | 3 > 1 |
| >= | 以上 | 2 >= 2 |
等しい・等しくない演算子は、すでに挙げた演算子とは異なり、どのような型の値でも比較できます。
==演算子は、2つの値が等しいかどうかを確認するために使います。これは値の型の確認も含みます。
!=も同じように動きますが、値が等しくない場合にtrueを、等しい場合にfalseを返します。
以下は等しい・等しくない演算子の一覧と、trueになる例です。
| 演算子 | 説明 | 例 |
|---|---|---|
| == | 等しい | 4 == 4 |
| != | 等しくない | 5 != 4 |
複合比較演算子(宇宙船演算子と呼ばれることもあります)は、特別な比較演算子です。
特別なのは、真または偽とみなされる値ではなく、数値を返す点です。
<=>と書き、2つの値を比較するために使います。
左の値が右の値より大きい場合は1、左の値が右の値より小さい場合は-1、値が等しい場合は0を返します。
1 <=> 2 # => -1
2 <=> 2 # => 0
3 <=> 2 # => 1
if文if文は、与えられた条件が真とみなされるか偽とみなされるかを確認するために使います。
条件が真とみなされる場合、if文の中のコードが実行されます。
if文はendキーワードで終わります。
value = 1
if value == 1
"1 is equal to 1"
end
# => "1 is equal to 1"
if value > 2
"1 is greater than 2"
end
# => nil
unless文unless文はif文とよく似た働きをしますが、条件が偽とみなされる場合にunless文の中のコードを実行します。
value = 1
unless value == 1
"1 is not equal to 1"
end
# => nil
unless value > 2
"1 is not greater than 2"
end
# => "1 is not greater than 2"
else文else文はif文と組み合わせて使うことができます。
else文は、ifの分岐が実行されなかった場合に実行されます。
value = 1
if value == 1
"1 is equal to 1"
else
"1 is not equal to 1"
end
# => "1 is equal to 1"
if value > 2
"1 is greater than 2"
else
"1 is not greater than 2"
end
# => "1 is not greater than 2"
if」文elsif文はif文と組み合わせて使うことができます。
ifの分岐が実行されず、かつelsif文の条件が真とみなされる場合に、elsif文が実行されます。
elsif文はつなげて書くことができ、最初に真とみなされた条件が実行されます。
if文の最後にelse文を置くこともでき、これより前のどの文も真にならなかった場合に実行されます。
value = 1
if value == 0
"1 is equal to 0"
elsif value > 2
"1 is greater than 2"
else
"1 is not equal to 0 and 1 is not greater than 2"
end
# => "1 is not equal to 0 and 1 is not greater than 2"
ifとunless
if文とunless文は、[後置][if-as-suffix]としても使えます。これは、条件が真の場合に1行のコードだけを実行したいときに便利です。
実行したいコードの後ろにifまたはunlessを置くことで実現します。
value = 1
"1 is equal to 1" if value == 1
# => 1 is equal to 1
"1 is not equal to 1" unless value == 1
# => nil