当前位置:首页 > 科技  > 软件

浅谈JavaScript编程过程Function函数的几种编程风格

来源: 责编: 时间:2023-08-14 22:00:49 473观看
导读想了解更多关于开源的内容,请访问:51CTO 开源基础软件社区https://ost.51cto.com声明JavaScript编程过程中函数是一个很有趣的点,JavaScript的函数与其他如:C、Java等语言有很大区别。对于从别的编程语言转来的同学可能

fdF28资讯网——每日最新资讯28at.com

想了解更多关于开源的内容,请访问:fdF28资讯网——每日最新资讯28at.com

51CTO 开源基础软件社区fdF28资讯网——每日最新资讯28at.com

https://ost.51cto.comfdF28资讯网——每日最新资讯28at.com

声明

JavaScript编程过程中函数是一个很有趣的点,JavaScript的函数与其他如:C、Java等语言有很大区别。对于从别的编程语言转来的同学可能会存在一定的“坑”,如function函数与=>函数的区别。function函数this关键字的占用等。fdF28资讯网——每日最新资讯28at.com

在下文的案例中可能会使用这些知识,但我因为篇幅限制将不会对这些语法进行讨论,只讨论不同编码方式的风格问题。fdF28资讯网——每日最新资讯28at.com

测试环境申明

测试工具:DevEco Studio 3.1.1 Release 构建版本:3.1.0.501
测试平台:HarmonyOS Api9 x86 虚拟机
测试语言:ArkTS(只测试JavaScript语法部分)fdF28资讯网——每日最新资讯28at.com

简介

因为JavaScript编程风格的灵活性。在一个简单的求和函数、在JavaScript中可以使用很多不同的风格表示。
小编将会以函数式编程、面向对象编程、面向对象链式编程、申明式编程等多个不同的方式表示出来。
以下代码仅作为抛砖引玉的效果,不代表实际开发代码,也不代表当下所有的编码风格,小编只谈论我了解的几种。在实际开发过程中每一种编码风格也会存在更多的细分风格。fdF28资讯网——每日最新资讯28at.com

过程式编程

代码

// 过程式编程function add(...is: number[]) {  // 总和  let sum = 0;  // 求和  for (let index = 0; index < is.length; index++)     sum += is[index];  // 返回总和  return sum;}/** * 使用样例 * console.log(add(11, 22, 33)); */

解读

过程式编程是最简单粗暴直接的编程方式,在所有主流编程语言中都支持使用过程式编程。fdF28资讯网——每日最新资讯28at.com

过程式编程往往需要编程者拥有过硬的编程素养与对业务的深刻理解才可以保证代码的持续性的可维护性、可扩展性。fdF28资讯网——每日最新资讯28at.com

在业务不确定、实现逻辑经常变化、实现方案不稳定的部分不建议使用这种编码风格,因为它很容易导致代码失控。fdF28资讯网——每日最新资讯28at.com

但是在算法实现上,笔者强烈建议各位使用这种编码风格。它简单可靠,可以节约编程者的许多心智。fdF28资讯网——每日最新资讯28at.com

柯里化编程

代码

// 自动柯里化机,可以自动把函数转化为柯里化风格。function curry(fn) {  return function curried(...args) {    if (args.length >= fn.length) {      return fn.apply(this, args);    } else {      return function (...nextArgs) {        return curried.apply(this, args.concat(nextArgs));      }    }  }}// 获得转化后的函数export const curriedAdd = curry(add2);/** * 使用样例 * console.log(curriedAdd(1)(2)); // 3 * console.log(curriedAdd(1, 2)); // 3 * console.log(curriedAdd(1)(2, 3)); // 3 */

解读

柯里化编程有一个有特色的地方是函数的连续嵌套,这是前端开发非常热门的一种编程方式。但小编极力反对这种编程方式具体原因有一下几点:fdF28资讯网——每日最新资讯28at.com

  • 柯里化编程虽然确实提高了开发的灵活性,但是它也降低了函数的可修改性,导致后续重构可能会牵一发而动全身。
  • 柯里化有一个很大的特点是函数嵌套,这不符合"never nester"不嵌套主义的编程理念。嵌套会大幅降低可读性。

如果你真的打算使用柯里化的编程风格。小编建议你,写全注释!
一直写到,我不需要读你的函数,就知道你这个函数想做什么、有几个参数、想返回什么、什么情况下会结束柯里化。fdF28资讯网——每日最新资讯28at.com

面向对象编程风格函数

代码

// 面向对象风格函数export function count() {  // 总和属性  this._sum = 0;  // 添加方法方法  this.add = (i) => this._sum += i;  // 返回总和方法  this.get = () => this._sum;  // 返回构造对象  return this;}/*// 使用样例* a = count();* console.log(a.add(10));* console.log(a.add(20));* a.add(30);* console.log(a.get());*/

解读

相对于下文提到的链式编程、更加正统的面向对象风格。每一次运算结果清晰、类型明确,在现代化的编程工具帮助下,编程效率很高。fdF28资讯网——每日最新资讯28at.com

面向对象风格函数、链式编程

代码

//面向对象链式编程风格// 构造函数export function count2() {  // 总和属性  this._sum = 0;  // 添加方法  this.add = (is) => ((this._sum += is), this);  // 求和方法  this.get = () => this._sum  // 返回构造对象  return this;}/*使用样例console.log(count().add(10).add(20).add(30).get());*/

解读

我之所以将它从面向对象单独拎出来,是因为面向对象链式风格编程、基本可以代替柯里化编程。fdF28资讯网——每日最新资讯28at.com

这种编程风格相对于柯里化更加扁平,可读性更高,还具备一定的可拓展性。fdF28资讯网——每日最新资讯28at.com

所以,如果在可以选的情况下为什么要使用柯里化呢?fdF28资讯网——每日最新资讯28at.com

声明式风格函数

代码

// 声明式风格函数export function sum3(is, get) {  let ans = 0;  // 这里可以使用任何实现方式,可以使用异步等方式实现  is.forEach(element => {    ans += element;  });  // 无论用任何方式实现,最后所有运算结束后都使用get函数作为回调。  get(ans)}

解读

声明式风格的函数特点不在于它代码是怎样的,而是在于它提供了哪些参数供开发者调用。开发者不在去关心实现的顺序,如何实现、因为如何实现根本不重要,实现顺序也不重要。你想要的只有答案,和得到答案。实现可以使用任何方式实现,内部可以使用多线程、异步、或者等等的方法实现。fdF28资讯网——每日最新资讯28at.com

总结

现代编码风格的演变,无非就是随着需要处理问题的改变,产生了关注的点的改变。去改变开发者的注意力,让开发者放置跟多的精力在自己的业务上。不是越先进的编码风格就越好用,在合适的地方选择合适的编码风格才是最重要的。fdF28资讯网——每日最新资讯28at.com

想了解更多关于开源的内容,请访问:fdF28资讯网——每日最新资讯28at.com

51CTO 开源基础软件社区fdF28资讯网——每日最新资讯28at.com

https://ost.51cto.comfdF28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-5705-0.html浅谈JavaScript编程过程Function函数的几种编程风格

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: DNS检查如何帮助开发人员?

下一篇: 虚拟现实技术在工作场所的未来

标签:
  • 热门焦点
  • Redmi Buds 4开箱简评:才199还有降噪 可以无脑入

    在上个月举办的Redmi Note11T Pro系列新机发布会上,除了两款手机新品之外,Redmi还带来了两款TWS真无线蓝牙耳机产品,Redmi Buds 4和Redmi Buds 4 Pro,此前我们在Redmi Note11T
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    据 DIGITIMES 消息,英伟达 AI GPU 出货逐季飙升,接下来 AMD MI 300 系列将在第 4 季底量产。而半导体业内人士表示,近日传出 AMD 的 AI 芯片将转单给
  • 苹果140W USB-C充电器:采用氮化镓技术

    据10 月 30 日 9to5 Mac 消息报道,当苹果推出新的 MacBook Pro 2021 时,该公司还推出了新的 140W USB-C 充电器,附赠在 MacBook Pro 16 英寸机型的盒子里,也支
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top