博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
消除switch语句以获得更好的代码结构
阅读量:6701 次
发布时间:2019-06-25

本文共 1763 字,大约阅读时间需要 5 分钟。

消除switch语句以获得更好的代码结构

  • 代码演化1:纯switch
function counter(state = 0, action) {  switch (action.type) {    case 'INCREMENT':      return state + 1    case 'DECREMENT':      return state - 1    default:      return state  }}复制代码
  • 用三元运算符代替
const counter = (state = 0, action) =>  action.type === 'INCREMENT'   ? state + 1  : action.type === 'DECREMENT' ? state - 1                                : state复制代码
  • 更换action.type ===,用对象本身的方法
function switchcase (cases, defaultCase, key) {  if (cases.hasOwnProperty(key)) {    return cases[key]  } else {    return defaultCase  }}复制代码
  • 柯里化
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)复制代码
  • 增加是否为函数检测
const action = {      type: 'INCREMENT'    }    const executeIfFunction = f =>      f instanceof Function ? f() : f    const switchcase = cases => defaultCase => key =>      cases.hasOwnProperty(key) ? cases[key] : defaultCase    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)    console.log(counter(0, action))复制代码
  • switch应用--星期天转换
const switchcase = cases => defaultCase => key =>      cases.hasOwnProperty(key) ? cases[key] : defaultCase       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()复制代码

转载地址:http://ajwlo.baihongyu.com/

你可能感兴趣的文章
phpcms使用session的方法
查看>>
对PostgreSQL数据库的hstore类型建立GisT索引的实验
查看>>
隐马尔可夫模型(七)——隐马尔可夫模型的学习问题(前向后向算法)
查看>>
Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
查看>>
常用Maven插件介绍
查看>>
Flex和Fms3打造在线聊天室(利用NetConnection对象和SharedObject对象)
查看>>
Kotlin Android学习入门
查看>>
[Oracle]跨越 DBLINK 访问表时,数据缓存在何处的Data Buffer 中?
查看>>
订单数字提醒的实现
查看>>
Cassandra概念学习系列之Cassandra是什么?
查看>>
C#模拟网站页面POST数据提交表单(二)--HttpWebRequest以及HttpWebResponse (转)
查看>>
open-falcon ---安装Dashboard时候报错"SSLError: The read operation timed out"
查看>>
FLEX程序设计--事件和事件机制--键盘事件
查看>>
【重构笔记04】重新组织数据(2)
查看>>
在VC中如何才能得到当前屏幕的分辨率
查看>>
一个Linux脚本搞定常用软件的安装
查看>>
[LeetCode] Linked List Random Node 链表随机节点
查看>>
数据仓库专题(15)-数据仓库建设基本原则-实践篇(求补充)
查看>>
关于IoT网络的一些特征的探讨
查看>>
tkinter的GUI设计:界面与逻辑分离(一)-- 初次见面
查看>>