読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

injectやmapのブロックの中が複雑になってきたら、素直にメソッドチェイン式に改めた方がいいかも

ruby refactoring

たとえば、次のようなコードがあったとします。

result = data.inject([]) {|a,c| ((c.x) > 10) ? a << c.y : a }

ブロックの中がグチャグチャしてますね。
こういう時は、素直に

result2 = data.select {|e| e.x > 10}.map(&:y)

その上、この形式ならlazyを適用する事もできます。
数が膨大な時は有利ですね。

result3 = data.lazy.select {|e| e.x > 10}.map(&:y)    
#>> #<Enumerator::Lazy: #<Enumerator::Lazy: #<Enumerator::Lazy: [#<struct Point x=20, y=22>, #<struct Point x=2, y=8>, #<struct Point x=22, y=30>, #<struct Point x=-8, y=9>]>:select>:map>

これなら、数が多くなった場合有利?