More like

Foo()# // SyntaxError
Foo.bar()# // Foo
Foo.bar.baz()# // Foo.bar

The super property thing is a harder problem. They would always return `this` i 
guess, but I'm not sure if chaining a super method should lookup a method in 
the prototype first, or instance first

> On Oct 26, 2015, at 6:11 PM, Edwin Reynoso <[email protected]> wrote:
> 
> @CaitIin see what your saying which would simplify things:
> 
> `foo()#` returns `undefined`
> `foo.bar.call(baz)#` returns `foo` (correct?)
> `baz.quux = foo.bind(bar)` returns `baz` (correct?)
> 
> and as for property accessors I think they should throw, it should only be 
> for function calls, because why after getting a property would you want to 
> get the object back? The only reason I can think of is that its a getter and 
> it does have a side effect (which in my opinion its just a bad idea)
> 
> Take `[].length` why would you actually type out `.length` if you don't want 
> it, compare to a function call which it should have a side effect.
> 
> So these should throw:
> 
> `[].length#` // throws
> `({ foo: 3 }).foo#` // throws 
> 
> @Adam
> 
> I'm not sure about that, not sure if `with()` would be brought back to "good 
> use" (I kind of always liked it) but interesting thought
> 
> BTW I don't think you need the preceding `.` in `with` statements
> 
> @Eric
> 
> Other languages having `#` as comments, doesn't matter
> 
> I don't really like that syntax because this is how it would look if you had 
> it in different lines, but that's not really up to me:
> 
> ```JS
> obj.(
>   f1(),
>   f2()
> );
> ```
> 
> Compare that to:
> 
> ```JS
> obj
>  .f1()
>  #f2()
> ```
> 
> There's extra parentheses and having a comma, also there's already a comma 
> operator, not sure if that will confuse things.
> 
> @Erik
> 
> That's a nice syntax I suppose
> 
> @Bergi
> 
> No, the method being called is actually `bar`, but using `call` calls the 
> method `bar` with a different `this` value.
> 
> @Bob
> 
> I see what your saying that's actually an idea I had first, just not that 
> syntax, but that's true if the APIs are ones you wrote, there are lots of 
> APIs that are out there already and may have functions that return other 
> values that you may or may not need.
> 
> Yea you could use that chainify function easily if you were the one writing 
> the API, but like I said above, there are methods already that may return 
> something, and what they return is useful, but sometimes you may not need 
> them. They could have a parameter as to what to return but that just 
> complicates things, having a way to do this in the languages means 2 things:
> 
> 1. No API methods have to be changed, to do accomplish this
> 2. APIs can then return something else, and JS can always provide a way to 
> return the object back, instead of the API having to do it.
> 
>> On Mon, Oct 26, 2015 at 1:05 PM, Bob Myers <[email protected]> wrote:
>> I love cool syntactic innovations as much as the next guy. I'm sure there 
>> are a bunch sitting out there waiting to be discovered that will make us all 
>> sit back in awe.
>> 
>> But it's not a particularly new insight to observe that especially if they 
>> introduce no new basic functionality and are just sugar, then such 
>> innovations have to solve a real pain point, not have simple user-side 
>> solutions, and not eat too much into the syntactic space for better future 
>> ideas.
>> 
>> Here, I'm really having a hard time trying to figure out what's so painful 
>> about
>> 
>>     obj.foo();
>>     obj.bar();
>> 
>> that would lead us to introduce `.{` or `..` or `#.` to solve the problem of 
>> typing `obj` twice. The resulting code (whether `obj.foo()..bar()` or 
>> `obj.{foo(); bar()}` or `obj.foo()#.bar()`) is neither more writable, nor 
>> more readable, nor more maintainable, nor more provably correct. On the 
>> contrary. All are more obtuse, obscure, and bug-prone.
>> 
>> As a semi-ridiculous example of a seemingly useful new syntactic structure, 
>> let me introduce the `<#>` syntax. This is a mechanism for writing an 
>> expression, enclosed in `<>`, which throws away its value and instead 
>> evaluates to a value within the expression prefixed by a (tightly-bound) `#` 
>> operator. So, for instance, I can write
>> 
>>     return <foo(#5)>;
>> 
>> In other words, call `foo(5)`, but deem the expression to evaluate to 5 and 
>> return that.
>> 
>> The proposed `obj.foo()#.bar()` could be written as
>> 
>>     <#obj.foo()>.bar();
>> 
>> I have no trouble imagining that this syntax could result in some more 
>> compact code, but I doubt if it would be more writable or readable. It's 
>> syntactic over-think.
>> 
>> Another criteria for accepting new syntax ideas is that they should be 
>> general and compositional. In other words, they should solve more than one 
>> problem. Solving the single problem of "take a method call on an object and 
>> fix it up so that later stuff in the expression refers to the object instead 
>> of the result of the method call" does not meet this criteria.
>> 
>> I mean, if you want to write chainable functions, then just write them that 
>> way. 
>> 
>> If you have non-chainable functions, and you want to make them 
>> chainable/cascadable, it's not a real problem to chainify a function:
>> 
>>     function chainify(fn) {
>>       return function() {
>>         void fn.apply(this, arguments);
>>         return this;
>>       };
>>     }
>> 
>>     obj.doSomethingChained = chainify(obj.doSomething);
>>     obj.doSomethingChained().doSomething2();
>> 
>> If you have a whole set of APIs you want to chainify, you could take a leaf 
>> from the `promisifyAll` paradigm, and do it all at once:
>> 
>>     chainifyAll(obj);
>> 
>> which would create methods xxxChained for all methods on the object.
>> 
>> --
>> Bob
>> 
>> _______________________________________________
>> es-discuss mailing list
>> [email protected]
>> https://mail.mozilla.org/listinfo/es-discuss
> 
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to