Is it the spread operator or spread syntax?

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Is it the spread operator or spread syntax?

Andrew Li
It seems as if there's two different ways to refer to the ... punctuator. How should I refer to this:

const foo = [bar, ...baz];

MDN seems to suggest it's referred to as 'spread syntax' but its article URL seems to suggest it was initially created under the name 'spread operator' -- and it's more popular when looking at Google results. Syntax is the 'form' of the language while operators are generally used to perform a certain operation on a number of operands to produce a value.

It seems as if on the surface, 'operator' is the most appropriate fit here, as it's seems more like a prefix unary operator more than it is syntax. But in the context of ECMAScript, it's not listed as an operator at MDN nor explicitly in the language specification -- and it's more of an extension of array literal syntax and only works in context of array literals. I would say it's more appropriately named syntax due to that, in the language specification, it's only ever mentioned literally in the ArgumentList and SpreadELement productions. That seems to suggest it's more just syntax rather than a standalone operator such as + or *. 

Which way of referring to it would be more 'correct' if any and is my reasoning correct?

_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Is it the spread operator or spread syntax?

T.J. Crowder-2
You're not alone in this question; early on, lots of folks called `...` an operator. It isn't. Rest and spread are syntax, just like the commas in a function's parameter declaration list are syntax, not the comma operator. What rest and spread do is outside the realm of what an operator can do. An operator has a *single* result value which is (optionally) used where the operator's expression was once the expression has been evaluated. E.g., in `foo(2 * 5)`, the `2 * 5` is evaluated and the resulting value (`10`) is passed into `foo` as the first argument. Roughly speaking, operators are built-in functions with A) optionally-symbolic names, B) infix notation (for binary and ternary operators), and C) lazy argument evaluation; and like functions, they have only a single result value (and potential side-effects). Rest and spread can't be expressed that way. Consider `foo(...a)`. There's no single result value there, there's a series of discrete values used as discrete arguments to `foo`.

-- T.J. Crowder

On Wed, Jul 5, 2017 at 1:40 PM, Andrew Li <[hidden email]> wrote:
It seems as if there's two different ways to refer to the ... punctuator. How should I refer to this:

const foo = [bar, ...baz];

MDN seems to suggest it's referred to as 'spread syntax' but its article URL seems to suggest it was initially created under the name 'spread operator' -- and it's more popular when looking at Google results. Syntax is the 'form' of the language while operators are generally used to perform a certain operation on a number of operands to produce a value.

It seems as if on the surface, 'operator' is the most appropriate fit here, as it's seems more like a prefix unary operator more than it is syntax. But in the context of ECMAScript, it's not listed as an operator at MDN nor explicitly in the language specification -- and it's more of an extension of array literal syntax and only works in context of array literals. I would say it's more appropriately named syntax due to that, in the language specification, it's only ever mentioned literally in the ArgumentList and SpreadELement productions. That seems to suggest it's more just syntax rather than a standalone operator such as + or *. 

Which way of referring to it would be more 'correct' if any and is my reasoning correct?

_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss



_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Is it the spread operator or spread syntax?

Andrew Li
I hadn't though about rest and how it passes multiple values to a function -- so it's definitely not an operator. I would say that since spread/rest syntax doesn't always evaluate to exactly one value, is context-specific (you can't use it standalone), and isn't defined as an operator in the ECMAScript spec with productions only ever containing *literally* ..., I can say definitively that it's not an operator. 

On Wed, Jul 5, 2017 at 7:59 AM, T.J. Crowder <[hidden email]> wrote:
You're not alone in this question; early on, lots of folks called `...` an operator. It isn't. Rest and spread are syntax, just like the commas in a function's parameter declaration list are syntax, not the comma operator. What rest and spread do is outside the realm of what an operator can do. An operator has a *single* result value which is (optionally) used where the operator's expression was once the expression has been evaluated. E.g., in `foo(2 * 5)`, the `2 * 5` is evaluated and the resulting value (`10`) is passed into `foo` as the first argument. Roughly speaking, operators are built-in functions with A) optionally-symbolic names, B) infix notation (for binary and ternary operators), and C) lazy argument evaluation; and like functions, they have only a single result value (and potential side-effects). Rest and spread can't be expressed that way. Consider `foo(...a)`. There's no single result value there, there's a series of discrete values used as discrete arguments to `foo`.

-- T.J. Crowder

On Wed, Jul 5, 2017 at 1:40 PM, Andrew Li <[hidden email]> wrote:
It seems as if there's two different ways to refer to the ... punctuator. How should I refer to this:

const foo = [bar, ...baz];

MDN seems to suggest it's referred to as 'spread syntax' but its article URL seems to suggest it was initially created under the name 'spread operator' -- and it's more popular when looking at Google results. Syntax is the 'form' of the language while operators are generally used to perform a certain operation on a number of operands to produce a value.

It seems as if on the surface, 'operator' is the most appropriate fit here, as it's seems more like a prefix unary operator more than it is syntax. But in the context of ECMAScript, it's not listed as an operator at MDN nor explicitly in the language specification -- and it's more of an extension of array literal syntax and only works in context of array literals. I would say it's more appropriately named syntax due to that, in the language specification, it's only ever mentioned literally in the ArgumentList and SpreadELement productions. That seems to suggest it's more just syntax rather than a standalone operator such as + or *. 

Which way of referring to it would be more 'correct' if any and is my reasoning correct?

_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss




_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Is it the spread operator or spread syntax?

Allen Wirfs-Brock
An element of a programming that has its own distinct syntax rules is sometimes called a “special form”.  So … can be called a special form.  Or you can think of it as an syntactic element of argument lists, parameter lists, array literals/destructuring, object literals/destructuring, each of which is itself a special form.





On Jul 5, 2017, at 6:32 AM, Andrew Li <[hidden email]> wrote:

I hadn't though about rest and how it passes multiple values to a function -- so it's definitely not an operator. I would say that since spread/rest syntax doesn't always evaluate to exactly one value, is context-specific (you can't use it standalone), and isn't defined as an operator in the ECMAScript spec with productions only ever containing *literally* ..., I can say definitively that it's not an operator. 

On Wed, Jul 5, 2017 at 7:59 AM, T.J. Crowder <[hidden email]> wrote:
You're not alone in this question; early on, lots of folks called `...` an operator. It isn't. Rest and spread are syntax, just like the commas in a function's parameter declaration list are syntax, not the comma operator. What rest and spread do is outside the realm of what an operator can do. An operator has a *single* result value which is (optionally) used where the operator's expression was once the expression has been evaluated. E.g., in `foo(2 * 5)`, the `2 * 5` is evaluated and the resulting value (`10`) is passed into `foo` as the first argument. Roughly speaking, operators are built-in functions with A) optionally-symbolic names, B) infix notation (for binary and ternary operators), and C) lazy argument evaluation; and like functions, they have only a single result value (and potential side-effects). Rest and spread can't be expressed that way. Consider `foo(...a)`. There's no single result value there, there's a series of discrete values used as discrete arguments to `foo`.

-- T.J. Crowder

On Wed, Jul 5, 2017 at 1:40 PM, Andrew Li <[hidden email]> wrote:
It seems as if there's two different ways to refer to the ... punctuator. How should I refer to this:

const foo = [bar, ...baz];

MDN seems to suggest it's referred to as 'spread syntax' but its article URL seems to suggest it was initially created under the name 'spread operator' -- and it's more popular when looking at Google results. Syntax is the 'form' of the language while operators are generally used to perform a certain operation on a number of operands to produce a value.

It seems as if on the surface, 'operator' is the most appropriate fit here, as it's seems more like a prefix unary operator more than it is syntax. But in the context of ECMAScript, it's not listed as an operator at MDN nor explicitly in the language specification -- and it's more of an extension of array literal syntax and only works in context of array literals. I would say it's more appropriately named syntax due to that, in the language specification, it's only ever mentioned literally in the ArgumentList and SpreadELement productions. That seems to suggest it's more just syntax rather than a standalone operator such as + or *. 

Which way of referring to it would be more 'correct' if any and is my reasoning correct?

_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss



_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss


_______________________________________________
es-discuss mailing list
[hidden email]
https://mail.mozilla.org/listinfo/es-discuss
Loading...