[Proposal] Optional spreading

Beknar Askarov beknaraskarov at gmail.com
Fri Aug 23 02:42:42 UTC 2019


Indeed. I see your point.

But it really needs to be falsy check.
Since falsy values are not "spreadable"



On Fri, 23 Aug 2019, 03:52 Scott Rudiger, <scottrudiger at gmail.com> wrote:

> I like it; code seems cleaner to me with its use. However, since the
> syntax is so similar to optional chaining, it's too bad your goal with this
> sample is to check for falsey values rather than nullish values.
>
> [ 1, ?...(condition && [2, 3]), // no extras:) 3, ]
>
> On Thu, Aug 22, 2019, 6:01 PM Beknar Askarov <beknaraskarov at gmail.com>
> wrote:
>
>> Problem
>>
>> Spreading is great! It contributes towards "declerativity" of the
>> language and reduces verbosity. I see one more feature to add to improve it.
>>
>> Consider following
>>
>> [
>>   1,
>>   condition && 2,
>>   condition && 3,
>>   4,
>> ].filter(Boolean) // filtering needed to remove falsy values
>> // Results in
>> [1, 2, 3, 4] // if condition is `truthy`// and
>> [1, 4] // if not truthy.
>>
>> Another way to achieve the same result without the need of filtering after
>>
>> [
>>   1,
>>    ...(condition ? [2, 3] : []), // note extra [] in the end, to avoid errors
>>   4,
>> ]
>>
>> Similar pattern with objects
>>
>> {
>>   ...(condition ? { foo: 'bar' } : {}), // extra {}
>> }
>>
>> Another pattern is when condition is the object itself, when it is known
>> that type is one or falsy
>>
>> [
>>   item1,
>>   item2,
>>   ...(itemsOrNull || []) // extra []
>> ]
>>
>> Similar for objects
>>
>> {
>>   ...(obj || {}), // extra {}
>> }
>>
>> I see these patterns appearing very often. And these are cleanest
>> examples I have seen so far.
>> ProposalOptional spreadingWith condition
>>
>> // Arrays
>> [
>>   1,
>>   ?...(condition && [2, 3]), // no extras:)
>>   3,
>> ]// Objects
>> {
>>   ?...(condition && { foo: 'bar' }) // no extras:)
>> }
>>
>> When condition is the object
>>
>> [
>>   item1,
>>   item2,
>>   ?...itemsOrNull // no extras at all:) even (...)
>> ]
>>
>> These look nicer and can be good for performance since (?...), since no
>> cleanup is needed after to remove falsy values or extra spreading even when
>> it is not needed.
>>
>> Looks intuitive (since:
>> https://github.com/tc39/proposal-optional-chaining)
>> Plays nice with typeings.
>>
>> What do you think? https://es.discourse.group/t/optional-spreading/93
>> _______________________________________________
>> 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/20190823/70ac19d7/attachment-0001.html>


More information about the es-discuss mailing list