Effective Rubyを読んでいます(2)

tl;dr

「Effective Ruby」の項目17から項目20まで読みました。 :arrow_down: 目次です。

  • 項目17 nilスカラーオブジェクトを配列に変換するには、Arrayメソッドを使おう
  • 項目18 要素が含まれているかどうかの処理を効率よく行うために集合を使うことを検討しよう
  • 項目19 reduceを使ってコレクションを畳み込む方法を身に付けよう
  • 項目20 ハッシュのデフォルト値を利用することを検討しよう

新しく知ったこと

nilスカラー値をお手軽に配列へ変換する場合、Arrayメソッドを利用する(項目17)

file_namesを初期値として受け取り、何らかの解析をするAnalyzerクラスを例として記載していきます。 まず、前提としてAnalyzer#initializeの引数は、配列が渡されることを想定しています。

class Analyzer
  def initialize(file_names = [])
    @file_names = file_names
  end

  def analyze
    @file_names.each do
      # 解析処理
    end
  end
end

この時、Analyzer.new(nil).analyzeAnalyzer.new('sample.csv').analyzeを実行すると、undefined method each' for nil:NilClass (NoMethodError)等が発生します。

NoMethodErrorが発生しないように対応しようと思います。

@@ -1,6 +1,6 @@
 class Analyzer
   def initialize(file_names = [])
-    @file_names = file_names
+    @file_names = Array(file_names)
   end

   def analyze

Arrayメソッドで、変換をかけた後に@file_namesに代入するようにしました。これは、次のArrayの挙動を利用しています。

[1] pry(main)> Array(nil)
=> []
[2] pry(main)> Array('sample.csv')
=> ["sample.csv"]

以上です :end: