のえら

技術備忘とかメモとか.間違いはつっこんでいただきたい所存.

rescueを1行で書きたい

JSONでパースをかけるときに、変換できない形式のときにエラーになる。
空かどうかのチェックは事前にできるけど、パースができるかのチェックはできないようなので、nilで返してその後処理をするよう。
が、これだけのためにbegin句で複数行になるのは微妙かな?と思って調べてみると、1行でかけることがわかった。

橋本商会 » Rubyのrescueって1行で書くと値を返すのね・・

(以下、ざっくりとした例)

return nil if str.blank? # ここで事前チェックしたりなんだり
result  = begin
  JSON.parse(str)
rescue => e
  nil
end
str = '['
JSON.parse(str) rescue nil

が、rubocopの規約に引っかかったので、可読性を上げるためにも素直に複数行で書くようにしました。。

Style/RescueModifier:
Description: 'Avoid using rescue in its modifier form.'
StyleGuide: '#no-rescue-modifiers'
Enabled: true

※エラーの種別を判断して、きちんと処理しろということであってるのかしら。。
exceptions - Ruby-style-guide - Womply - Relish