3 ms·
I am all for clean syntax but I feel like JS has already reached a nice middle ground between expressiveness (especially w/ map/reduce/filter) and readability.
by accrual 1y ago
I am all for clean syntax but I feel like JS has already reached a nice middle ground between expressiveness (especially w/ map/reduce/filter) and readability. I'd personally rather not have another syntax that everyone will have to learn unless we're already moving to a new language.
- nonethewiser 1y agoI agree but to steelman it, what about custom functions? I think just doing it naively is perfectly fine. Or if you want use some pipe utility. Or wrap the array, string, etc. with your own custom methods.
- IshKebab 1y agoI think JS's map/reduce/filter design is one of the worst ones out there actually - map has footguns with its extra arguments and everything gets converted to an array at the drop of a hat. Still, pipeline syntax probably won't help fix any of that.
- eyelidlessness 1y ago> everything gets converted to an array at the drop of a hat Can you name an example? IME the opposite is a more common complaint: needing to explicitly convert values to arrays from many common APIs which return eg iterables/iterators.
- IshKebab 1y ago`map` returns an array and can only be called on an array.
- eyelidlessness 1y agoRight, but I’m not clear on what gets converted to an array. Do you mean more or less what I said in my previous comment? That it requires you (your code, or calling code in general) to perform that conversion excessively?
- recursive 1y agoPeople write a lot of stuff like [...iterable].map(fn). They do it so much it's as if they do it each time a hat drops.
- eyelidlessness 1y agoThank you for clarifying. (I think?) I think what confused me is the passive language: "everything gets converted" sounds (to me) like the runtime or some aspect of language semantics is converting everything, rather than developers. Whereas this is the same complaint I mentioned.
- Timwi 1y agoOne gripe I have is that the result of map/filter is always an array. As a result, doing `foo.map(...).filter(...).slice(0, 3)` will run the map and the filter on the entire array even if it has hundreds of entries and I only need the first 10 to find the 3 that match the filter.
- thdhhghgbhy 1y agoI always thought JS map filter reduce felt quite nice, especially playing around with data in the REPL. Java maps with all the conversions back and forth to streams are clumsy.
- Timwi 1y agoWell in JS you have to convert to arrays instead. You can't do `document.querySelectorAll(...).map(...)`.
- thdhhghgbhy 1y agoThat's the DOM API, it's not part of the language! They had reasons for querySelectorAll not returning an array.