どうも!侍インストラクターのヨシダジュンです。
Ruby on Railsユーザーのみなさま、Active Supportは活用されていますか?
Active SupportはRuby言語の拡張、ユーティリティなどの役割を担っています。言語レベルで基本部分を底上げし、Railsアプリケーションの開発に役立つものです。
今回はそんなActive Supportの便利機能の中から、「try」メソッドに焦点を当て、tryメソッドを上手に活用する方法をご紹介します。
tryとは
tryとはどんなメソッドなのでしょうか?一言で言うと「nilでない場合にのみオブジェクトのメソッドを呼び出したい場合」に使うメソッドです。nil状態でメソッドを呼ばないようにするために使います。
シンプルにこれにつきますね!具体的にどのように使うのか?についてはこの後にご説明します。
tryの使い方
tryメソッドを使うためには、まずActive Supportをインストールする必要があります。
Active Supportをインストールするときにはgemという、Rubyのパッケージマネジメントシステムを使います。gemの詳細は別記事を参照してみてください。
インストールするときのコマンドは以下です。
gem install activesupport
では実際にtryメソッドのサンプルコードを紹介しながら、tryがある場合とない場合との違いを説明しますね。
user ? user.address : '住所不定' user.try(:address) || '住所不定'
1行目と2行目がtryを使わない場合と使う場合との違いです。
使わない場合は、まず「user ?」によってuserがnilかどうかをチェックしています。nilではない場合のみ、userオブジェクトから変数addressにアクセスしています。userが2回登場する辺りに冗長さを感じますね。
一方でtryを使う場合、userが一度だけ登場するコードにシンプル化されています。
tryとtry!の違い
tryとは何かを簡単にご説明しましたが、さらに、以下のサンプルコードで説明します。
user.try(:address) user.try!(:address)
tryには2つの効用があります。
1.userがnilの時、何もしない
2.userにaddressが実装されてない時、何もしない
1,2両方の効用を持つのがtryであり、1つ目の効用しか持たないのが try!です。
tryを使う目的としては、1が多いと思いますので、積極的にtry!を使うほうがよいでしょう。
hashにtryを使ってみる
[1] pry(main); {}[:hoge] # nil
{}は空のハッシュを表します。空のハッシュからhoge要素を取り出そうとするとnilを返しています。
[2] pry(main); nil[:hoge] NoMethodError: undefined method `[]' for nil:NilClass
hashから要素を取り出すとき、nilだとエラーとなります。
そこでtryを使うわけです。
[3] pry(main); {}.try(:fetch, :hoge) KeyError: key not found: :hoge
しかし、hash#fetchを使おうとすると、キーを登録していないとエラーとなります。
[4] pry(main); {hoge: 1}.try(:fetch, :hoge) # 1
hash#fetchにはdefault(この場合は「hoge:1」)を渡してあげるとKeyErrorが防げます。
[5] pry(main); {hoge: 1}.try(:fetch, :hoge, 0) # 1 [6] pry(main); {}.try(:fetch, :hoge, 0) # 0 [7] pry(main); nil.try(:fetch, :hoge, 0) # nil
nilに対しても、keyがないときでもエラーが起きません。
まとめ
今回はRuby on Railsにおけるtryの基本的な使い方からhashに対する使い方まで細かくご説明しました。
使うことでコードもよりシンプルに読みやすくなるのに加え、デバッグにも有用なtry、うまく活用していきましょう!