ペアリング セッションで、Ruby の nil を処理する方法と、空の文字列を返す場合に (Ruby の CSV パッケージを介した) csv 解析の方が優れているかどうかという問題に直面しました ...
ここで作成していた仕様を確認できます。
https://github.com/mtc2013/LocalSupport/blob/seed-refactoring/spec/models/organization_spec.rb
テキスト ファイルのデータを csv 形式で処理しようとしていますが、入力要素が nil の場合、郵便番号を抽出する処理で barf が発生するという問題があるため、次の悲しいパスがあります。
expect(Organization.extract_postcode('HARROW BAPTIST CHURCH, COLLEGE ROAD, HARROW')).to eq(nil)
expect(Organization.extract_postcode(nil)).to eq(nil)
実際、この extract_postcode メソッドは空の文字列を返す可能性があると思います。ここで実装したコードを確認できます。
https://github.com/mtc2013/LocalSupport/blob/seed-refactoring/app/models/organization.rb
def self.extract_postcode(address_with_trailing_postcode)
match = address_with_trailing_postcode && address_with_trailing_postcode.match(/\s*(\w\w\d\s* \d\w\w)/)
match && match[1]
end
私たちはまだこれが少し醜いと感じています。Objective C のようなものでは、nil オブジェクトのメソッドを呼び出すだけで、nil が返されます。Rubyでは例外がスローされるので、この「match && match[1]」操作でチェックしていますが、これは推奨されますか?
別のアプローチとして、CSV 解析で常に nil ではなく空の文字列が生成されるようにすることも考えられますが、nil が渡されないようにコードを保護する必要があるように感じます。
私たちの最終的な質問は、ここでのルビーの方法は何ですか? メソッドがある場合、nil が渡されたときにエラーをスローする必要がありますか? または、それらをキャッチして nil を返す必要がありますか? または、文字列操作メソッドの場合は空の文字列ですか?
nil エラーをスローすることが推奨されている場合は、欠落している要素を空の文字列として扱うように CSV 解析を修正することに集中する必要があると思います...または、nil エラーをキャッチして独自のエラーで再スローする方がよいでしょう。カスタムエラーメッセージ?
どんな提案でも大歓迎です