これはやや大雑把な質問ですが、Ruby でプログラミングするときに常に遭遇する質問です。私は主に C と Java のバックグラウンドを持っています。ライブラリ関数またはメソッドを使用するときは、ドキュメントを見て、エラー時に返されるもの (通常は C) や、スローされる可能性のある例外 (Java) を確認します。
Ruby では状況がまったく異なるようです。ここで、サーバーから受け取った JSON を解析する必要があります。
data = JSON.parse(response)
当然、このコードを書いた後に最初に考えるのは、入力が悪い場合はどうなるかということです。エラー時に nil を返すか、何らかの例外を発生させますか?parse
もしそうなら、どれですか?
ドキュメント(http://flori.github.com/json/doc/JSON.html#M000022)を確認すると、次のようになります。
「JSON 文字列ソースを Ruby データ構造に解析して返します。」
これは、私が Ruby で繰り返し遭遇したパターンのほんの一例です。当初、これは私が使用しているライブラリのドキュメントの欠点だと考えていましたが、今ではこれが標準的な慣行であると感じ始めており、Ruby プログラマーとは考え方が少し異なります。私が知らない慣習はありますか?
開発者はこれにどのように対処しますか?
(そして、はい、私はライブラリ メソッドのコードを見て、どの例外が発生するかについてある程度のアイデアを得ることができましたが、100% 確信することはできず、文書化されていない場合、それに依存することに不快感を覚えます。)
EDIT : 最初の 2 つの回答を見た後、上記の JSON 解析の例を続けます。
私はすべきではないと思います:
begin
data = JSON.parse(response)
raise "parse error" if data.nil?
rescue Exception => e
# blahblah
end
コード/テストを見て、ParserError
on エラーが発生しているように見えるからです (nil を返すことは、Ruby では標準的な方法ではないようです)。推奨される方法は次のとおりです。
begin
data = JSON.parse(response)
rescue JSON::ParserError => e
# blahblah
end
ParserError
...コードとテストを調べて学んだことに基づいていますか?
(また、解析しているサーバーからの応答であることを明確にするために例を編集しました。)