ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: lyoneil.de.sire@gmail.com
To: ruby-core@ruby-lang.org
Subject: [ruby-core:89716] [Ruby trunk Feature#15236] add support for hash shorthand
Date: Tue, 06 Nov 2018 01:21:28 +0000 (UTC)	[thread overview]
Message-ID: <redmine.journal-74761.20181106012127.b583803c78cbe16d@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-15236.20181019103301@ruby-lang.org

Issue #15236 has been updated by ignatiusreza (Ignatius Reza Lesmana).


blakewest (Blake West) wrote:
> Hi all, 
> I've really wanted a feature like this for a long time. I find myself often using named arguments, which I love for the clarity. But then the callers often have variables of the same name as the parameter name, making it more verbose. eg. `foo(bar: bar, baz: baz)`. If one concern here is that `{a, b, c}` looks like set syntax, then I'd be curious to get opinions on a different syntax I had thought about for a while. The general idea is to extend the `%w` idea for hashes. For example, we could do `%h{foo bar baz}` which would expand into `{foo: foo, bar: bar, baz: baz}`. In both the "%w" and "%h" cases, we're allowing for a more concise version of an often used pattern.
> I think the downside is using a `%h` syntax feels "separated" from the typical hash syntax. Using a straight `{a,b,c}` is "cleaner" as there are fewer characters, and may be more intuitive to some.
> But similarly, I think that actually the upside of this syntax is it's more "separated". As Matz points out, the `{a,b,c}` syntax could look like set syntax, and as shevegen points out, it could be confusing for beginners. Neither of these problems would exist using %h, as it would pretty clearly be a "special" syntax, used by people who know what it's doing. Also, using `%h{}` would enable not having to use commas, which could make it even more compact
> 
> I'll leave with a few more examples of what I'd be suggesting.
> 
> ~~~ ruby
> def foo(param1:, param2:)
>   param + param2
> end
> 
> param1 = 7
> param2 = 42
> 
> foo(%h{param1 param2})
> 
> def respond_with(resource, options)
>   meta = extract_meta(resource, options)
>   etc = extract_etc(resource, options)
> 
>   %h{ resource meta etc }
> end
> 
> # destructuring could obviously be left for later.
> %h{data meta etc} = {data: [1,2,3], meta: {mobile: true}, etc: "more info"}
> ~~~
> 
> Thoughts?

osyo (manga osyo) wrote:
> hi,  blakewest.
> I proposaled it.
> https://bugs.ruby-lang.org/issues/14973
> I need to consider an implementation that does not use `#eval`.

I like this :+1:

`{ a, b, c }` looks a bit cleaner to me, probably because of my familiarity with es6 syntax, so it require less context switching.. but if it is considered confusing to some, `%h{a b c}` also works for me..

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

* 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:[~2018-11-06  1:21 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 ` lyoneil.de.sire [this message]
2019-04-29 17:56 ` [ruby-core:92481] " tleish
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-74761.20181106012127.b583803c78cbe16d@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).