Had same thoughts on returning true or false as map.delete(key) would do. However, it's easy to have ambiguity there ... assuming the key can always be set, 'cause even a frozen Map should be able, and it is, to set a key internally, will true mean that key was not there ? will false mean that key was already set or we reached maximum number of keys? Shouldn't latter case be an error as it is for Array(Math.pow(2, 32) - 1).push("invalid array length"); ?
This boolean return is semantic with what delete does, less semantic with (setting[property] = value) logic thought but surely a valid possibility. Anyway, I would like to know what other TC39 members think, cause they all agreed already and i see this thread too dead and philosophical at this point ... :-/ We all have made our points but it has been decided then ... well, we should simply deal with it? br On Thu, Dec 6, 2012 at 12:14 PM, Dean Landolt <d...@deanlandolt.com> wrote: > > > > On Thu, Dec 6, 2012 at 2:41 PM, Jussi Kalliokoski < > jussi.kallioko...@gmail.com> wrote: > >> On Thu, Dec 6, 2012 at 8:44 PM, Rick Waldron <waldron.r...@gmail.com>wrote: >> >>> values() returns an iterable of the values in the array. Array, Map and >>> Set will receive all three: keys(), values(), entries(). Feel free to start >>> a new thread if you want to argue about iterator protocol. >>> >> >> Yes, I apologized for that mistake already, I remembered incorrectly. I >> don't have a want to argue, just like I'm sure you don't. >> > > > All this misses your important "pears and oranges" point. These are not > mutable APIs, which is a key distinction. The sort method would have been a > good example of a mutable API returning `this`. But it's not exactly a > model to emulate. > > > >> I'm absolutely not dodging the question, I answered this in a previous >>> message, much earlier. Cascade/monocle/mustache is not a replacement here. >>> >> >> That wasn't the question I asked. Cascade/monocle/mustache aren't even >> ready yet, and are hence in no way an indication that chaining cannot be >> made a language-side construct. I believe it can and will, and at that >> point, returning this becomes completely meaningless. But (I don't see) how >> can you fix this on the language syntax side: >> >> var obj = { >> foo: bar, >> baz: taz >> } >> set.add(obj) >> return set >> >> instead of simply: >> >> return set.add({ >> foo: bar, >> baz: taz >> }) >> >> >>>> What I mean is that the not all functions in an API can return `this` >>>> anyway (like getters), so it's inconsistent. After all, it's not a very >>>> useful API if you can just set but not get. >>>> >>> >>> That's exactly my point. The set/add API return this, allowing >>> post-mutation operations to be called: such as get or any of the examples >>> I've given throughout this thread. >>> >> >> What? I'm really sorry, but I can't understand how what I said leads to >> your point. But I bet we're both wasting our time with this part, so it's >> probably best to just leave it. >> >> >>> No one said anything about applying return this to "everything that's >>> not a getter". That was exactly what the criteria we have consensus on >>> defines. It's in the meeting notes for Nov. 29. >>> >> >> Sorry, about that, the meeting notes (in the part "Cascading this >> returns") just say: >> >> "Supporting agreement" >> "(Discussion to determine a criteria for making this API specification >> distinction)" >> "Consensus... with the criteria that these methods are not simply a set >> of uncoordinated side effects that happen to have a receiver in common, but >> a set of coordinated side effects on a specific receiver and providing >> access to the target object post-mutation." >> >> With no reference to the logic behind the conclusion ("these methods are >> not simply a set of uncoordinated side effects that happen to have a >> receiver in common"). I fail to see how .set()/.add() are a special case. >> Am I missing something? >> >> Please read everything I've written so far, it's not fair to make me >>> constantly repeat myself in this thread. >>> >> >> I agree, and I'm sorry, but I have, at least everything on this thread, >> those referred to and those that have seemed related. I'm doing my best, >> but I'm afraid I can't keep up with every thread in my inbox, and I don't >> think it's a good reason for me not to contribute at all. >> >> Of course I could've shown it as you have here, but I made examples where >>> the intention was to match the preceding examples illustrated in the gist. >>> >> >> Fair enough, but I fail to see the convenience in your examples. >> >> Why would you need to stuff everything in one line? >>>> >>> >>> As evidenced several times throughout this thread, the pattern is widely >>> implemented in the most commonly used library APIs, so I guess the answer >>> is "The kids love it". >>> >> > > But which kids? There certainly appears to be quite a sampling bias in > your survey -- I didn't see a single actual *collection* library. > Sampling their choices would be the most helpful, not *what the kids are > doing*. > > Plus there are other alternatives I haven't seen discussed, so the design > space has barely been explored. For instance buckets [1] is a nice example > of a collection library that takes an approach more reminiscent of > javascript's existing array mutation methods -- its add method returns > `true` if the item was newly created or `false` if it was already present > in the collection -- a lot like javascript's delete operator. I'm not > necessarily advocating for this, just offering up the idea that any survey > should look closer at existing collection libraries to get a better feel > for the full design space. > > [1] https://github.com/mauriciosantos/buckets > > > >> document.write() is widely implemented too, doesn't make it good or worth >> repeating. >> > > > That's a low blow :) > > > >> This way it's more version control friendly as well, since those two >>>> lines of code have actually nothing to do with each other, aside from >>>> sharing dealing with the same object. Why do you want to get all of those >>>> things from .set()/.add(), methods which have nothing to do with what >>>> you're getting at? >>>> >>> >>> You could just as easily have them on separate lines, but in cases where >>> it might be desirable to immediately operate on the result of the mutation, >>> chaining the next method call has the net appearance of a single tasks (if >>> that's how a programmer so chooses to express their program). >>> >> >> So it's taste, rather than convenience? >> > > > Is there really a difference? > > Personally I believe only immutable APIs should ever return `this`, since > there's real value there. Mutable APIs should punish you, even if only > slightly. But that's just my taste. > > _______________________________________________ > 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