【初心者向け】Rubyプログラミングでnullを判定する方法
プログラミングを進めていくと、扱う変数が多くなっていきます。
生成した変数を別のメソッドで扱いたい、という事も多くなって複雑になっていきます。
きちんと変数を生成しないと、変数にちゃんと期待した値が入っているかを確認しなければなりません。
そうした場合に、まずは「値が存在しているかどうか」を判定する必要があると思います。
一般的に、プログラミングにおいて値が存在しない事を”null”と呼びます。
Rubyでは、nullのことを”nil”と呼びます。
値が入っていると思って処理を書いたら、入ってなくてエラーが発生すること等、よくありますよね。笑
今回はRubyプログラミングで変数に値が存在するかどうかを判定する方法を紹介します。
もくじ
nil?関数
最初に”nil?関数”を紹介します。
これはRubyの組み込み関数で、変数の後に記載して使用します。
使い方は以下の通りです。
変数.nil?
変数の値がnilであればtrue、それ以外はfalseを返します。
特徴としては、nil以外は全てfalseを返す所です。
当たり前のことのように思えるかもしれませんが、値が存在しないことの表現方法は様々です。
例えば、””のような空文字や0等です。
今回はnilを含めた以下の6種類の変数で判定をしていきます。
- nil(null)
- 0(数字)
- false
- “”(空文字列)
- [](空配列)
- {}(空ハッシュ)
それでは、nil?関数で判定するコードを書いてみましょう。
nil.rb
val1 = nil
val2 = 0
val3 = false
val4 = ""
val5 = []
val6 = {}
puts val1.nil?
puts val2.nil?
puts val3.nil?
puts val4.nil?
puts val5.nil?
puts val6.nil?
実行してみましょう。
$ruby nil.rb
true
false
false
false
false
false
このようにnil?関数はnilだけにtrueを返します。
真にnilだけを判定する方法なので、空文字や0などの変数もきちんと判定することができます。
empty?関数
続いてempty?関数です。
これは配列やハッシュの中身が空かどうかを判定する関数です。
nilかどうかを判定する方法とは異なりますが、値が存在するかどうかを判定する点では用途は一緒です。
使い方は以下の通りです。
変数.empty?
今回は文字、配列、ハッシュの3種類でそれぞれデータ有無で判定をしていきます。
以下のコードを書いてみましょう。
empty.rb
val1 = ""
val2 = "abc"
val3 = []
val4 = ["abc"]
val5 = {}
val6 = {"key" => "value"}
puts val1.empty?
puts val2.empty?
puts val3.empty?
puts val4.empty?
puts val5.empty?
puts val6.empty?
実行してみましょう。
$ruby empty.rb
true
false
true
false
true
false
このようにempty?関数は配列とハッシュだけでなく、文字が空かどうかも判定してくれます。
因みにnilや0をempty?関数に適用するとエラーになります。
Traceback (most recent call last):
empty_tmp.rb:3:in `main': undefined method `empty?' for nil:NilClass (NoMethodError)
Traceback (most recent call last):
empty_tmp.rb:3:in `main': undefined method `empty?' for 0:Integer (NoMethodError)
blank?関数とpresent?関数
ここからはRuby on Railsの環境で使用できるblank?関数とpresent?関数を紹介していきます。
※Rubyのみの環境では使用できないので、ご注意下さい。
ここでは、メソッドの使い方と特徴のみ紹介します。
blank?関数とpresent?関数の使い方は以下の通りです。
変数.blank?
変数.present?
先程、nil?関数ではnil以外はfalseを返し、empty?関数では文字、配列、ハッシュが空かどうかを判定する、と紹介しました。
このblank?関数とpresent?関数は、nilはもちろん文字や数値、配列、ハッシュだけで無くboolean(true/false)も判定してくれます。
それでは、早速コードを書いていきましょう。
blank_present.rb
val1 = ""
val2 = "abc"
val3 = 0
val4 = 123
val5 = true
val6 = false
val7 = []
val8 = ["abc"]
val9 = {}
val10 = {"key" => "value"}
puts val1.blank?
puts val1.present?
print "¥n"
puts val2.blank?
puts val2.present?
print "¥n"
puts val3.blank?
puts val3.present?
print "¥n"
puts val4.blank?
puts val4.present?
print "¥n"
puts val5.blank?
puts val5.present?
print "¥n"
puts val6.blank?
puts val6.present?
print "¥n"
puts val7.blank?
puts val7.present?
print "¥n"
puts val8.blank?
puts val8.present?
print "¥n"
puts val9.blank?
puts val9.present?
print "¥n"
puts val10.blank?
puts val10.present?
実行してみましょう。
$ruby blank_present.rb
true
false
false
true
false
true
false
true
false
true
true
false
true
false
false
true
true
false
false
true
blank?関数は「値がないか?」を判定しているのに対し、present?関数は「値があるか?」を判定します。
ですので、この2つの関数は正反対の結果を出力します。
また、empty?関数のように特定のデータ型でエラーが出てしまうことが無いので、扱いやすい関数だと思います。
Ruby on Railsの環境構築については、以下の記事をご参考下さい。
【Mac版】
Ruby on Railsの環境構築をしてみよう!(macOS)
【Windows版】
Ruby on Railsの環境構築をしてみよう!(Windows)
まとめ
nil?関数:変数がnil以外であればfalseを返す
empty?関数:文字、配列、ハッシュが空であればtrueを返す
blank?関数とempty?関数:様々なデータ型の値の有無を判定可能(※Ruby on Rails環境でのみ実行可能)
このようにRubyの組み込み関数を使うと簡単に判定でき、コードもシンプルになります。
中にはRuby on Railsの環境でのみ実行可能な関数もありますので、環境に合わせて使い分けてみて下さいね。