Rubyではnull(nil)を判定するために「nil?」「blank?」などの各種メソッドを利用することが可能です。

本記事では、サンプルコードを掲載しながらnull(nil)判定を行う各種メソッドについて解説していきます。

Rubyではnullではなくnil


Ruby以外のプログラミング言語経験者の中には、「null」と「nil」の違いについて混乱してしまう方もいらっしゃるかと思います。

Rubyでのプログラムにおいては「null」ではなく「nil」が利用されます。

nullとnilの違い

「null」と「nil」はどちらも「存在しない」ことを意味しており、語源の違いや品詞としての違いこそありますが、意味合い自体は変わりません。

Rubyのプログラムにおいては「nil」を利用すると覚えておきましょう。

ポテパンダの一言メモ

「null」と「nil」のどちらを利用するかはプログラミング言語により異なります。

NilClassについて

Rubyでnilが属しているクラスとして「NilClass」の存在が挙げられます。

nilはNilClass唯一のインスタンスです。

nil判定を行う際にこのNilClassで定義されたメソッドを使用する必要があります。

Rubyにおけるnull(nil)の判定方法


Rubyではnullではなく「nil」を使用すると確認出来たところで、次にnil判定の方法について解説していきます。

nil判定の方法には「nil?」「blank?」「present?」メソッドを利用することが可能です。

nil?

nil?では、対象オブジェクトがnilかどうかを確認することが可能で、nilの場合「true」それ以外は「false」が返却されます。

nilの場合

sample = nil

p sample.nil?

実行結果は下記です。

true

nil以外の場合

sample1 = ""
sample2 = 0
sample3 = []

p sample1.nil?
p sample2.nil?
p sample3.nil?

実行結果は下記です。

false
false
false

オブジェクトが存在しない場合

sample = nil

p sample1.nil?

実行結果は下記です。

undefined local variable or method `sample1' for main:Object (NameError)

nilかどうかのチェックをするオブジェクト自体が存在しない場合エラーとなるため注意が必要です。

blank?

「blank?」は「nil」に加えて「空白文字列」「空の配列」なども「true」が返却され、それ以外の実際に値が設定されている場合には「false」が返却されます。

nilまたは空白値の場合

require 'active_support'
require 'active_support/core_ext'

sample1 = nil
sample2 = ""
sample3 = " "
sample4 = []

p sample1.blank?
p sample2.blank?
p sample3.blank?
p sample4.blank?

実行結果が下記です。

true
true
true
true
ポテパンダの一言メモ

「blank?」はrailsのメソッドとなるため、「require ‘active_support’」の記述が必要です。

実際の値が設定されている場合

require 'active_support'
require 'active_support/core_ext'

sample1 = 0
sample2 = "サンプル"
sample3 = ["テスト"]

p sample1.blank?
p sample2.blank?
p sample3.blank?

実行結果が下記です。

false
false
false

「0」は空白値として該当しそうにも思えますが「blank?」メソッドでは実在する値として判定されます。

present?

「present?」は「blank?」とは反対で、「nil」や「空白文字列」「空の配列」の場合「false」、実際の値が設定されている場合「true」が返却されます。

nilや空白値の場合

require 'active_support'
require 'active_support/core_ext'

sample1 = nil
sample2 = ""
sample3 = " "
sample4 = []

p sample1.present?
p sample2.present?
p sample3.present?
p sample4.present?

実行結果は下記です。

false
false
false
false

実際の値が設定されている場合

require 'active_support'
require 'active_support/core_ext'

sample1 = 0
sample2 = "サンプル"
sample3 = ["テスト"]

p sample1.present?
p sample2.present?
p sample3.present?

実行結果は下記です。

true
true
true

「blank?」と「present?」で出力結果が正反対になっていることをご確認頂けます。

empty?について

nil判定に使えるかと誤解してしまいがちなメソッドとして「empty?」が挙げられます。

「empty?」では空白値を調べることは可能ですが、「nil」に関しては判定することが出来ません。

sample1 = ""
sample2 = " "
sample3 = []
sample4 = nil

p sample1.empty?
p sample2.empty?
p sample3.empty?
p sample4.empty?

実行した結果が下記です。

true
false
true
Traceback (most recent call last):
test.rb:9:in `': undefined method `empty?' for nil:NilClass (NoMethodError)

「empty?」メソッドは「NilClass」に定義されていないため「NoMethodError」が表示されます。

ポテパンダの一言メモ

「empty?」メソッドの場合「半角スペース」や「全角スペース」の場合、値が設定されていると判定され「false」が返却されることを確認しておきましょう。

Rubyでnilガード(nullガード)を試してみよう


Rubyではnil(null)状態を防ぐために、nilガードと呼ばれる書き方が存在します。

基本構文

変数 ||= 指定値

「||=」と記述することで、変数が「nil」の場合に指定値を代入することが可能です。

サンプル

実際にnilガードを使用したサンプルコードで動作確認をしてみます。

sample1 = nil
sample2 = ""

p sample1 ||= "指定値"
p sample2 ||= "テスト"

実行結果が下記です。

"指定値"
""

サンプルのように「nil」が設定されている場合、指定した値で上書きされ、「nil以外」の値が設定されている場合には上書きされることなく既存の変数値が適用されます。

さいごに: Rubyではnullの代わりにnilを利用する


本記事では、Rubyのプログラムで「null」の代わりに利用される「nil」に関する情報と使い方についてご紹介してきました。

他のプログラミング経験者であれば記述法こそ違いますが「null」と同様に扱うことが可能です。

各種判定メソッドにより「null(nil)」に対する結果が変わってきますので、きちんと処理内容を把握して使いこなせるように学習していきましょう。

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

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

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

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

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

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

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

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

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

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

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