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

Rubyで変数に値が格納されていない状態はnilですが、nilに対する処理を記述するためにRuby on Railsのtry!メソッドを使えるのをご存じでしょうか。try!メソッドを使えば変数がnilの場合に処理するメソッドをシンプルに記述できます。

さらにRubyには標準で使えるボッチ演算子「&.」があり、この機能はtry!メソッドとです。今回はRuby on Railsのtry!メソッドとボッチ演算子「&.」の機能とその使い方について紹介します。

try!メソッドはNull条件演算子

Ruby on Railsにはnilを判定する処理をシンプルに記述できるtry!メソッドを使えるのをご存じでしょうか。Rubyは短く読みやすいプログラム言語ですが、nilの扱いに注意が必要です。

そしてtry!メソッドを使うことで、そのような注意が必要なnilを含む変数を対象に、引数で指定したメソッドを安全に実行できます。

なおtry!メソッドはRubyだけの機能ではありません。try!メソッドと同じような機能が、他のプログラムでも使えます。そしてこのような機能は、Null条件演算子と呼ばれます。try!メソッドの機能や使い方を解説する前に、Null条件演算子について紹介します。

Rubyにとってnilは特別

変数に何も格納されていない状態は、Rubyではnil、他のプログラム言語ではnullで表現されます。

なおRubyでは、変数にオブジェクトが代入されると、その代入されたオブジェクトが所属するクラスの変数となり、同じクラスのメソッドが利用可能です。しかし、変数に何も無いのではクラスが決まりません。そして異なるクラスのメソッドを実行しようとするとエラーが発生します。

Rubyにはnil?メソッドがあり、オブジェクトがnilかどうかをチェックできます。しかし、もっと読みやすい書き方が可能です。それがNull条件演算子です。

Null条件演算子とは

Null条件演算子とは、変数がnullでない場合に演算子に続いて記述するメソッドの結果を返し、そうでない場合にnullを返す演算子です。そしてRuby on Railsのtry!メソッドは、Ruby on RailsにおけるNull条件演算子として実装されました。

Null条件演算子の基本

変数 Null条件演算子 メソッド

Null条件演算子の演算結果は次のとおりです。

null = null Null条件演算子 メソッド

メソッドの結果 = nullではない Null条件演算子 メソッド

try!メソッドとボッチ演算子の関係

先ほどtry!メソッドはRuby on Railsに実装されたNull条件演算子と紹介しましたが、実際に使えるようになったのは2009年にリリースされたRuby on Railsバージョン2.3.2からです。

Rubyにはtry!メソッドと同じ機能のボッチ演算子もあります。これはは、2015年にリリースされたRubyバージョン2.3から実装されました。このように先にRuby on Railsで使えるようになったtry!メソッドが便利なので、Rubyでも使えるようにしたのがボッチ演算子です。

try!メソッドとボッチ演算子「&.」の使い方

try!メソッドは先ほど紹介したように対象のオブジェクトがnilの場合、メソッドの実行を回避するための仕組みです。そしてボッチ演算子としてRuby on Railsでしか使えなかったtry!メソッドと同じ機能をRubyの標準の機能として取り入れました。

次からtry!メソッドと同じ機能のボッチ演算子「&.」と使い方を紹介します。

try!メソッドの使い方

try!メソッドは、オブジェクトがnilの場合にnilを返し、メソッドが定義されている場合はそのメソットを処理した結果を、またメソッドが定義されていない場合は例外が発生させます。

つまりオブジェクトがnilの場合、nilを対象に取れないメソッドを実行して発生するエラーを避けられます。ただし、オブジェクトがnilでなくてもエラーが発生する可能性がある場合は、それ例外を処理する仕組みも必要です。

try!メソッドの使い方

オブジェクト.try!(:メソッド)

tyr!()の引数でメソッドを指定する場合、「:」を付けてください。

try!メソッドの使用例

name = article.try!(:author)

この例は、もしオブジェクトarticleがnilでなければarticle.authorの結果をnameに代入し、articleがnilならnameにnilを代入します。

Rubyでは次のようにtry!メソッドを続けて記述することも可能です。

name = article.try(:author).try(:name)

ボッチ演算子「&.」の使い方

try!メソッドはRuby on Railsでしか使えませんが、ボッチ演算子「&.」は標準で利用できます。そしてその使い方は、try!メソッドと基本的に同じです。

ボッチ演算子「&.」の使い方

オブジェクト&.メソッド

ボッチ演算子「&.」の使用例

name = article&.author

この例は、先ほど紹介したtry!めっそっどの例と同じで、もしオブジェクトarticleがnilでなければarticle.authorの結果をnameに代入し、articleがnilならnameにnilを代入します。

またボッチ演算子を続けて記述することも可能です。

name = article&.author&.name

tryメソッドボッチ演算子は取り扱い注意

Ruby on Railsにはtry!メソッドと同じような機能で「!」が付かないtryメソッドもあります。tryメソッドの機能は、オブジェクトがnilの時やメソッドが定義されていない場合はnilを返し、メソッドが定義されている場合はそのメソットを呼び出します。

tryメソッドの使い方

オブジェクト.try(メソッド)

tyr()の引数でメソッドを指定する場合、「:」を付けてください。

tryメソッドの使用例

name = article.try(:author)

ただしtry演算子はメソッドを間違えていてもエラーにならずにnilを返すので、プログラムミスを見逃すこともあります。使う際には注意が必要です。

どちらを使うべき?

これまで何度か紹介しているようにRuby on Railsのtry!メソッドとボッチ演算子「&.」は同じ機能です。ではどちらを使えばいいでしょうか。

特にプログラム記述ルール等で指定がなければ、処理速度が速く、よりシンプルに記述できうるボッチ演算子「&.」の利用をおすすめします。

try!メソッドとボッチ演算子「&.」の使用例

今回紹介しているtyr!メソッドとボッチ演算子「&.」は、オブジェクトがnilかどうかをチェックするnil?を使ったプログラムをシンプルに書き換えることが可能です。

次からRuby on Railsのtry!メソッドの使用例を紹介します。

nil?メソッドの処理を置き換える

try!メソッドを使えば、nil?メソッドを使った処理を1行だけでのシンプルなプログラムに置き換えることが可能です。

例えば、オブジェクトtargetをnil?メソッドでチェックし、もしnilでない場合にto_iメソッドで数字に変換するif構文を使ったプログラムがあったとします。

nil?を使ったプログラムの例

if target.nil? then
  out = nil
else
  out = target.to_i
end

このプログラムをRuby on Railsのtyr!メソッドで書き換えると、次のようにシンプルに記述できます。

try!メソッドを使ったプログラムの例

out = target.try!(:to_i)

ボッチ演算子「&.」で置き換える

先ほどの例はtry!メソッドと同じ機能のボッチ演算子「&.」でも置き換えられます。同じように1行のシンプルなプログラムに書き換えられ、さらにRuby on Railsでなくても使えるので、ぜひ活用してください。

nil?を使ったプログラムの例

if target.nil? then
  out = nil
else
  out = target.to_i
end

ボッチ演算子「&.」を使ったプログラムの例

out = target&.to_i

まとめ

これまで紹介したようにRuby on Railsのtry!メソッドを利用することで、オブジェクトがnilの場合の処理をシンプルに記述できます。また、Rubyのバージョン2.3以降にはtry!メソッドと同じ機能のボッチ演算子「&.」が実装されています。

ボッチ演算子「&.」はRuby on Rails以外のRubyのプログラムでも使えて処理も高速なので、特に指定が無い場合はRuby on Railsでもボッチ演算子「&.」を利用してください。

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

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

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

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

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

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

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

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

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

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

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