# simple shorter function syntax

Dmitry A. Soshnikov dmitry.soshnikov at gmail.com
Mon Jul 26 00:31:41 PDT 2010

```On 26.07.2010 4:16, Sam Ruby wrote:
> On Sun, Jul 25, 2010 at 7:57 PM, Maciej Stachowiak<mjs at apple.com>  wrote:
>
>> Good point about the escaping hazard. I think # may look funny to people
>> because it is a "noisy" symbol and also because it is a comment delimiter in
>> many languages. Two other characters totally disallowed in the syntax are @
>> and `, I wonder if either of those would be more visually pleasing:
>> [0, 1, 2, 3].map( #(x) {x * x} )
>> [0, 1, 2, 3].map( `(x) {x * x} )
>> [0, 1, 2, 3].map( @(x) {x * x} )
>> I also wonder if using a strictly binary operator might be workable without
>> creating syntax ambiguities:
>> [0, 1, 2, 3].map( ^(x) {x * x} )
>> [0, 1, 2, 3].map( *(x) {x * x} )
>> [0, 1, 2, 3].map( %(x) {x * x} )
>>
> The ruby syntax for the above is as follows:
>
> [0,1,2,3].map {|x| x*x}
>
> (try it in 'irb' to see what I mean)
>
> While I don't believe that would fly here, perhaps adding parens
> around the function would:
>
> [0,1,2,3].map({|x| x*x})
>
>

In JS |x| can be placed outside, and then some special name won't be
needed at all:

[1, 2, 3].map((x) {x * x}).

This exactly how it's used in CoffeeScript. But in contrast with Coffee,
JS has obligatory parens, so (( looks not so good. But really, this
syntax is nice:

withFoo: (x) -> x* x   -- define a function

[1, 2, 3].map (x) -> x * x -- pass an anonymous "funarg" to map

Or the same:

[1, 2, 3].map withFoo -- it sounds! And declaratively looks nice.

Will Harmony consider to call a function without parens -- to provide
ability of more declarative in some cases?

Dmitry.

> - Sam Ruby
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>

```