バナー画像

Rubyではif構文とは逆の条件で分岐するunless構文が使えます。なお英語のifはどのような条件でも使えますが、unlessはネガティブな条件で使われる単語です。そしてunlessはRubyのプログラムでも同じようにネガティブな条件で使われます。

処理によってif構文の代わりにunless構文を使うことで読みやすいプログラムを記述することが可能です。今回はunless構文の使い方がよくわからないという方に、Rubyにおけるunless構文の使い方について解説します。

ifとunlessの違いは

Rubyに限らずプログラムでは条件分岐としてよくif構文が使われます。もちろんRubyでもif構文が使えるので、条件分岐といえばif構文を思っている方もおられるでしょう。

しかし多くのプログラム言語でunless構文もサポートしています。ではなぜif構文の他にunless構文も用意されているのでしょうか。まずはif構文とunless構文の違いについて紹介します。

ifとunlessの違いのポイント

プログラミング言語で使われるifとunlessは両方とも英語が語源です。ifとunlessにはどんな違いがあるのでしょうか。

まずifは「もし~ならば」という意味です。これはRubyなどのプログラミング言語でも同じです。さらにifは、if~notという表現でも使われます。この場合は「もし~でないならば」という意味です。つまり英語のifと同じくプログラム言語でも、ポジティブな条件とネガティブな条件の両方を表せます。

一方unlessは、「もし~でないならば」という意味で、英語ではネガティブな条件で使われます。そのためプログラム言語でもunlessはネガティブな条件で使われる点に注目してください。

プログラミングのifはtrueもfalseもOK

先ほど紹介したように英語のifはポジティブな条件とネガティブな条件の両方を表せるように、プログラムで使われるif構文も両方で使われます。

具体的には「if 条件 then」と「if not 条件 then」の両方が使えます。

「if 条件 then」構文の例

if a == b then
  puts "a == b"
end

「if not 条件 then」構文の例

if not a == b then
  puts "not a == b"
end

なおif構文では、「条件」または「not 条件」がtrueの場合分岐する点に注意してください。

unlessはネガティブな条件で使う

一方、英語のネガティブな条件で使われるunlessは、プログラムでもネガティブな条件で使われます。具体的には先ほどのif構文の条件がtrueなのに対し、unless構文は条件がfalseの場合、条件に合致しない場合に分岐します。

普段から英語を使っている方ならif構文とunless構文を英語で書くように使い分けますが、そうでない方はunlessを使わずにプログラムを書いているかもしれません。

ネガティブな条件では「if not 条件 then」の代わりに「unless 条件 then」を使ってみてください。

unless構文の基本

unless構文はRubyの制御構造の1つで、if構文とは逆の条件で使えます。ただし、同じ処理をif構文でも記述できるので、英語を普段から使わない方はunlessを使ったことがない、という方もいるかもしれません。

次からunlessの使い方の基本について紹介します。

unless構文の文法

unless構文はif構文と反対で、条件式がfalseの場合にthen以下の式を評価します。またif構文と同じようにelseも利用できますが、その場合はif構文とは逆にtrueのケースです。

unless構文

unless 条件式 then
条件式がfalseの場合に評価する式
end

unless 条件式 then
条件式がfalseの場合に評価する式
else
条件式がtrueの場合に評価する式
end

なおif構文のようなelsifはunlessにはありません。複数の条件を使う場合はif構文を利用してください。

Rubyでfalseになる条件とは

unless構文でthenに続く式を処理できるのは、条件式がfalseとnilのケースだけです。なおRubyにおけるfalseとは、falseとnilの2つだけです。

Ruby以外のプログラミング言語の中には、false以外に0や空白文字をfalseと判定する言語もあります。しかしRubyではfalseと判定しません。unlessを利用する場合、条件式の結果がfalseまたはtrueになるように記述してください。

ポテパンダの一言メモ

Rubyで偽として扱われるのは、falseとnilの2つだけで、その他全てのオブジェクトが真として扱われます。

偽: falseとnilの2つのみ
真: falseとnil以外の全てのオブジェクト

unless構文の使用例

先ほど紹介したように英語のunlessはネガティブな条件を表現する構文です。Rubyのプログラムでも、ネガティブな条件を表現で使用することで読みやすくなります。

次にunless構文の使用例を紹介します。

Ruby on Railsのpresent?に組み合わせる

Rubyに限らず、変数に値が格納されているかをチェックし、もし値が格納されていれば続く処理を実施する、という構文がよく使われます。そしてRuby on Railsには変数をチェックするメソッドとして、blank?メソッドとpresent?メソッドが用意されています。

もし、変数に値が格納されていないケースを処理するプログラムを、if構文とunless構文とで比べてみましょう。

if構文による変数チェック処理の例

if value.blank? then
  value = initialize_one()
end

unless構文による変数チェック処理の例

unless value.present? then
  value = initialize_one()
end

この2つの書き方は、どちらが読みやすいかで使い分けることになりますが、変数が未定義なケースをチェックするならpresent?メソッドにunlessを組み合わせた方がよく使われます。

unless修飾子を使う

Rubyでは簡単なif文をif修飾子を用いて1行で簡潔に記述できます。if修飾子は条件がtrueのケースに実行しますが、条件がfalseのケースで実行できるのがunless修飾子です。

次からunless修飾子について紹介します。

unless修飾子の文法

unless修飾子は、unlessの左側に実行する式を、またunnlessの右側に条件式を書くことで、条件式がfalseの場合にのみ指定した式を実行します。また条件式がtrueの場合に返す値はnilです。

unless修飾子の文法

条件がfalseの場合に実行する式 unless 条件式

unless修飾子の例

chk = false
print "stop\n" unless chk

この例では、unless修飾子の条件としてchkを評価し、それがfalseなのでprint “stop\n”を実行します。

unless修飾子利用時の注意点

unless修飾子を使って条件式がfalseの場合、実行した式の結果を変数に代入する使い方が可能です。しかし条件式がtrueの場合、unless修飾子がnilを返すので、変数にnilが代入されてしまいます。もしその変数を後の処理で利用する場合、誤動作の原因になるので注意してください。

nilが代入されるunless修飾子の例

chk = true
out = "False" unless chk

このままでは変数outにnilが代入され、次の処理に使われてしまいます。次のように直接代入するのではなく、メソッド経由で代入するなどして使ってください。

def unless_out( chk )
  return("False") unless chk
  return("True")
end
out = unless_out( true )
p out  # "True"が表示される

まとめ

これまで紹介したようにRubyではif構文の他にunless構文が使えます。なお英語のunlessはネガティブな表現に使われる構文のため、Rubyのunlessもネガティブな条件分岐に使われます。

英語が苦手な方はifとunlessは判定条件が逆なだけで同じ条件分岐の構文と思われるかもしれません。しかし、処理内容によってif構文とunless構文を使い分けると、読みやすいプログラムを書くことが可能です。ぜひunless構文を使いこなしてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。