写点什么

你知道这五种好用的编程模式吗?

  • 2019-07-18
  • 本文字数:2135 字

    阅读完需:约 7 分钟

你知道这五种好用的编程模式吗?

这篇文章中介绍了一些我在编程时使用的模式。有些模式是基于我最近在工作时所做的观察,还有一些是我这些年来从同事那里偷来的。


下面的顺序不分先后,只是一个简单的汇总。

早退

function transformData(rawData) {  // check if no data  if (!rawData) {    return [];  }
// check for specific case if (rawData.length == 1) { return []; }
// actual function code goes here return rawData.map((item) => item);}
复制代码


我将这种模式称为“早退”,但有些人也将它称为“保镖模式”或“保护条款”。除了命名之外,该模式的方法是首先检查无效用例并从该函数返回,否则继续到预期用例并执行函数。


我认为这种方法有一些优点,我很喜欢:


  • 鼓励开发者考虑无效/边缘情况,以及处理这些情况的对策。

  • 避免对意外用例做不必要的代码处理。

  • 让开发者对每个用例的处理更加胸有成竹。

  • 使用这种模式,开发者可以快速浏览功能并了解流程和执行情况,这通常遵循自上而下的模式——无效情况 - >小案例 - >预期案例


更多信息:Rik Schennink 的“保镖模式”:http://rikschennink.nl/thoughts/the-bouncer-pattern/

改用对象字面量

// Switchlet createType = null;switch (contentType) {  case "post":    createType = () => console.log("creating a post...");    break;  case "video":    createType = () => console.log("creating a video...");    break;  default:    createType = () => console.log('unrecognized content type');}
createType();
// Object literalconst contentTypes = { post: () => console.log("creating a post..."), video: () => console.log("creatinga video..."), default: () => console.log('unrecognized content type')};
const createType = contentTypes[contentType] || contentTypes['default'];createType();
复制代码


接下来是摆脱 switch 语句。我经常在写各个 case 时犯错,而且常常会忘记 break。这会导致许多有趣的问题。在编写代码时,switch 语句的用途没那么大,而且有些碍事。


我更喜欢使用对象字面量,原因在于:


  • 不必担心 case 或 break。

  • 代码更容易阅读,可以快速了解正在发生的事情。

  • 对象字面量很容易编写。

  • 代码更简洁。


更多信息:


一次循环两个数组

const exampleValues = [2, 15, 8, 23, 1, 32];const [truthyValues, falseyValues] = exampleValues.reduce((arrays, exampleValue) => {  if (exampleValue > 10) {    arrays[0].push(exampleValue);    return arrays;  }
arrays[1].push(exampleValue); return arrays;}, [[], []]);
复制代码


这种模式其实没什么特别,我应该早点意识到它的。以前我的做法是检查一大堆对象来获得符合某种条件的所有对象,然后针对不同的条件再做一次检查。这意味着我要做两遍循环数组,但实际上做一遍就够了。


这个模式是从(https://30secondsofcode.org/#bifurcate)这里学来的。这个网站有很多干货,我建议大家都去看看。


我知道 reduce 可能不太好学,大家不是很清楚它背后发生了什么;但是如果你能熟悉它的用法,就可以利用它来构建循环数组时所需的各种数据结构。它其实应该叫 builder 的,比 reduce 这个名字更合适。

不用’foo’变量

// badconst foo = y && z;
// goodconst isPostEnabled = isPost && postDateValid;
复制代码


这个模式看起来挺眼熟的,我相信大家都见过这种代码。花点时间尽量取一个合适的名字吧。


这对于专业人士或教师来说是尤为重要的。变量命名应该用来帮助解释和给出代码内容的上下文。


当别人阅读你的代码时,他们应该能理解你想要解决的问题。


更多信息:


Richard Tan 的“命名变量的艺术”:https://hackernoon.com/the-art-of-naming-variables-52f44de00aad

嵌套三元组

let result = null;if (conditionA) {  if (conditionB) {    result = "A & B";  } else {    result = "A";  }} else {  result = "Not A";}
const result = !conditionA ? "Not A" : conditionB ? "A & B" : "A";
复制代码


我承认,嵌套三元组这个想法一开始会令人反感。它似乎是一种编写条件的好方法。然后我开始编写业务逻辑,发现自己到处在用嵌套的 if else 子句和一些非常有问题的条件逻辑。


我认为 if 和 else 作为单词更容易理解;但当它们嵌套在一起时,我就开始越来越糊涂了。


不过嵌套三元组用的多了之后,我的思路也开始变得更清晰。


我认为这种模式完全取决于你和你的团队以及你的偏好。我见过有人能很好地应付两种情况,对各自的优劣都很清楚,我个人而言是用得越来越多了。


更多信息:


Eric Elliot 的“嵌套三元组真棒”:https://medium.com/javascript-scene/nested-ternaries-are-great-361bddd0f340


英文原文:https://www.johnstewart.dev/five-programming-patterns-i-like/


2019-07-18 18:415166

评论

发布
暂无评论
发现更多内容

企业该如何选择数字化转型工具?

优秀

数字化转型 数字化工具

跨语言高性能RPC框架Focus发布V1.1.0

dinstone

RPC 高性能 跨语言 RPC框架

Python 文件处理指南:打开、读取、写入、追加、创建和删除文件

小万哥

Python 程序员 软件 后端 开发

Macos ftp传输工具:Transmit 5 中文版 支持M1 附安装

加油,小妞!

ftp传输 Transmit 5

亚马逊云科技大语言模型下的六大创新应用功能

淼.

李开复带领零一万物,新一轮融资由阿里云领投,估值超10亿美元

B Impact

CNCC 2023 | 大模型全面革新推荐系统!产学界多位大咖精彩献言

小红书技术REDtech

算法 推荐系统 多模态 大模型 内容理解

【我和极客时间的故事】极客时间带给我的成长

三掌柜

我和极客时间的故事

pycharm pro 2023.2.4中文版 支持M1

加油,小妞!

开发工具 PyCharm Pro

第26期 | GPTSecurity周报

云起无垠

轻量应用服务器:现代云计算的宝贵利器

E₀=mc²

云计算 虚拟化 亚马逊云科技 VPS

项目管理从混乱到井然有序,就差这10款看板软件了!

彭宏豪95

项目管理 效率工具 项目经理 在线白板 看板工具

垃圾回收是什么?

暂时不愿意透露姓名的热心人士

垃圾回收

Programming abstractions in C阅读笔记:p184-p195

codists

快速实现一个企业级域名 SSL 证书有效期监控巡检系统

观测云

监控告警 智能巡检 SSL域名

大语言模型“战国时代”,未来将如何发展?

申屠鹏会

AI大语言模型

平台工程动态 Monthly News 2023-10

杨振涛

DevOps 平台 平台工程 平台工程社区 PECommunity

用了低代码工具,让我效率提升了80%

树上有只程序猿

软件开发 低代码开发平台 JNPF

域名证书到期,如何通过nginx更换https证书

javaNice

nginx

《用友企业绩效管理白皮书》要点解读之趋势洞察

用友BIP

企业绩效管理

Amazon EC2 Hpc7g 实例现已在更多区域推出

亚马逊云科技 (Amazon Web Services)

Amazon EC2

Linux Vim批量注释和自定义注释

芯动大师

OpenHarmony,奏响中国基础软件的“光辉岁月”

脑极体

开源鸿蒙

Photoshop Web版本用了哪些CSS技术

南城FE

CSS css3 前端 PhotoShop

用友成功签约国家能源全资子公司-宁波风电

用友BIP

财务数智化

罗拉ROLA住宅代理IP市场稳定增长,未来有哪些发展前景?

Geek_ccdd7f

一站式解决方案:体验亚马逊轻量服务器的顶级服务与灵活性

-亦世凡华、

瓴羊重磅发布数据服务枢纽“瓴羊港”,推动企业数据流通及价值增长

B Impact

对话在行人|泰开集团:通过财务数智化转型,实现多重管控要求

用友BIP

对话在行人 数智化领先实践

API自动化测试​

谷云科技RestCloud

API测试 API 接口

你知道这五种好用的编程模式吗?_大前端_John Stewart_InfoQ精选文章