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
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to