Ruby 2.6先行チェック: Enumerable#selectのエイリアス#filterを追加(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

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!エイリアスメソッドが追加されました。

訳注

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]

関連記事

Ruby 2.6先行チェック: rangeの終端をnilまたは省略できる(翻訳)

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好き。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

BPSアドベントカレンダー

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ