スライドショー

【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

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

オオイシ

オオイシ

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

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説