Alternative syntax for <|

Dmitry Soshnikov dmitry.soshnikov at gmail.com
Wed Nov 16 01:42:30 PST 2011


On 16.11.2011 10:27, Russell Leggett wrote:
> Given the recent conversation about class as operator and its likely 
> composition with <|, I propose turning the syntax:
> /MemberExpression/ <| /ProtoLiteral/
> into
>
>     extends /MemberExpression ProtoLiteral/
> In the common case of using the class operator, it would read much 
> more naturally:
>
>     let Point2d = class extends Point {
>         ...
>     }
> or how I propose it, allow using a name, and define it:
>
>     class Point2d extends Point {
>         ...
>     }
>     //which can be grouped as
>     class Point2d (extends Point {
>         ...
>     })
> Non-class uses of the syntax might seem a little bit odd
>
>     let specialArray = appBehavior <| [0,1,2,3,4,5]
>     //becomes
>     let specialArray = extends appBehavior [0,1,2,3,4,5]
>

Yes, it was mentioned before (especially taking into account that 
`extends' is already reserved).

However, there were arguments about wrong placement of entities 
regarding to `extends' (it turned out that it's like a prototype extends 
an object, but it should be vice-versa).

You put it in the correct place, though as I see we may even eliminate 
assignment here `=' and to make it even more declarative:

let point = {x: 10, y: 20};

// a simple object
let point3D extends point {
   z: 30
}

// a class
class Point3D extends Point {
   constructor (x, y, z) { ... }
}

Since such declarations usually appear exactly in declarative form 
(sorry for tautology), assignment can be omitted.

How is it different from Object.create(...)? Actually yes, it's just an 
alternative and in contrast with O.create, I think here we may use not 
descriptors but directly values.

P.S.: in addition, will we introduce another type-tag testing? Or 
`instanceof' and testing constructor property will be enough? I would 
agree and recommend `class' operator as well -- to return, how proposed 
by Allen, the value of the `constructor', actually just a shorthand for 
not to test the `constructor':

if (class(foo) == Foo) // like Python's type

P.S.[2]: and regarding assignment, I think it can be used in 
class-expressions (notice also, unfortunately only hypothetical, since 
the topic became silent, if-expression)

let OperationClass = if (in3dMode) {
   class extends Point3D {
     // implementation
   }
} else {
   class extends Point {
     // ...
   }
}

Dmitry.

> but given the overall disapproval of the exact syntax of the <| 
> operator, I think its at least a little more obvious what is going on.
>
> - Russ
>
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20111116/2a08f57f/attachment-0001.html>


More information about the es-discuss mailing list