Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Rubyで変数が空かどうかを調べる際、Ruby on Railsのpresent?メソッドとblank?メソッドを利用できるのをご存じでしょうか。

Rubyでは、変数に値が入ってからStringクラスやNumberクラスに変わるので、値が入る前にチェックしようとするとエラーになります。その点、Ruby on Railsのpresent?メソッドとblank?メソッドなら、値が入る前でもチェックが可能です。

今回は、Rubyの変数の特徴と空かどうかを調べるpresent?メソッドおよびblank?メソッドの使い方について解説します。

RubyでNULLを判定するには

Rubyでは変数に値が格納されていない場合、処理によって誤動作する場合があります。そのため、事前に変数の値が格納されているかをチェックする、いわゆるNULL判定を実施し、処理を分岐させなければなりません。

しかし、RubyではNULL判定が簡単ではありません。次からRubyのNULL判定方法について紹介します。

変数が空という状態とは

Rubyのプログラムで扱う変数やメソッドは全て何らかのクラスに属しています。ただし変数は、格納されたデータによってどのクラスに所属する決まるのがRubyの仕様です。

具体的には変数に文字列を格納するとStringクラスになり、数字を格納するとNumberクラスになる、といった具合です。

では変数が空というのは、どのような状態でしょうか。値を何も格納していない変数は、どのクラスにも所属しておらず、スーパークラスに属しています。そのためStinrgクラスのメソッドではチェックできません。

一方、変数に”を代入するとStringクラスになり、Stinrgクラスのメソッドで空かどうかをチェックできます。このようにRubyでは変数の状態によってチェックするメソッドを変えなければなりません。

Rubyのnil?でチェック

変数を作ったばかりの変数は、スーパークラスという特別のクラスに属しています。これをチェックするには、スーパークラスのメソッドを使用します。

スーパークラスの変数をチェックするメソッドはnil?メソッドです。nil?は変数がnilかどうか、つまり空かどうかをチェックします。

一方、文字列の”を代入するとStringクラスに変わりますが、Stirngクラスの変数が空かどうかをチェックするメソッドがrmpty?です。

今回紹介するRuby on Railsのpresent?メソッドは、nil?メソッドとrmpty?メソッドの2つのチェックを一度にできる便利なメソッドです。

Ruby on Railsのpresent?メソッド

今回紹介するpresentメソッドはRub on Railsに含まれるactive_supportライブラリに含まれるメソッドです。そのため、active_supportライブラリが使えれば、Ruby on RailsでなくてもRubyのプログラムから利用できます。

次からpresentメソッドの利用方法について紹介します。

Ruby on Railsをダウンロードする

presentメソッドは、Rub on Railsに含まれるactive_supportライブラリに含まれています。もし、Ruby on Railsをダウンロードしていない場合は、gemコマンドを利用してダウンロードしてください、また、Ruby on Railsを利用してプログラムを作成する場合は、そのまま使用できます。

Ruby on Railsをダウンロードするコマンド

gem install rails

active_supportライブラリを読み込む

Ruby on Railsは多くのライブラリで構成されていますが、presentメソッドが定義されているactive_supportライブラリもその1つです。そしてactive_supportライブラリは単体でも利用できるので、もし使用する場合はrequireメソッドで読み込んだください。

active_supportライブラリ読み込み方法

require 'active_support/all'

present?メソッドの使い方

present?メソッドは、変数が次の状態の場合にfalseを、そうでない場合にtrueを返します。

present?メソッドの例

require 'active_support/all'
val = ""
if val.present?
  p "変数valに値が格納されています"
else
  p "変数valに値が格納されていません"
end

上記の例は、valが「空白のみで構成された文字列」なので、「”変数valに値が格納されていません”」が表示されます。

Ruby on Railsのblank?メソッド

先ほど紹介したpresent?メソッドは、変数にデータが入っている場合にtrueを返すメソッドでしたが、その逆をチェックするのがblank?メソッドです。

次からblank?メソッドの使い方を紹介します。

blank?もRailsのメソッド

先ほど紹介したpresent?メソッドと同じように、blank?メソッドもRuby on Railsに含まれるactive_supportライブラリを読み込むことで使えます。

Ruby on Rails以外のRubyのプログラムでblnak?メソッドを使う場合も、最初にactive_supportライブラリを読み込んでください。

blank?メソッドの使い方

blank?メソッドは、present?メソッドの逆の機能のため、変数が次の状態の場合にtrueを、そうでない場合にfalseを返します。

blank?メソッドの例

require 'active_support/all'
val = ""
if val.blank?
  p "変数valに値が格納されています"
else
  p "変数valに値が格納されていません"
end

上記の例は、valが「空白のみで構成された文字列」なので、present?メソッドとは逆の「”変数valに値が格納されています”」が表示されます。

present?メソッドの応用例

先ほど、present?の使用例としてif構文の例を紹介しましたが、tureとfalseを使った別の使い方も可能です。次にpresent?メソッドを使った応用例を紹介します。

if修飾子で使う

Rubyでは処理の後ろにif修飾子を記述することで、条件式がtureのケースでのみ、その処理を実行できます。if構文でelseが不要な場合に限定されますが、Rubyらしい1行で簡潔に書ける方法です

このif修飾子の条件式にpresent?メソッドを使用できます。

if修飾子の書き方

処理 if 条件式

if修飾子でpresent?メソッドを使った例

require 'active_support/all'
val = 'state'
val = '' if arr.present?
p arr # valは空なので「""」が表示されます

これはif修飾子を用い、valに文字列が格納されていたらvalの値を空にする例です。

上記の例をif文で書き直すと下記のようになります。

require 'active_support/all'
val = 'state'
if val.present? then
  val = ''
end
p arr # valは空なので「""」が表示されます

三項演算子で使う

三項演算子とは、下記のようにif文を使わずに条件式に応じて演算式を切り替えられる処理を1行で書ける便利な機能です。そして三項演算子の条件式にpresent?メソッドを使用できます。

三項演算子の書き方

条件式 ? trueの場合の演算式 : falseの場合の演算式

三項演算子にpresent?メソッドを使った例

require 'active_support/all'
val = ''
message = val.present? ? "変数に値が可能されてます" : "変数は空です"
p val

この例では、変数valが空なので、val.present?はfalseとなるので、「’変数は空です’」が表示される。

上の例は下記のように書くことが可能です。

require 'active_support/all'
val = ''
if val.present? then
  message =  "変数に値が可能されてます"
else
  message = "変数は空です"
end
p message

まとめ

これまで解説したようにRubyで変数が空かどうかをチェックするには、Ruby on Railsのpresent?メソッド、またはblank?メソッドを使うと便利です。そしてactive_supportライブラリを利用することで、Ruby on Rails以外のRubyのプログラムでも利用できます。

また、tureとfalseを返すpresent?メソッドは、if構文はもちろん、if修飾子や三項演算子でも使えるので、ぜひ利用してください。

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

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

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

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

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

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

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

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

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

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

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