Re: Adding support for enums

2018-06-10 Thread kai zhu
>  In Redux, there are actions, which are strings, that get passed to a 
> reducer, which mutates the states.  My coworker and I inadvertently added the 
> same action name, "LOADING" on the same page, but in two different files.  
> This led to a bug when both my modal and his search results would be loading 
> at the same time, but since they were never both visible, we didn't catch the 
> bug.

can you explain in code how either enum or symbols could solve your problem?  
reading up on how reducers work @ 
https://redux.js.org/basics/reducers#handling-more-actions 
, i'm guessing the 
problematic code looks like the following.

```js
// module spinner.js
var action = {
type: 'LOADING',
...
};

// module search.js
var action = {
type: 'LOADING',
...
};

// module main.js
switch (action.type) {
case 'LOADING':
// inadverdently run both
// spinner-loading and
// search-result-loading actions
...
break;
}
```

its not obvious to me how enums/symbols could be use in a less-complicated 
solution, than simply renaming action.type in your case with more descriptive 
names that won’t collide (e.g. 'LOADING_SPINNER', ‘LOADING_SEARCH_RESULT').

kai zhu
kaizhu...@gmail.com



> On 10 Jun 2018, at 11:26 AM, Michael J. Ryan  wrote:
> 
> Just use symbols for your action type
> 
> On Sat, Jun 9, 2018, 14:21 Doug Wade  > wrote:
> Hello friends!
> 
> I had a bug the other day on my team.  We use redux  
> to manage the state on our application , which 
> is maintained by a large team.  In Redux, there are actions, which are 
> strings, that get passed to a reducer, which mutates the states.  My coworker 
> and I inadvertently added the same action name, "LOADING" on the same page, 
> but in two different files.  This led to a bug when both my modal and his 
> search results would be loading at the same time, but since they were never 
> both visible, we didn't catch the bug.  My coworker refactored his feature, 
> and broke my feature, such that rather than displaying a spinner, we went 
> straight to an empty results page, even when there were results.
> 
> In other languages, like the language I use most at work, Java, we would 
> instead use a language construct called an enum 
>  in this situation so that the 
> two different sets of actions weren't equal to each other.  I did some 
> research into some previous discussions on this 
>  topic, and it seems like the discussion 
> has been broadly in favor of it.  I also noted that enum is a reserved 
> keyword 
> ,
>  which indicates some intention to add enums to the language.
> 
> As such, I've spent some time working on a proposal 
>  for adding enums to 
> ECMAScript.  It is very heavily based on the work by rauschma 
> , stevekinney 
>  and rwaldron 
> .  I wasn't sure if I 
> was using all the right words when writing the proposal, so to help express 
> myself better, I also spent some time writing a babel plugin 
>  that 
> uses a polyfill  against which 
> I've written a small test suite 
>  (if you would like to run 
> them, you'll need to link the polyfill and the babel plugin into the tests).  
> Please do not take these as any indication of "done-ness", I wrote them to 
> understand how I would expect an enum in javascript to behave, and am willing 
> and eager to make changes as I get suggestions.  I do, however, feel I have 
> done as much as I can on my own, and would like help in considering the 
> proposal, especially whether it contains any footguns, undefined behavior, or 
> things that would be surprising to newer developers, and helping me identify 
> what work is to be done to make this a "real" proposal.
> 
> All the best,
> Doug Wade
> 
> ___
> es-discuss mailing list
> es-discuss@mozilla.org 
> https://mail.mozilla.org/listinfo/es-discuss 
> 
> ___
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss

___
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss


Re: Adding support for enums

2018-06-10 Thread Nicolò Ribaudo
Have you seen https://github.com/rbuckton/proposal-enum? The champion is a
TypeScript member, so he already had experienc with enums.

On Sun, Jun 10, 2018 at 5:44 PM kai zhu  wrote:

>  In Redux, there are actions, which are strings, that get passed to a
> reducer, which mutates the states.  My coworker and I inadvertently added
> the same action name, "LOADING" on the same page, but in two different
> files.  This led to a bug when both my modal and his search results would
> be loading at the same time, but since they were never both visible, we
> didn't catch the bug.
>
>
> can you explain in code how either enum or symbols could solve your
> problem?  reading up on how reducers work @
> https://redux.js.org/basics/reducers#handling-more-actions, i'm guessing
> the problematic code looks like the following.
>
> ```js
> // module spinner.js
> var action = {
> type: 'LOADING',
> ...
> };
>
> // module search.js
> var action = {
> type: 'LOADING',
> ...
> };
>
> // module main.js
> switch (action.type) {
> case 'LOADING':
> // inadverdently run both
> // spinner-loading and
> // search-result-loading actions
> ...
> break;
> }
> ```
>
> its not obvious to me how enums/symbols could be use in a less-complicated
> solution, than simply renaming action.type in your case with more
> descriptive names that won’t collide (e.g. 'LOADING_SPINNER',
> ‘LOADING_SEARCH_RESULT').
>
> kai zhu
> kaizhu...@gmail.com
>
>
>
> On 10 Jun 2018, at 11:26 AM, Michael J. Ryan  wrote:
>
> Just use symbols for your action type
>
> On Sat, Jun 9, 2018, 14:21 Doug Wade  wrote:
>
>> Hello friends!
>>
>> I had a bug the other day on my team.  We use redux
>>  to manage the state on our application
>> , which is maintained by a large team.  In
>> Redux, there are actions, which are strings, that get passed to a reducer,
>> which mutates the states.  My coworker and I inadvertently added the same
>> action name, "LOADING" on the same page, but in two different files.  This
>> led to a bug when both my modal and his search results would be loading at
>> the same time, but since they were never both visible, we didn't catch the
>> bug.  My coworker refactored his feature, and broke my feature, such that
>> rather than displaying a spinner, we went straight to an empty results
>> page, even when there were results.
>>
>> In other languages, like the language I use most at work, Java, we would
>> instead use a language construct called an enum
>>  in this situation so
>> that the two different sets of actions weren't equal to each other.  I did
>> some research into some previous discussions on this
>>  topic, and it seems like the
>> discussion has been broadly in favor of it. I also noted that enum is a 
>> reserved
>> keyword
>> ,
>> which indicates some intention to add enums to the language.
>>
>> As such, I've spent some time working on a proposal
>>  for adding
>> enums to ECMAScript. It is very heavily based on the work by rauschma
>> , stevekinney
>>  and rwaldron
>> . I wasn't sure
>> if I was using all the right words when writing the proposal, so to help
>> express myself better, I also spent some time writing a babel plugin
>> 
>> that uses a polyfill 
>> against which I've written a small test suite
>>  (if you would like to run
>> them, you'll need to link the polyfill and the babel plugin into the
>> tests). Please do not take these as any indication of "done-ness", I wrote
>> them to understand how I would expect an enum in javascript to behave, and
>> am willing and eager to make changes as I get suggestions. I do, however,
>> feel I have done as much as I can on my own, and would like help in
>> considering the proposal, especially whether it contains any footguns,
>> undefined behavior, or things that would be surprising to newer developers,
>> and helping me identify what work is to be done to make this a "real"
>> proposal.
>>
>> All the best,
>> Doug Wade
>>
>> ___
>> es-discuss mailing list
>> es-discuss@mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
> ___
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
> ___
> es-discuss mailing list
> es-discuss@mozilla.org
>