Looking for Champion: Null Coalescing (??) and Null Conditional Member Access (?.) operators
# Claude Pache (7 years ago)
There are already official proposals for those. See:
tc39/proposals, tc39/proposals
and search for “Nullish coalescing Operator” for the first of your suggestions and “Optional Chaining” for the second one.
There are already official proposals for those. See: https://github.com/tc39/proposals <https://github.com/tc39/proposals> and search for “Nullish coalescing Operator” for the first of your suggestions and “Optional Chaining” for the second one. —Claude > Le 20 déc. 2017 à 09:03, Arash Motamedi <arash.motamedi at gmail.com> a écrit : > > I’d like to propose two new operators that I’ve appreciated using in C#, with appropriate modifications for Ecmascript. > > ?? Null-Coalescing Operator > > The ?? operator is called the null-coalescing operator. It returns the left-hand operand if the operand is not null or undefined; otherwise it returns the right hand operand. (modified excerpt from C# definition, here <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operator>.) > > Examples: > > let u = undefined; > let nu = u ?? 0; > // nu = (u !== undefined && u !== null) ? u : 0 > > let n = null; > let nn = n ?? "Default"; > // nn = (n !== undefined && n !== null) ? n : "Default"; > > let p = someObj.someProp ?? "Hello"; > // p = (someObj.someProp !== undefined && someObj.someProp !== null) ? someObj.someProp : "Hello"; > > The ?? operator allows for a very terse syntactic representation of a rather common statement, and its value becomes very clear when evaluating and accessing properties on objects, as illustrated in the 3rd example above. For credit, comparison, and further details, please review the C# null coalescing operator information here <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operator>. > > > ?. Null Conditional Member Access and ?[ Null Conditional Index Access > > Used to test for null or undefined before performing a member access (?.) or index (?[) operation. (modified excerpt from C# definition here <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators>.) > > Examples: > > let n = null; > let nn = n?.name; > // nn = (n.name <http://n.name/> !== null && u.name <http://u.name/> !== undefined) ? u.name <http://u.name/> : u.name <http://u.name/>; > > let p = {name: "John"}; > let l = p.lastName?.length; > // l = (u.lastName !== null && u.lastName !== undefined) ? u.lastName.length : u.lastName; > > The ?. and ?[ operators allow for graceful access (as opposed to null/undefined reference errors) to object members, and are particularly useful when used in a chained manner. For credit, comparison, and further details, please review the C# null conditional member access operator information here <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators>. > > > Combining the above operators can enable very concise syntax for checking against null/undefined and providing default values in a graceful manner. > > let lastNameLength = person.lastName?.length ?? 0; > let cityToUppercase = person.address?.city?.toUpperCase() ?? "N/A"; > > > Looking forward to working with the community and hopefully bringing these two operators to the language. > > Best, > Arash > > _______________________________________________ > es-discuss mailing list > es-discuss at mozilla.org > https://mail.mozilla.org/listinfo/es-discuss -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20171220/f4eb1706/attachment-0001.html>
# Arash Motamedi (7 years ago)
Excellent! Thanks so much for the pointers. These will be great syntactic improvements.
Excellent! Thanks so much for the pointers. These will be great syntactic improvements. Cheers, Arash On Wed, Dec 20, 2017 at 12:12 AM, Claude Pache <claude.pache at gmail.com> wrote: > There are already official proposals for those. See: > > https://github.com/tc39/proposals > > and search for “Nullish coalescing Operator” for the first of your > suggestions and “Optional Chaining” for the second one. > > —Claude > > > > Le 20 déc. 2017 à 09:03, Arash Motamedi <arash.motamedi at gmail.com> a > écrit : > > I’d like to propose two new operators that I’ve appreciated using in C#, > with appropriate modifications for Ecmascript. > > ?? Null-Coalescing Operator > > The ?? operator is called the null-coalescing operator. It returns the >> left-hand operand if the operand is not null or undefined; otherwise it >> returns the right hand operand. (modified excerpt from C# definition, >> here >> <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operator> >> .) > > > Examples: > > let u = undefined; > let nu = u ?? 0; > // nu = (u !== undefined && u !== null) ? u : 0 > > let n = null; > let nn = n ?? "Default"; > // nn = (n !== undefined && n !== null) ? n : "Default"; > > let p = someObj.someProp ?? "Hello"; > // p = (someObj.someProp !== undefined && someObj.someProp !== null) ? > someObj.someProp : "Hello"; > > The ?? operator allows for a very terse syntactic representation of a > rather common statement, and its value becomes very clear when evaluating > and accessing properties on objects, as illustrated in the 3rd example > above. For credit, comparison, and further details, please review the C# > null coalescing operator information here > <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operator> > . > > > ?. Null Conditional Member Access and ?[ Null Conditional Index Access > > Used to test for null or undefined before performing a member access (?.) >> or index (?[) operation. (modified excerpt from C# definition here >> <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators> >> .) > > > Examples: > > let n = null; > let nn = n?.name; > // nn = (n.name !== null && u.name !== undefined) ? u.name : u.name; > > let p = {name: "John"}; > let l = p.lastName?.length; > // l = (u.lastName !== null && u.lastName !== undefined) ? > u.lastName.length : u.lastName; > > The ?. and ?[ operators allow for graceful access (as opposed to > null/undefined reference errors) to object members, and are particularly > useful when used in a chained manner. For credit, comparison, and further > details, please review the C# null conditional member access operator > information here > <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators> > . > > > Combining the above operators can enable very concise syntax for checking > against null/undefined and providing default values in a graceful manner. > > let lastNameLength = person.lastName?.length ?? 0; > let cityToUppercase = person.address?.city?.toUpperCase() ?? "N/A"; > > > Looking forward to working with the community and hopefully bringing these > two operators to the language. > > Best, > Arash > > _______________________________________________ > es-discuss mailing list > es-discuss at mozilla.org > https://mail.mozilla.org/listinfo/es-discuss > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20171220/f7d11073/attachment.html>
# Ahmad Bamieh (7 years ago)
Thank you for this detailed write up! I believe you can help in the existing proposals!
Cheers! Ahmad Bamieh,
Thank you for this detailed write up! I believe you can help in the existing proposals! Cheers! Ahmad Bamieh, On Wed, Dec 20, 2017 at 10:18 AM, Arash Motamedi <arash.motamedi at gmail.com> wrote: > Excellent! Thanks so much for the pointers. These will be great syntactic > improvements. > > Cheers, > Arash > > On Wed, Dec 20, 2017 at 12:12 AM, Claude Pache <claude.pache at gmail.com> > wrote: > >> There are already official proposals for those. See: >> >> https://github.com/tc39/proposals >> >> and search for “Nullish coalescing Operator” for the first of your >> suggestions and “Optional Chaining” for the second one. >> >> —Claude >> >> >> >> Le 20 déc. 2017 à 09:03, Arash Motamedi <arash.motamedi at gmail.com> a >> écrit : >> >> I’d like to propose two new operators that I’ve appreciated using in C#, >> with appropriate modifications for Ecmascript. >> >> ?? Null-Coalescing Operator >> >> The ?? operator is called the null-coalescing operator. It returns the >>> left-hand operand if the operand is not null or undefined; otherwise it >>> returns the right hand operand. (modified excerpt from C# definition, >>> here >>> <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operator> >>> .) >> >> >> Examples: >> >> let u = undefined; >> let nu = u ?? 0; >> // nu = (u !== undefined && u !== null) ? u : 0 >> >> let n = null; >> let nn = n ?? "Default"; >> // nn = (n !== undefined && n !== null) ? n : "Default"; >> >> let p = someObj.someProp ?? "Hello"; >> // p = (someObj.someProp !== undefined && someObj.someProp !== null) ? >> someObj.someProp : "Hello"; >> >> The ?? operator allows for a very terse syntactic representation of a >> rather common statement, and its value becomes very clear when evaluating >> and accessing properties on objects, as illustrated in the 3rd example >> above. For credit, comparison, and further details, please review the C# >> null coalescing operator information here >> <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operator> >> . >> >> >> ?. Null Conditional Member Access and ?[ Null Conditional Index Access >> >> Used to test for null or undefined before performing a member access (?.) >>> or index (?[) operation. (modified excerpt from C# definition here >>> <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators> >>> .) >> >> >> Examples: >> >> let n = null; >> let nn = n?.name; >> // nn = (n.name !== null && u.name !== undefined) ? u.name : u.name; >> >> let p = {name: "John"}; >> let l = p.lastName?.length; >> // l = (u.lastName !== null && u.lastName !== undefined) ? >> u.lastName.length : u.lastName; >> >> The ?. and ?[ operators allow for graceful access (as opposed to >> null/undefined reference errors) to object members, and are particularly >> useful when used in a chained manner. For credit, comparison, and further >> details, please review the C# null conditional member access operator >> information here >> <https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators> >> . >> >> >> Combining the above operators can enable very concise syntax for checking >> against null/undefined and providing default values in a graceful manner. >> >> let lastNameLength = person.lastName?.length ?? 0; >> let cityToUppercase = person.address?.city?.toUpperCase() ?? "N/A"; >> >> >> Looking forward to working with the community and hopefully bringing >> these two operators to the language. >> >> Best, >> Arash >> >> _______________________________________________ >> es-discuss mailing list >> es-discuss at mozilla.org >> https://mail.mozilla.org/listinfo/es-discuss >> >> >> > > _______________________________________________ > es-discuss mailing list > es-discuss at mozilla.org > https://mail.mozilla.org/listinfo/es-discuss > > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20171220/ac4e3e37/attachment-0001.html>
I’d like to propose two new operators that I’ve appreciated using in C#, with appropriate modifications for Ecmascript.
?? Null-Coalescing Operator
The ?? operator is called the null-coalescing operator. It returns the
Examples:
let u = undefined; let nu = u ?? 0; // nu = (u !== undefined && u !== null) ? u : 0
let n = null; let nn = n ?? "Default"; // nn = (n !== undefined && n !== null) ? n : "Default";
let p = someObj.someProp ?? "Hello"; // p = (someObj.someProp !== undefined && someObj.someProp !== null) ? someObj.someProp : "Hello";
The ?? operator allows for a very terse syntactic representation of a rather common statement, and its value becomes very clear when evaluating and accessing properties on objects, as illustrated in the 3rd example above. For credit, comparison, and further details, please review the C# null coalescing operator information here docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operator .
?. Null Conditional Member Access and ?[ Null Conditional Index Access
Used to test for null or undefined before performing a member access (?.)
Examples:
let n = null; let nn = n?.name; // nn = (n.name !== null && u.name !== undefined) ? u.name : u.name;
let p = {name: "John"}; let l = p.lastName?.length; // l = (u.lastName !== null && u.lastName !== undefined) ? u.lastName.length : u.lastName;
The ?. and ?[ operators allow for graceful access (as opposed to null/undefined reference errors) to object members, and are particularly useful when used in a chained manner. For credit, comparison, and further details, please review the C# null conditional member access operator information here docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-conditional-operators .
Combining the above operators can enable very concise syntax for checking against null/undefined and providing default values in a graceful manner.
let lastNameLength = person.lastName?.length ?? 0; let cityToUppercase = person.address?.city?.toUpperCase() ?? "N/A";
Looking forward to working with the community and hopefully bringing these two operators to the language.
Best, Arash