ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: tleish@gmail.com
To: ruby-core@ruby-lang.org
Subject: [ruby-core:92481] [Ruby trunk Feature#15236] add support for hash shorthand
Date: Mon, 29 Apr 2019 17:56:07 +0000 (UTC)	[thread overview]
Message-ID: <redmine.journal-77827.20190429175606.e6bbcecb91ae11a8@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-15236.20181019103301@ruby-lang.org

Issue #15236 has been updated by tleish (Tony Fenleish).


+1

I also vote for this option for both hashes and named params.  After using Es6 and going back to Ruby, the ruby way felt clunky to me.

There are multiple reasons why this would be advantageous.

## Readability: 

I like the named params that was added to Ruby.  It allows flexibility in the order of the params.  but often struggle in convincing myself to use them because of readability.   Code examples often show the following:

```ruby
my_hash = {name: 'joe', age: 8}

# or

my_method(name: 'Joe', age: 8)
```

But in the real world, the values are usually stored in other variables and 95% of the time the code looks like this:

```ruby
my_hash = {name: name, age: age}

# or

my_method(name: name, age: age)
```

The above code does not ready well with it's redundant words.  With the change suggested, it reads so much better:

```ruby
my_hash = {name, age}

# or

my_method(name, age)
```

If the variable is different than the param name, then it easily communicates that:

```ruby
my_hash = {name, age: calculate_age}

# or

my_method(name, age: calculate_age)
```

## Refactoring

If a method is implemented without keyword arguments:

```ruby
def my_method(name, age); end

my_method(name, age)
```

And then later it is decided to refactor using ruby keywords

```ruby
def my_method(name:, age:, address: nil); end
```

This of course is a breaking change.  All locations which use this method now need to be updated to use the new convention.

```ruby
my_method(name: name, age: age)
```

However, for instances where the method was was implemented using variables of the same as the parameters (which often they are), then the change is non-breaking.

```ruby
my_method(name, age) # no change required
```



----------------------------------------
Feature #15236: add support for hash shorthand
https://bugs.ruby-lang.org/issues/15236#change-77827

* Author: ignatiusreza (Ignatius Reza Lesmana)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
PR in github: https://github.com/ruby/ruby/pull/1990

inspired by javascript support for object literal shorthand notation `{ a }`, which will be expanded into `{ a: a }`..

to avoid ambiguity, this shorthand is only supported when hash is defined with `{ }` notation.. in other situation where the brackets is optional, e.g. function call, we still need to write it in full (`m(a : a)` instead of `m(a)`, or `m(a, b, c: c)` instead of `m(a, b, c)`..



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

  parent reply	other threads:[~2019-04-29 17:56 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <redmine.issue-15236.20181019103301@ruby-lang.org>
2018-10-19 10:33 ` [ruby-core:89468] [Ruby trunk Feature#15236] add support for hash shorthand lyoneil.de.sire
2018-10-19 14:13 ` [ruby-core:89475] " shevegen
2018-10-19 14:13 ` [ruby-core:89476] " shevegen
2018-10-19 14:16 ` [ruby-core:89477] " shevegen
2018-10-19 16:23 ` [ruby-core:89478] " edchick
2018-10-20  2:23 ` [ruby-core:89488] " matz
2018-10-22  2:07 ` [ruby-core:89503] " lyoneil.de.sire
2018-10-22  8:54 ` [ruby-core:89507] " janfri26
2018-10-30  0:47 ` [ruby-core:89623] " lyoneil.de.sire
2018-11-02 20:29 ` [ruby-core:89682] " blake.h.l.west
2018-11-02 20:47 ` [ruby-core:89683] " manga.osyo
2018-11-02 20:55 ` [ruby-core:89684] " manga.osyo
2018-11-06  1:21 ` [ruby-core:89716] " lyoneil.de.sire
2019-04-29 17:56 ` tleish [this message]
2019-06-09  3:11 ` [ruby-core:93030] " lyoneil.de.sire
2019-06-09  4:22 ` [ruby-core:93032] " lyoneil.de.sire
2019-07-29  8:01 ` [ruby-core:93983] [Ruby master " ko1
2019-08-11 15:12 ` [ruby-core:94276] " FreeKMan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.ruby-lang.org/en/community/mailing-lists/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=redmine.journal-77827.20190429175606.e6bbcecb91ae11a8@ruby-lang.org \
    --to=ruby-core@ruby-lang.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).