rubocop / ruby-style-guide

A community-driven Ruby coding style guide
https://rubystyle.guide
16.42k stars 3.4k forks source link

Numbered parameters #885

Open Hugo-Hache opened 2 years ago

Hugo-Hache commented 2 years ago

Following my PR introducing a cop for numbered parameters, @koic suggested that choosing the default style required a discussion in the style guide.

As a basis, here is what we agreed upon in our team. "Explicit" array name is not per se enforcable with a cop, so I'm not sure how it would fit in the guide.

# bad - non explicit array name
results = electric_appliance.process!
results.each { _1.taste }

# bad - multi line block
waffles.each do 
  topping = @user.toppings.max_by(&:evaluation)
  _1.spread topping
end

# bad - block can be created from method
waffles.each { _1.taste } # => waffles.each(&:taste)
waffles.each { taste(_1) } # => waffles.each(&method(:taste))

# good - explicit array name + single line block + necessity to write block
waffles.each { _1.spread(jam) }
waffles.filter { _1.baking == :well_done }
bbatsov commented 2 years ago

I don't get this part at all:

# bad - non explicit array name
results = electric_appliance.process!
results.each { _1.taste }

Seems like an OK usage to me, if this has some side effects.

I think the code bellow is OK, even if it'd stick to the older shorthands.

# bad - block can be created from method
waffles.each { _1.taste } # => waffles.each(&:taste)
waffles.each { taste(_1) } # => waffles.each(&method(:taste))
Hugo-Hache commented 2 years ago
# bad - non explicit array name
results = electric_appliance.process!
results.each { _1.taste }

I view the usage of numbered parameter bad in this case because by removing the variable name, you loose information on what you manipulate (as the array name is not specific enough). Here for instance the code below would have been easier to understand:

results = electric_appliance.process!
results.each { |waffle| waffle.taste }

I understand this part is quite subjective so it would not surprise me it would not fit in the style guide.