4 ms·
I find the linked post about two new features in Node.js 14[0] much more interesting: > Optional Chaining operator (?.) > Nullish Coalescing operator (??) Es
by Legogris 6y ago
I find the linked post about two new features in Node.js 14[0] much more interesting:
> Optional Chaining operator (?.)
> Nullish Coalescing operator (??)
Esp chaining can have a huge impact on readability.
[0]: https://www.monkwhocode.com/2020/05/nodejs-v14-2-things-to-know.html https://www.monkwhocode.com/2020/05/nodejs-v14-2-things-to-k...
- eyesee 6y agoOptional chaining is also now supported in JS itself, with growing browser support: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
- y-c-o-m-b 6y agoWell now I feel stupid. I was irritated just yesterday at not having this feature available in JavaScript. I should have done a search. Looks like there's a babel plugin too: https://babeljs.io/docs/en/next/babel-plugin-proposal-optional-chaining https://babeljs.io/docs/en/next/babel-plugin-proposal-option...
- leetrout 6y agoAnd JavaScript slowly becomes typescript. Hooray!
- SketchySeaBeast 6y agoI'm honestly hoping to see someone respond to you with why that would be a bad thing. Given my experience with TypeScript and how it makes my life easier, I can't see why anyone would have issue with it, but I know it must exist.
- thomasrognon 6y agoTypeScript is following JavaScript, not the other way around. Generally, ECMAScript proposals get added to TypeScript when they hit stage 3. Optional chaining and nullish coalescing were added to V8/Chrome and TypeScript around the same time.
- brlewis 6y agoYes, TypeScript adds features from the ECMAScript standard. Sometimes JS implementations add them around the same time TypeScript adds them. But sometimes TS adds them much earlier. Having been using TS, it surprised me in this article that nodejs didn't add numeric separators until recently. I had to check MDN to make sure it was right. TS, with or without Babel, keeps me from having to know what features are supported where. I used to frequently check MDN and caniuse.com out of necessity. Now I check infrequently out of curiosity.
- agustif 6y agoOh I've been using this on TS without knowing it had a name. TIL
- mattlondon 6y agoNot just in node.js but browsers too Basic examples for null coalescing here https://byexample.xyz/javascript/ECMAScript2020/nullCoalescing/ https://byexample.xyz/javascript/ECMAScript2020/nullCoalesci...
- throw1234651234 6y agoThis has been in other languages (C#, Java) for ages.
- thiht 6y agoGood for them!
- wdb 6y agoI keep thinking that the optional chaining operator would also work for functions e.g. this.myOptionalfunction?('hello') were I would expect it would only get called when it's defined. But that's not possible, I think they missed a nice addition. Oh looks like the operator is actually '?.' instead of just '?' so guess this.myOptionalFunction?.() could work but that looks really confusing in my eyes.
- Legogris 6y agoI am trying to think of a scenario where this makes sense, but I'm struggling. When do you want to call a function that might exist, and if so, not care about if it exists or not? (Since null or undefined returned from the function call can't be distinguished from the non-presence of the function)
- jlokier 6y agoIt has to be '?.(...)' not '?(...)', because '?(...)' is already part of valid syntax. For example "this.myOptionalfunction?('hello'):('goodbye')".
- filoeleven 6y agoThis has been in Clojurescript since its inception back in 2011 or so, and the two new operators are handled by the same function: (get-in obj [key1 “key 2” (make-key obj 3) 4] “not-found”) There is also a simpler version for single-level access with (get obj key not-found). “not-found” can be a value or a function or a function evaluation, and the keys can be of any type, including nested maps or, if you wanna get really wild, functions. Someday I’ll get to use this professionally instead of transpiling piles of NPM dependencies into something IE11 can work with...
- filoeleven 6y agoReplying to my own comment to keep this properly namespaced: Both of the new additions to JS specified in the article can be sort of done in cljs, though each one will be a function. This already fits with the existing paradigm; there are no operators in Clojure, only functions. “2 + 3” in JS is already “(+ 2 3)” in CLJS. The Math.pow() vs “two stars operator” is kinda pointless: it can be reduced to (pow x y) with a require statement. Is that really used often enough to warrant new syntax? Here’s how big numbers can be separated by space though. It does not handle overflows; I don’t think the JS version does either: (defn bignum [& xs] (js/parseInt (apply str xs))) (bignum 123 456 789) ;; yields 123456789 as a JS int There’s an efficiency argument to be made here, in that a JS parser can do this with less overhead. But if you have that many unreadable big numbers written in your codebase, I think you have bigger problems.