1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RuboCop | Style/CollectionMethods PreferredMethods

Posted at

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 で修正可能です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?