Le dernier est plus performant, voici une explication: Pull request où ce flic a été ajouté
Il vérifie pour les appels comme ceci:
9.times.map { |i| f(i) }
9.times.collect(&foo)
et suggère d'utiliser plutôt ceci:
Array.new(9) { |i| f(i) }
Array.new(9, &foo)
Le nouveau code a environ la même taille, mais utilise moins de méthode
appels, consomme moins de mémoire, travaille un petit peu plus vite, et à mon avis
est plus lisible.
J'ai vu de nombreuses occurrences de fois.{carte,collecter} dans différents
des projets connus: Rails, GitLab, Rubocop et plusieurs closed-source
des apps.
Repères:
Benchmark.ips do |x|
x.report('times.map') { 5.times.map{} }
x.report('Array.new') { Array.new(5){} }
x.compare!
end
__END__
Calculating -------------------------------------
times.map 21.188k i/100ms
Array.new 30.449k i/100ms
-------------------------------------------------
times.map 311.613k (± 3.5%) i/s - 1.568M
Array.new 590.374k (± 1.2%) i/s - 2.954M
Comparison:
Array.new: 590373.6 i/s
times.map: 311612.8 i/s - 1.89x slower
Je ne suis pas sûr maintenant que la fibre est le bon espace de noms pour la cop. Laissez
- moi savoir si je dois le déplacer vers la Performance.
Je n'ai pas l'implémenter l'autocorrection, car il peut potentiellement
pause le code existant, par exemple si quelqu'un a Fixnum#fois la méthode redéfinie
faire quelque chose de fantaisie. L'application de l'autocorrection de casser leur code.