【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の使い方を忘れてしまったらこの記事を確認してくださいね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

オオイシ

オオイシ

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