Issue #17830 has been updated by rafasoares (Rafael Soares).


marcandre (Marc-Andre Lafortune) wrote in #note-1:
> In general, I don't favor aliases as they usually increase cognitive load, make code less uniform and add very little.

In general, I agree. But in this case, we already have `Integer#succ` and `Integer#next`. It's the only reason why I think this is a reasonable addition. We also have several different convenience aliases in the language, so it seems arbitrary to me that at some point there's a line in the sand saying "we don't add aliases anymore, no matter how readable they would make the code". Also, since renaming `Integer#pred` is out of the question, as it would unnecessarily break older code, aliases seem like a decent alternative.

> More importantly in this case, `Integer#pred` is not a frequently used method. Actually, I can not recall using it, or seeing it used ever. A method that isn't very useful should not have 3 different names.

I use it from time to time, I think it reads better than `number - 1`, especially when you need to follow it with a method call (e.g. `(number - 1).times { ... }`). And, honestly, I'd use it more if it didn't read so weird. I think `number.pred` has a bigger cognitive load than `number.prev` or `number.previous`, since I need to remember what the hell does `pred` stand for in the first place. Again, compare it with `number.next` vs `number.succ`.

----------------------------------------
Feature #17830: Add Integer#previous and Integer#prev 
https://bugs.ruby-lang.org/issues/17830#change-91689

* Author: rafasoares (Rafael Soares)
* Status: Open
* Priority: Normal
----------------------------------------
I think `Integer#pred` is great as the inverse of `#succ`, but it reads a bit weird as the inverse of `#next`, which might be preferable for those going for a more "reads like English" approach.

On that note, `#previous` reads better, but it's also twice as long as `#pred` (or even `#next`). Which is why I've also added the shorthand `#prev`

Since Ruby strives for readability, I always thought it was weird that the team omitted this improvement. 

Also, I thought about writing a gem for this, but:
1. Do we really want to add another gem for such a simple change to every project?
2. Monkey-patching gems feel dirty.

Finally, I want to mention that I tried looking for previous discussions on this topic, as it seems likely someone would've brought this up at some point, but was unsuccessful. Probably due to the massive amount of baggage in the core issue tracker and mailing lists, I could've missed something among the noise.

I've created a fork on GitHub (https://github.com/rafasoares/ruby/commit/05119848b1f480db2e809f964528799030cc7ebb) in order to open a PR, but decided to open this ticket as well, after reading the contributing guide more carefully. 



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>