概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事: Ruby 2.6 adds Enumerable#filter as an alias of Enumerable#select | BigBinary Blog
- 原文公開日: 2018/08/28
- 著者: Amit Choudhary
- サイト: BigBinary
Ruby 2.6先行チェック: Enumerable#selectのエイリアス#filterを追加(翻訳)
Ruby 2.6シリーズの記事です。Ruby 2.6.0-preview2は最近リリースされました。
Ruby 2.6ではEnumerable#select
のエイリアスとしてEnumerable#filter
が追加され、別の言語からRubyに来た開発者に使いやすくなりました。JavaやRやPHPなど多くの言語には、レコードを条件に基づいてfilter/selectするフィルタメソッドがあります。
あるrangeを5で割り切れるかどうかでselect
/filter
する例を示します。
Ruby 2.5の場合
irb> (1..100).select { |num| num % 5 == 0 }
=> [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
irb> (1..100).filter { |num| num % 5 == 0 }
=> Traceback (most recent call last):
2: from /Users/amit/.rvm/rubies/ruby-2.5.1/bin/irb:11:in `<main>' 1: from (irb):2 NoMethodError (undefined method`filter' for 1..100:Range)
Ruby 2.6.0-preview2の場合
irb> (1..100).select { |num| num % 5 == 0 }
=> [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
irb> (1..100).filter { |num| num % 5 == 0 }
=> [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
Enumerable#filter
の他に、破壊的メソッドであるEnumerable#select!
にもEnumerable#filter!
エイリアスメソッドが追加されました。
- コミット: b1a8c64483
- issue: #13784
訳注
RubocopのRubyスタイルガイド2-68【統一】以下の別名メソッドについて優先順位の目安を定めるから以下を引用・加工しました。今回の#filter
エイリアス追加はこの#select
にさらに追加された形になります。
スタイルガイドでの推奨 | (Smalltalk風エイリアス) |
---|---|
#map |
#collect |
#find |
#detect |
#select |
#find_all |
#reduce |
#inject |
#size |
#length |
また、破壊的な#filter!
メソッドの動作は次のとおりです。
# Ruby 2.6.0-preview2
a = (1..100).map {|n| n}
a.select! {|num| num % 5 == 0 }
# => [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
a = (1..100).map {|n| n}
a.filter! {|num| num % 5 == 0 }
# => [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]