【Rails入門】unless文の条件分岐を初心者向けに解説

こんにちは!システムエンジニアのオオイシです。

unless文をご存知ですか?

if文と似たような条件文にunless文はRailsでも使えます。

「unlessはどのような時に使うの?」

「if文との違いは?」

「Railsでunlessはどのような時に使う?」

と、お悩みのあなたに、今回は以下の内容について解説していきます!


【基礎】unless文とは
【基礎】unlessはどのようなときに使うの?
【基礎】unless文の使い方
【応用】unlessを複数繋げる
【応用】unlessを1行で書く

unlessについて初心者でもわかりやすいように解説していますので、しっかりと理解しておきましょう!

目次

unless文とは

unless文はif文の反対で、

  • if文          → もしも、評価が真(true)であれば○○する
  • unless文 → もしも、評価が偽(false)であれば○○する

の意味になります。

構文は次の通りです。

unless構文:

unless 条件式
  条件式の結果が 偽(false) の場合に処理を実行
else
  条件式の結果が 真(true)  の場合に処理を実行
end

ちなみに、Rubyで真(true)と偽(false)の判定条件は、

  • 偽(false) = nil、または false
  • 真(true)  = 上記以外

です。

Ruby または Rails経験者でも以外と知らないので、知っておきましょう。

なお、if文の使い方については、こちらで詳しく解説しているので、ぜひ参考にしてみてください。

unlessはどのようなときに使うの?

unless文はif文でも表現できますが、unless文で書くと可読性が高くなる場合があります。

# モデルが存在することを否定
if モデル.!present?  

# モデルが存在しない
unless モデル.present?

では、後者の方が直感的です。

なぜならば、人間の頭は否定で考えるのが苦手だからです。

そのため、unless文はわかりやすたのために使います。

それでは、Railsを使ったunlessを使ったサンプルを紹介していきましょう!

unless文の使い方

サンプルモデルの作成

まずはじめに、unlessを確認するためのSampleモデルを作成します。

$ bin/rails g model sample
$ bin/rake db:migrate

unless 基本

Sample.newした結果をもつ変数をunlessで評価してみましょう。

モデルがデータベースに保存済みの場合は真(true)を返す

  • モデル.persisted?

メソッドを使って、DBにモデルデータを保存していないことを確認するサンプルコードを見てみましょう。

sample = Sample.new

unless sample.persisted? # -> false
  puts "DBに保存していない"
else
  puts "DBに保存した"
end

実行結果:

DBに保存していない

このように、条件式がfalseの場合に評価されることがわかりました。

unless nil

unlessの条件式の結果がnilの場合についても見てみましょう。

sample = Sample.new

unless sample.id # -> nil
    puts "sample.idはnil"
else
    puts "sample.idは存在する"
end

実行結果:

sample.idは存在する

このように、unlessはnilの場合でも評価されることが確認できました。

unless true

unlessの条件式が真(true)になるケースもみてみましょう。

Sampleモデルを保存してデータが存在する場合にelse側が処理されることを確認してみます。

sample = Sample.new
sample.save
unless Sample.all.present? # -> DBデータあり
puts "Sampleモデルはデータなし"
else
    puts "Sampleモデルはデータあり"
end

実行結果:


Sampleモデルはデータあり

このように、オブジェクトが存在する場合には、unlessは評価しないことが確認できました。

unlessを複数繋げる

unless文はif文と同様に&&(AND)や||(OR)を使って、複数の条件が指定できます。

サンプルコードで確認してみましょう。

unless nil && false
  puts false
end

実行結果:

false

このように、unlessを複数繋げてコーディングできました。

unlessを1行で書く

unless文はif文と同様に、1行で条件分岐できる後置unlessが使えます。

モデルデータをDBに保存していない場合にsaveメソッドを実行するサンプルコードを確認してみましょう。

保存したらtrueが返却されます。

sample.save unless sample.persisted?
=> true

このように、unlessを1行で書くことができました。

まとめ

いかかでしたか?

今回は、unlessについて紹介しました。

unless文は「もしも、評価が 偽(false)であれば○○する」の意味になります。

unlessを使うとわかりやすくコーディングできるので、ぜひ試してみてください!

そして、unlessの使い方を忘れてしまったらこの記事を確認してくださいね!

この記事を書いた人

システムエンジニア歴15年のオオイシです!好物は Java と Ruby。プログラミング、システムアーキテクトからマネジメントに到るまでなんでも食べます。
システム開発の相談やお困りごとがあればお気軽に
makoto.oishi.0705@gmail.com まで連絡頂けると幸いです

目次