@Caitlin yea that's correct, but you didn't compare what I had typed out:

`foo()#` returns `undefined`

`foo.bar.call(baz)#` returns `foo` (correct?)

`baz.quux = foo.bind(bar)` returns `baz` (correct?)

@Erik

but what happens when a method returns a Number

`5..toString();` // works in ES5 because the first `.` is for the decimal

On Mon, Oct 26, 2015 at 6:16 PM, Caitlin Potter <caitpotte...@gmail.com>
wrote:

>
> 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 <eor...@gmail.com> 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 <r...@gol.com> 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
>> es-discuss@mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>>
> _______________________________________________
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to