質問: `File.exist?`でファイルの存在確認をするときに引数が`nil`の可能性があれば ``` File.exist?(filename) if filename ``` と書いているのですが、`try`に近い形で`filename`が`nil`なら`nil`を返し、`String`であれば`File.exist?`の処理を行う定番の書き方はありますか? 自分でメソッドを定義する必要があるのであれば現在の書き方を維持していこうと思っているのですが より良い書き方があるなら知りたく質問させていただきました。 `active_support`のような使えるメソッドをまとめて読み込む形の物も採用していこうと考えています。
回答: 後置ifでなくifの条件式の話であれば、 ``` if !filename.to_s.empty? && File.exist?(filename) ``` と書きます。filenameが空文字でないことが文脈上明らかか想定しなくてよいのであれば ``` if filename && File.exist?(filename) ``` とします。 後置ifなら(File.exist?は例として不適切なので) ``` do_something(filename) unless filename.to_s.empty? ``` とかでしょうか。どちらにしても、多少冗長になってもfilenameのチェックをしているという意図を明白にする方を選びます。 `File.exist?(filename.to_s)`や`do_something(filename.to_s)`だと * `#to_s`がnilよけであること * メソッドが空文字を許容するかどうか(nilだった場合に空文字を渡すことは意図した動作なのか) がコード上明白でないので私なら避けます。逆に言えばそれらが明白である場面ならそう書くかもしれません。