Looking for Champion: Null Coalescing (??) and Null Conditional Member Access (?.) operators

Ahmad Bamieh ahmadbamieh at gmail.com
Wed Dec 20 08:44:22 UTC 2017


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>


More information about the es-discuss mailing list