Flow control hacks
Hi. Through out my javascript hacking I see little awful patterns. Here are some of them.
switch (trafficLight) {
case 'red':
stop();
break;
case 'yellow':
finishIfInProgressOrWait();
break;
case 'green':
go();
break;
default:
throw new Error('color unknown');
}⬆️ could be rewritten as ⬇️
var strategies = {
red: stop,
yellow: finishIfInProgressOrWait,
green: go
}, handleInvalidColor = function () {
throw new Error('color unknown');
}, strategy = strategies[trafficLight] || handleInvalidColor;
strategy();⬆️ there we have another one, and ⬇ something often used for default values ️
strategy = strategies[light] || valueInCaseTheOtherIsFalsyLikeUndefined;similarly to ⬆️ we can also do falsy checks ⬇️
maybeDoStuff && maybeDoStuff();unlike ⬆️, ⬇️ works only for undefined
[valueOrUndefined].map(doStuff);⬇️ last one
function either (f) {
return {
or: function (defaultValue) {
try {
var value = f();
if (value !== undefined) {
return value;
} else {
return defaultValue;
}
} catch (error){
return defaultValue;
}
}
};
}