バナー画像

Rubyでのプログラム開発では「nil」という他のプログラミング言語よっては見かけないワードを頻繁に目にすることになります。

本記事では、「nil」についての基本的な情報から判定方法と使い方についてご紹介していきます。

nilとは


「nil」は存在しない状態を表す意味合いとして利用されます。

プログラミングにおいては「0」や「””」も何もない状態が存在すると捉えられますが、「nil」は文字通り存在しない状態を表します。

nilとnullの違い

「nil」と同様に存在しない状態を表す「null」が存在しますが、Rubyでは「nil」が使用されているだけで違いはありません。

「nil」と「null」では品詞が異なることや語源が異なるなどの違いがあるようですが、意味合い自体は変わりません。

NilClass

「nil」は「NilClass」のオブジェクトです。

後述しますが、nil判定に利用出来るのはNilClassが持つメソッドのみで、例えば「empty?」などでnil判定を実施しようとするとエラーとなってしまうため注意が必要です。

nilの判定方法


nilの判定には「nil?」「blank?」「present?」が利用可能です。

「empty?」を利用した場合も含めて動作を確認してみましょう。

nil?

「nil?」はRubyでnil判定を実施する際に利用可能なメソッドです。

判定対象がnilの場合は「true」nil以外の場合には「false」が返却されます。

nilの場合

sample = nil
p sample.nil?

実行結果は下記です。

true

nil以外の場合

sample = ""
p sample.nil?

実行結果は下記です。

false

blank?

「blank?」では、「nil」の場合に加えて「空の配列」や「空白文字」の場合にも「true」を返却し、それ以外の場合「false」を返却します。

ポテパンダの一言メモ

「blank?」は「Ruby on Rails」で利用可能なメソッドですので、「active_support」を「require」で呼び出しておく必要があります。

nilや空白値の場合

require 'active_support'
require 'active_support/core_ext'

sample1 = nil
sample2 = ""
sample3 = []

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

実行結果が下記です。

true
true
true

値が設定されている場合

require 'active_support'
require 'active_support/core_ext'

sample1 = "テスト"
sample2 = [0]

p sample1.blank?
p sample2.blank?

実行結果が下記です。

false
false

present?

「present?」は同じく「Ruby on Rails」のメソッドで、「blank?」とは反対に「nil」や「空の配列」「空白文字」の場合に「false」を返却します。

nilや空白値の場合

require 'active_support'
require 'active_support/core_ext'

sample1 = nil
sample2 = ""
sample3 = []

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

実行結果が下記です。

false
false
false

値が設定されている場合

require 'active_support'
require 'active_support/core_ext'

sample1 = "あいうえお"
sample2 = [1]

p sample1.present?
p sample2.present?

実行結果が下記です。

true
true

empty?

では「empty?」メソッドはというと、「空の配列」や「空白値」の場合には「true」を返却しますが、「nil」の場合にはエラーが発生してしまいます。

require 'active_support'
require 'active_support/core_ext'

sample1 = ""
sample2 = []
sample3 = nil

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

実行結果が下記です。

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

「nil」をチェックしようとした際、「for nil:NilClass」によるエラーが発生していることをご確認頂けます。

このエラーはNilClassに「empty?」が定義されていないことによるエラーで「nil」に対しては利用出来ないことを意味しています。

Rubyのnilガードを使ってみよう


Rubyには「nilガード」と呼ばれる手法が存在し、変数が「nil」や値の入っていない場合に指定した値を代入することが出来ます。

基本構文

nilガードの記述方法は下記のような形です。

変数 ||= 指定値

「||=」の記述により、左辺に設定された変数が「nil」または「false」となる値の場合には右辺に指定した「指定値」を代入するというものです。

変数に何らかの値が設定されている場合には「指定値」の値が代入されることはありません。

サンプル

例えば変数に「nil」が設定された状態で「empty?」を使用するとエラーとなっていましたが、nilガードを実行しておくことで指定値を代入することができ、エラーを回避することが可能です。

sample1 = nil

sample1 ||= ""

p sample1

実行結果が下記です。

""

もちろん下記サンプルのように、変数に既に値が設定されている場合にはnulガードで値が上書きされることはありません。

sample1 = "テスト"

sample1 ||= ""

p sample1

実行結果が下記です。

"テスト"

配列からnilを取り除くcompactメソッド


「nil」に関連する処理の中で合わせて覚えておきたいのが、配列の中に含まれたnilを削除出来る「compact」メソッドです。

基本構文

compactメソッドの使い方は簡単で、配列に対して「compact」メソッドを実行するだけです。

配列.compact

サンプル

実際に簡単なサンプルコードで「compact」メソッドの処理内容を確認してみましょう。

animals = ["さる", nil, "とり", nil, nil, "いぬ", nil]
p animals.compact

実行結果が下記です。

["さる", "とり", "いぬ"]

「nil」の値が削除され、存在する値のみで構成された配列が返却されていることをご確認頂けます。

さいごに: Rubyでのシステム開発においてnilの理解は必須


本記事では、Rubyのシステム開発における必須知識「nil」の基本的な情報から判定方法までサンプルコードを掲載しながらご紹介してきました。

プログラミング初心者の方には特に分かりにくい「nil」や「null」の概念ですが、システム開発を行う上では必須知識の1つです。

今回ご紹介した基本情報をしっかりと抑えた上で「nil」をうまく扱えるよう学習していきましょう。

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

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

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

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

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

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

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

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

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

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

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