Ruby on Railsには、本来のRubyには無い便利なメソッドが幾つも使えますが、その1つがblank?です。blank?を使えば、これだけでnilと空文字のチェックを一度にできます。
もし、あなたがプログラミング言語Javaを学んだ方なら、isBlank?メソッドをご存じでしょう。blank?は、このisBlank?と同じです。しかし、本来のRubyでは、そのようなメソッドはありません。しかし、Ruby on Railsで使える便利な機能の1つです。今回は、Ruby on Railsで使えるblank?について解説します。
- Rubyのnilは特殊で、JavaのisBlank?に相当のメソッドは無いが、Ruby on Railsなら使える
- blank?はnilと空文字の両方を評価できる
- blank?の使い方はオブジェクトに.で続けるだけ
- blank?の逆のpresent?も使える
RubyにはJavaのisBlank相当のメソッドがない
Rubyは、他のプログラミング言語に比べると記述量が少なく、学習しやすいのが特徴です。また、比較的新しいプログラム言語のため、C言語やJavaの影響を受けています。しかし、C言語やJavaを学んだ方が使い慣れた関数やメソッドがそのまま使える訳ではありません。
例えば、Rubyには、JavaのisNullメソッドに相当するnil?メソッドはあるものの、isBlankに相当するメソッドがありません。しかし、Ruby on Railsなら、isBlankに相当するblank?が使えます。
Ruby on RailsはRubyの拡張機能
Ruby on Railsは、Webシステムを構築するためのフレームワークであり、データベースを手軽に利用したり、Rubyの機能を拡張する便利なメソッドが豊富に用意されています。
Rubyは、他のプログラムよりも少ない記述でプログラムが書けるのが特徴ですが、Ruby on Railsは、そのようなRubyの特徴を受け継ぎ、より開発効率を高めたフレームワークです。さらに、Rubyを基にし、より使いやすくしたプログラミング言語とも言えるでしょう。
今回紹介するblank?は、このようなRuby on Railsの拡張機能の1つです。
Ruby on RailsのActive Support
先ほど、Ruby on Railsには、Rubyの機能を拡張する便利なメソッドが豊富に用意されていると紹介しましたが、それらの機能は、Ruby on Railsの仕組みの中のみ利用できる機能ではありません。具体的には、Ruby on Railsのコンポーネントである、Active Supportパッケージを組み込むことで、Rubyのプログラムからも利用できます。
そのため、もし、今回紹介するblank?を使いたい場合は、Rubyをインストールした後、Active Supportパッケージを追加することで、Ruby on Railsを使わないケースでも利用できます。
なお、その場合は、プログラムの先頭に、Active Supportのコンポーネントを使用する宣言を追加してください。
Ruby on RailsのActive Supportを宣言する例 require 'active_support/all'
blank?の基本
次から、Ruby on RailsのActive Supportパッケージに含まれるblank?の文法や使用例について解説します。
blank?を使えるようにするには
先ほど紹介したように、blank?は、Ruby on RailsのActive Supportパッケージに含まれるメソッドです。そのため、Rubyが使える環境で、blank?を使用する場合は、まず、Active Supportパッケージをインストールしなければなりません。
通常、Active Supportパッケージは、gemコマンドを使ってインストールします。
$ gem install activesupport
また、Rubyのプログラムからblank?を利用する場合は、Active Supportパッケージを使用することを宣言してください。
require 'active_support/all'
blank?の文法
blank?は、評価対象がnilの場合、または、空文字の場合にtrueを、そうでない場合にfalseを返します。
blank?の文法
評価対象.blank?
blank?は、評価結果に応じてtrueまたはfalseを返します。
bkank?の使用例 target1 = nil if target1.blank? then puts("blank") end target2 = "" if target2.blank? then puts("blank") end
この例では、target1もtarget2もblnak?メソッドでtrueになるので、実行すると「bkank」を2回表示します。
Rubyを学びたい方におすすめのスクールはこちら
blank?の使用例
先ほど解説したように、Ruby on Railsで拡張されたblank?ですが、Active Supportパッケージをインストールすることで、通常のRubyのプログラムからも利用可能です。次から、blank?を使ったRubyのプログラム例を紹介します。
nilと空文字をblank?でいっしょにチェックする例
あるWebシステムで、対象のデータセットがまだ未登録、対象のデータセットの枠のみ作成済、対象のデータが登録済の3つの状態があったとします。
この場合、対象のデータを表示する処理を作成する場合、それぞれの状態を返す関数を作っておけば、blank?で簡単に作ることが可能です。
dataset = get_dataset( key ) if( dataset.blank? ) then require_dataset() else view_dataset( dataset ) end
この例では、get_datasetメソッドで対象のデータセットを取得し、もし、未登録(dataetがnilの場合)または枠のみ作成済の場合(datasetが空文字の場合)は、require_datasetメソッドを、対象のデータが登録済の場合はview_datasetメソッドを実行します。
Rubyを学びたい方におすすめのスクールはこちら
nil?やempty?とblank?の違い
先ほどblank?は、評価対象がnilの場合、または、空文字の場合にtrueを返すと紹介しましが、Rubyには同じようなメソッドが他にもあります。blank?と、それらのメソッドとの違いについて解説します。
blank?と似ているメソッド
Rubyで使えるblank?に似たメソッドを次にまとめました。
nil? 評価対象がnilであればtrueを返す。Rubyの組込メソッド。
empty? 評価対象が空文字であればtrueを返す。Rubyの組込メソッド。
blank? 評価対象がnilまたは空文字の場合にtrueを返す。Ruby on Railsで導入されたメソッド。
present? 評価対象がnilでも空文字でもない場合にtrueを返す。Ruby on Railsで導入されたメソッド。
このように、blank?は、Rubyの組込メソッドであるnul?メソッドとempty?メソッドの両方を評価できるメソッドです。
Rubyではnilと空文字が違う
Rubyは、扱う対象が全てオブジェクトであり、基になったオブジェクトによって使えるメソッドが違います。そして、blank?を使ううえで注意が必要な点は、nilのオブジェクトと、空文字のオブジェクトが違うことです。
具体的には、nilはオブジェクトに関係なく使える機能であり、nilかどうかをチェックするnil?メソッドは、オブジェクトに依存しないスーパークラスとして定義されています。それに対して空文字はStringクラスであり、空文字かどうかをチェックするメソッドのemty?は、Stringクラスに含まれるオブジェクトです。
そのため、空文字はStringクラスで定義済のため既にnilでないのでチェックできません。また、nilの状態は、まだStringクラスに定義されていないためempty?メソッドは使えません。このように、nilと空文字の両方を評価できるblank?は、Rubyにおける面倒な処理を簡単にしてくれる便利なメソッドと言えます。
blank?の逆のpresent?
blank?と同様にRuby on Railsで導入されたpresent?メソッドは、ちょうどblank?の逆の機能を持つメソッドです。プログラムによっては、blank?メソッドを使うよりも、読み易くなるケースもあるので、うまく使い分けるといいでしょう。
Rubyを学びたい方におすすめのスクールはこちら
まとめ
これまで解説したように、Ruby on RailsにはJavaのisBlankと同じように、評価対象がnilまたは空文字の場合にtrueを返すメソッドです。そして、Active Supportパッケージをインストールしておけば、通常のRubyのプログラムからでも利用可能です。
Rubyに用意されているnil?メソッドとempty?メソッドを組み合わせれば、同じ機能を実現できますが、blank?メソッドを使った方が短く読み易いプログラムを作成できます。Active Supportパッケージには、blank?メソッドと逆の機能であるpresent?もあるので、ぜひ、活用してください。
また、Rubyについてもっと詳しく学びたい方は、ポテパンキャンプの利用を検討されてはいかがでしょうか。
Rubyを学びたい方におすすめのスクールはこちら