2016/10/01

How to easily avoid switch-case statement with function mapping in JavaScript

I won't advertise why it's good to avoid switch-case. While this matter might still be an open dispute I think there are usually better ways to implement what a switch-case does.

My vote would go for polymorphism, unfortunately much JavaScript code out there is not written following good OOP principles. So if you just need to work with given code base but not making a revolution there is a neat way to go:
const actions = {
    value1: actionX,
    value2: actionY,
    value3: actionZ
};

actions[value]();
Where action X, Y, Z are functions.

Of course it's good to add some check for undefined value, like:
actions[value] && actions[value]();

Or an error might be thrown if no mapping found as follows:
const action = actions[value]
        ? actions[value]
        : (value) => throw new Error('No action mapped for value: ' + value);

action(value);
Well, that's it. I believe it helps to reduce clutter in code if you compare it to something like:
switch (value) {
    case 'value1':
        actionX();
        break;
    case 'value2':
        actionY();
        break;
    case 'value3':
        actionZ();
        break;
    default: throw new Error('No action mapped for value: ' + value)
}

Exactly the same can be done in Groovy, Java and other languages if you are not up for polymorphism on a given case. Although for some languages with no functional paradigm, like Java before version 8, you may need to create some sort of Action class definition.

3 comments:

  1. If you make the primary deposit using fiat cash, you will get a welcome package deal of a lot as} $2,000. To make it easier for players to get began, 토토사이트 we certain that|be certain that|ensure that} the registration process is easy and fast. Players ought to deposit $20 or 0.001 BTC to say Bitstarz’s initial welcome match. Notably, you’ll need to deposit 0.002 BTC for every crypto reload bonus offered by the platform. You can fund your account and claim bonuses with Bitcoin, Bitcoin Cash, Litecoin, Ethereum, DOGE, and a pair extra digital coins.

    ReplyDelete