写点什么

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

  • 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:414951

评论

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

Java中级笔试题百度文库,牛客网java笔试题库,从底层开始带你了解并发编程

Java 程序员 后端

Java入门视频教程,尚学堂大数据全套教程百度云,Java多线程并发面试题

Java 程序员 后端

Java基础笔试题,rabbitmq教程go,netty框架工作原理

Java 程序员 后端

Java二叉树面试题总结,马哥linux视频教程百度云,GitHub重磅官宣

Java 程序员 后端

Java从入门到精通百度云,java教学百度网盘,思维导图+源代码+笔记+项目

Java 程序员 后端

Java基础72问:黑马程序员java教程,漫谈MySQL权限安全

Java 程序员 后端

不会吧?!新版本longhorn部署需要k8s.gcr.io镜像?

远鹏

Kubernetes CloudNative cncf longhorn

Java大厂74道高级面试合集,我凭借这份PDF的复习思路

Java 程序员 后端

Java中高级面试技术问题,mysql优化视频教程,Java全栈知识体系

Java 程序员 后端

Java入门基础,千锋教育java教程,深度剖析原理

Java 程序员 后端

Java基础72问,极客时间数据结构与算法,原理解析

Java 程序员 后端

Java基础入门视频,kafka基础教程,最新Java开发面试解答

Java 程序员 后端

Java基础笔试题,尚硅谷和尚学堂大数据,彻底帮你搞懂

Java 程序员 后端

2021 Qcon 前端专场精彩回顾

程序员海军

大前端 可视化 vite Qcon

Java入门,spring框架教程,Java开发知识体系

Java 程序员 后端

Java外包是如何转正网易的,面试阿里的时候一定会问到的

Java 程序员 后端

Java多态实现原理解析,掌握这套精编Java高级面试题解析

Java 程序员 后端

Java中级笔试题百度文库,java架构师直通车百度云,使用指南

Java 程序员 后端

Java入门,java黑马程序员课后答案第二版第八章,如何成为杰出的程序员

Java 程序员 后端

Java基础笔试题,mysql教程入门到精通,Java程序员

Java 程序员 后端

Java基础入门教程,尚硅谷和黑马深圳,Java中级面试含答案

Java 程序员 后端

Java外包是如何转正华为的,2021最新网易Java面试题目

Java 程序员 后端

看山聊 Java:从零实现“百度网盘批量重命名”工具

看山

Java 工具集 10月月更

Java五年工作经验面试题,极客学院和黑马,深入linux内核架构面试

Java 程序员 后端

Java基础学习百度云,尚硅谷linux,深入linux内核架构面试

Java 程序员 后端

Java基础教程百度云,java教程百度云下载,你不懂还不学?

Java 程序员 后端

SQL 笔记

越锋利

sql 课程

Prometheus 内置函数(四)

耳东@Erdong

Prometheus PromQL 10月月更

架构实战营模块1课后作业

断水风春

架构实战营

Java基础知识梳理,java最新技术栈百度网盘,大厂面试必问

Java 程序员 后端

Java基础知识梳理,渡一教育java百度云资源,帮你快速拿Offer

Java 程序员 后端

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