「if」文は、ある条件の時だけ特定の処理を行ったり、条件によって処理を分けたりする時に使用する制御構文です。
プログラムを作る上で「if」文は絶体に避けては通れない構文であり、使い方によってコードの可読性が大きく損なわれたりもします。
この記事では、Rubyの「if」文の使い方を解説していきます。
Rubyでの if文(構文)
Rubyでのif文の構文を見てみましょう。
まずは、単一条件式のif構文です。
if 条件式 then
#条件式が一致した時に実行される処理
end
条件式に一致しなかった時に実行される処理が必要な場合は、elseを使って処理を振り分けます。
if 条件式 then
#条件式が一致した時に実行される処理
else
#条件式に一致しなかった時に実行される処理
end
条件1の時は「処理A」を、条件2の時は「処理B」のように、複数の条件式を使って処理を振り分ける場合は、elsif構文を使用します。
if 条件式1 then
#条件式1に一致する時に実行される処理
elsif 条件式2
#条件式2に一致する時に実行される処理
else
#どの条件にも致しなかった時に実行される処理
end
以降の内容では、Rubyのifを実際に使ったサンプルコードをいくつか紹介していきます。
数値の比較する条件式(if文)
if文で数値や文字列を比較ときは、次の表にある「比較演算子」を使用します。
比較演算子 | 説明 |
---|---|
x == y | 等しい |
x != y | 等しくない |
x < y | xがyより小さい |
x > y | xがyより大きい |
x <= y | xがy以下 |
x >= y | xがy以上 |
では、比較演算子の==, !=, <, >, <=, >=使って、数値を比較するif文のサンプルコードを見ていきましょう。
# valueが100と等しい
if value == 100 then
puts "valueは'100'です"
end
# valueが100以外
if value != 100 then
puts "valueは'100'ではありません"
end
# valueが100より小さい
if value < 100 then
puts "valueは'100'より小さい"
end
# valueが100より大きい
if value > 100 then
puts "valueは'100'より大きい"
end
# valueが100以下
if value <= 100 then
puts "valueは'100'以下"
end
# valueが100以上
if value >= 100 then
puts "valueは'100'以上"
end
数値の範囲をシンプルに比較する
例えば、数値が1〜10の範囲内にあるか比較をするとき、次のようなコードをよく書きます。
value = 3
if value >= 1 and value <= 10 then
puts "valueは1〜10の範囲内です"
end
間違った書き方ではありませんが、上のようなコードでは一見して範囲チェックを行なっているコードが分かりづらいです。
Rubyでは、範囲オブジェクトであるRangeを使用して、シンプルなコードで数値の範囲チェックを行えます。
次のサンプルコードは、数値が1〜10の範囲内であるかのチェックを、Rangeオブジェクトを使って判定する例です。
value = 3
if (1..10) === value then
puts "valueは1〜10の範囲内です"
end
【実行結果】
------------------
valueは1〜10の範囲内です
また、Range#cover?メソッド を使っても、同じような判定を行うことができます。
value = 3
if (1..10).cover?(value) then
puts "valueは1〜10の範囲内です"
end
文字列の比較する条件式
文字列の比較も、数値の同じように「比較演算子」を使用します。
また、指定した文字が文字列に含まれていることや、正規表現などを使って複雑な文字列の判定を行う条件式も作れます。
文字列の一致を判定
まずは、比較演算子の==を使用して、2つの文字列が一致するか判定するif文を作成してみましょう。
str = "Ruby"
if str == "Ruby" then
puts "Rubyと等しい"
else
puts "等しくありません"
end
【実行結果】
------------------
Rubyと等しい
上とは逆に、文字列の不一致を判定する場合は、!=を使用します。
if str != "Ruby" then
puts "Rubyと等しくありません"
else
puts "Rubyと等しい"
end
文字列の大小判定
文字列も数値と同じく、比較演算子の「」「=」を使って大小比較ができます。
比較は文字コードで行われ、英字であればアルファベット順、日本語のひらがなであれば五十音順に比較が行われます。
次のサンプルコードは、アルファベットの文字の大小比較を行う例です。
str = "A"
if str < "B" then
puts "strは'B'よりも小さい"
end
【実行結果】
------------------
strは'B'よりも小さい
次のサンプルコードでは、”ABC”と”B”の文字列を大小比較しています。
文字列の比較は先頭文字から行われるため、一方の文字数が多くても、先頭文字の大小関係で判定されます。
str = "ABC"
if str < "B" then
puts "strは'B'よりも小さい"
end
【実行結果】
------------------
strは'B'よりも小さい
アルファベットの大文字(A-Z)と小文字(a-z)では、大文字のほうが文字コードの割り当てが前にあるため、大文字・小文字を大小比較すると大文字のアルファベットの方が小さく判定されます。
if "A" < "a" then
puts "'A'の方が小さい"
end
【実行結果】
------------------
'A'の方が小さい
ひらがなも同様に、五十音順で文字列の大小比較が行われます。
str = "あ"
if str < "い" then
puts "strは'い'よりも小さい"
end
【実行結果】
------------------
strは'い'よりも小さい
ひらがなとカタカナは、ひらがなのほうが文字コードの割り当てが前にあるため、大文字・小文字を大小比較するとひらがなの方が小さく判定されます。
str = "あ"
if str < "ア" then
puts "strは'ア'よりも小さい"
end
【実行結果】
------------------
strは'ア'よりも小さい
漢字の比較は、その文字に割り当てられた文字コードでの大小比較となります。
読みの五十音順にならないことに注意が必要です。
str1 = "朝" #0x671D
str2 = "月" #0x6708
if str1 < str2 then
puts "str2が大きい"
else
puts "str1が大きい"
end
このように「朝(あさ)」と「月(つき)」では、読みの五十音順で見ると「朝」の方が前ですが、漢字に割り当てられた文字コードが「月」の方が小さいため、この2つの文字を大小比較すると「月」が小さいと判定されます。
【実行結果】
------------------
str1が大きい
Ruby 2.0以降において、コード上で扱う日本語などのマルチバイト文字は、UTF-8がデフォルトとして用いられています。
日本語の比較を行う時は「UTF-8」の文字コードで行われることを意識しておきましょう。
Rubyのif文をマスター
Rubyのif構文を使用して、数値や文字列を比較する方法を解説してきました。
条件分岐はプログラミングの基本ですので、しっかり学習しておきましょう。
Rubyのelsifは、Javaや他の言語ではelse ifと書くことが多いため、他の言語からRubyを学んでいる方は、構文の違いに注意しましょう。