hi nicolo, reading-up https://github.com/rbuckton/proposal-enum 
<https://github.com/rbuckton/proposal-enum>, i'm guessing this would be the 
enum-solution to doug's name-collision problem?

```js
/*
 * enum-solution with action = { type: Actions.LOADING_SPINNER, ... }
 */
enum Actions {
    LOADING_SPINNER,
    LOADING_SEARCH_RESULT
}
...
switch (action.type) {
case Actions.LOADING_SPINNER:
    ...
    break;
case Actions.LOADING_SEARCH_RESULT:
    ...
    break;
}
```

the above may look nice and familiar to backend-java-developers, but for 
javascript-frontend-developers trying to manage integration-level complexity, 
it looks like needless extra-overhead when simpler, throwaway glue-code would 
likely suffice:

```js
/*
 * plain-string solution with action = { type: 'LOADING_SPINNER', … }
 */
switch (action.type) {
case 'LOADING_SPINNER':
    ...
    break;
case 'LOADING_SEARCH_RESULT':
    ...
    break;
}
```

kai zhu
kaizhu...@gmail.com



> On 11 Jun 2018, at 3:50 AM, Nicolò Ribaudo <nicolo.riba...@gmail.com> wrote:
> 
> Have you seen https://github.com/rbuckton/proposal-enum 
> <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 <kaizhu...@gmail.com 
> <mailto:kaizhu...@gmail.com>> 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 
> <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 <mailto:kaizhu...@gmail.com>
> 
> 
> 
>> On 10 Jun 2018, at 11:26 AM, Michael J. Ryan <track...@gmail.com 
>> <mailto:track...@gmail.com>> wrote:
>> 
>> Just use symbols for your action type
>> 
>> On Sat, Jun 9, 2018, 14:21 Doug Wade <douglas.b.w...@gmail.com 
>> <mailto:douglas.b.w...@gmail.com>> wrote:
>> Hello friends!
>> 
>> I had a bug the other day on my team.  We use redux <https://redux.js.org/> 
>> to manage the state on our application <https://resumes.indeed.com/>, 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 
>> <https://en.wikipedia.org/wiki/Enumerated_type> 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 
>> <https://esdiscuss.org/topic/enums> topic, and it seems like the discussion 
>> has been broadly in favor of it.  I also noted that enum is a reserved 
>> keyword 
>> <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Keywords>,
>>  which indicates some intention to add enums to the language.
>> 
>> As such, I've spent some time working on a proposal 
>> <https://github.com/doug-wade/proposal-enum-definitions> for adding enums to 
>> ECMAScript.  It is very heavily based on the work by rauschma 
>> <https://github.com/rauschma/enums/blob/master/enums.js>, stevekinney 
>> <https://github.com/stevekinney/ecmascript-enumerations> and rwaldron 
>> <https://github.com/rwaldron/proposal-enum-definitions>.  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 
>> <https://github.com/doug-wade/babel/tree/babel-plugin-proposal-enum> that 
>> uses a polyfill <https://github.com/doug-wade/enum-polyfill> against which 
>> I've written a small test suite 
>> <https://github.com/doug-wade/enum-unit-tests> (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 <mailto:es-discuss@mozilla.org>
>> https://mail.mozilla.org/listinfo/es-discuss 
>> <https://mail.mozilla.org/listinfo/es-discuss>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss@mozilla.org <mailto:es-discuss@mozilla.org>
>> https://mail.mozilla.org/listinfo/es-discuss 
>> <https://mail.mozilla.org/listinfo/es-discuss>
> 
> _______________________________________________
> es-discuss mailing list
> es-discuss@mozilla.org <mailto:es-discuss@mozilla.org>
> https://mail.mozilla.org/listinfo/es-discuss 
> <https://mail.mozilla.org/listinfo/es-discuss>

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

Reply via email to