Skip to content

Instantly share code, notes, and snippets.

@hoangtranson
Created May 10, 2019 10:15
Show Gist options
  • Save hoangtranson/c3710aba2887388a68e8e5873666a9ca to your computer and use it in GitHub Desktop.
Save hoangtranson/c3710aba2887388a68e8e5873666a9ca to your computer and use it in GitHub Desktop.
re-thinking switch code
function counter(state = 0, action) {
switch (action.type) {
case 'INCREMENT':
return state + 1
case 'DECREMENT':
return state - 1
default:
return state
}
}
//change to
const counter = (state = 0, action) =>
action.type === 'INCREMENT' ? state + 1
: action.type === 'DECREMENT' ? state - 1
: state
// change to
const switchcase = cases => defaultCase => key =>
cases.hasOwnProperty(key) ? cases[key] : defaultCase
const counter = (state = 0, action) =>
switchcase({
'INCREMENT': state + 1,
'DECREMENT': state -1
})(state)(action.type)
// change to
const switchcaseF = cases => defaultCase => key =>
switchcase(cases)(defaultCase)(key)()
const counter = (state = 0, action) =>
switchcaseF({
'INCREMENT': () => state + 1,
'DECREMENT': () => state -1
})(() => state)(action.type)
// change to
const executeIfFunction = f =>
f instanceof Function ? f() : f
const switchcaseF = cases => defaultCase => key =>
executeIfFunction(switchcase(cases)(defaultCase)(key))
const counter = (state = 0, action) =>
switchcaseF({
'INCREMENT': () => state + 1,
'DECREMENT': () => state -1
})(state)(action.type)
const counter = (state = 0, action) =>
switchcaseF({
'RESET': 0,
'INCREMENT': () => state + 1,
'DECREMENT': () => state -1
})(state)(action.type)
@hoangtranson
Copy link
Author

hoangtranson commented May 10, 2019

var day;
switch (new Date().getDay()) {
    case 0:
        day = "Sunday";
        break;
    case 1:
        day = "Monday";
        break;
    case 2:
        day = "Tuesday";
        break;
    case 3:
        day = "Wednesday";
        break;
    case 4:
        day = "Thursday";
        break;
    case 5:
        day = "Friday";
        break;
    case 6:
        day = "Saturday";
}

then we can use this like:

const getDay = switchcase({
    0: 'Sunday',
    1: 'Monday',
    2: 'Tuesday',
    3: 'Wednesday',
    4: 'Thursday',
    5: 'Friday',
    6: 'Saturday'
  })('Unknown')
const getCurrentDay = () =>
  getDay(new Date().getDay())
const day = getCurrentDay()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment