RuboCop | Style/CollectionMethods PreferredMethods
概要
RuboCopの「Style/CollectionMethods PreferredMethods」警告について。
コレクションのメソッドで、エイリアスが用意されているメソッドについて
どのメソッドを利用するかを規約化する。
設定値一覧
設定対象 | 設定値 | 内容 | デフォルト |
---|---|---|---|
PreferredMethods collect | map | collect と map のうち、mapを有効とする | ○ |
PreferredMethods map | collect | collect と map のうち、collectを有効とする | -- |
PreferredMethods collect! | map! | collect! と map! のうち、map!を有効とする | ○ |
PreferredMethods map! | collect! | collect! と map! のうち、collect!を有効とする | -- |
PreferredMethods inject | reduce | inject と reduce のうち、reduceを有効とする | ○ |
PreferredMethods reduce | inject | reduce と inject のうち、injectを有効とする | -- |
PreferredMethods detect | find | detect と find のうち find を有効とする | ○ |
PreferredMethods find | detect | finde と detect のうち detect を有効とする | -- |
PreferredMethods find_all | select | find_all と select のうち select を有効とする | ○ |
PreferredMethods select | find_all | select と find_all のうち find_all を有効とする | -- |
CollectionMethods PreferredMethods
各設定値での検証結果をまとめます。
検証プログラム
preferred_methods.rb
ary = [*1..5]
p ary.map { |e|e + 1 }
p ary.collect { |e|e + 1 }
p ary.map! { |e|e + 1 }
p ary.collect! { |e|e + 1 }
p ary.inject(&:+)
p ary.reduce(&:+)
p ary.find { |v|v.odd? }
p ary.detect { |v|v.odd? }
p ary.find_all { |v|v.odd? }
p ary.select { |v|v.odd? }
実行結果 デフォルト の場合
.rubocop.yml
※明示的に設定しているが、デフォルト値なので何も設定しなくてもよい
CollectionMethods:
PreferredMethods:
collect: 'map'
collect!: 'map!'
inject: 'reduce'
detect: 'find'
find_all: 'select'
collect , collect! , inject, detect, find_all 利用時に警告が発生
$ rubocop preferred_methods.rb
Inspecting 1 file
C
Offenses:
preferred_methods.rb:4:7: C: Prefer map over collect.
p ary.collect { |e|e + 1 }
^^^^^^^
preferred_methods.rb:6:7: C: Prefer map! over collect!.
p ary.collect! { |e|e + 1 }
^^^^^^^^
preferred_methods.rb:7:7: C: Prefer reduce over inject.
p ary.inject(&:+)
^^^^^^
preferred_methods.rb:10:7: C: Prefer find over detect.
p ary.detect { |v|v.odd? }
^^^^^^
preferred_methods.rb:11:7: C: Prefer select over find_all.
p ary.find_all { |v|v.odd? }
^^^^^^^^
1 file inspected, 5 offenses detected
実行結果 デフォルトと反対の設定をした場合
.rubocop.yml
CollectionMethods:
PreferredMethods:
map: 'collect'
map!: 'collect!'
reduce: 'inject'
find: 'detect'
select: 'find_all'
map , map! , reduce, find, select 利用時に警告が発生
$ rubocop preferred_methods.rb
Inspecting 1 file
C
Offenses:
preferred_methods.rb:3:7: C: Prefer collect over map.
p ary.map { |e|e + 1 }
^^^
preferred_methods.rb:5:7: C: Prefer collect! over map!.
p ary.map! { |e|e + 1 }
^^^^
preferred_methods.rb:8:7: C: Prefer inject over reduce.
p ary.reduce(&:+)
^^^^^^
preferred_methods.rb:9:7: C: Prefer detect over find.
p ary.find { |v|v.odd? }
^^^^
preferred_methods.rb:12:7: C: Prefer find_all over select.
p ary.select { |v|v.odd? }
^^^^^^
1 file inspected, 5 offenses detected
補足
この警告は rubocop -a で修正可能です。