Railsでたまに見かける、tryメソッド。こいつの正体が知りたくて調べてみた。
Javaではエラーハンドリングでtry catch文をよく使うので、Railsのtryも似た感じかな~と思ったら検討外れだった。
railsのActiveSupportが提供しているメソッドになる。
tryメソッドは何をしているのか?
結論から言うと、オブジェクトの存在判定を行い、nilじゃない場合に引数に指定した処理を実行するメソッドである。
オブジェクトの存在をチェックした後に任意の処理を行うことができるため、処理実行のための担保にもなる。
tryメソッドの使い方と、使用することのメリット
対象のオブジェクトがnilの場合、処理を実行しないため、エラーになるのを防ぐことができる。
条件判定を書く際にスッキリと書くことができる。
下記はuserがnilでない場合nameを取得する処理である。
# tryを使用しない場合
user ? user.name : "nilです"
# tryを使用した場合
user.try(:name) || "nilです"
上のuserが2回出てくるより、user.try(:name)の方がわかりやすいしスッキリしている。
ちなみにtryをメソッドチェーンで重ねることも可能となっている
user.try(:name).try(:age)
また引数で渡したメソッドが定義されていない場合エラーは吐かれず、当然処理も実行されない
# helloメソッドが定義されていない場合
user.try(:hello)