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

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

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

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

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

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

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

声明

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

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

测试环境申明

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

简介

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

解读

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

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

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

但是在算法实现上,笔者强烈建议各位使用这种编码风格。它简单可靠,可以节约编程者的许多心智。NNs28资讯网——每日最新资讯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 */

解读

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

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

如果你真的打算使用柯里化的编程风格。小编建议你,写全注释!
一直写到,我不需要读你的函数,就知道你这个函数想做什么、有几个参数、想返回什么、什么情况下会结束柯里化。NNs28资讯网——每日最新资讯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());*/

解读

相对于下文提到的链式编程、更加正统的面向对象风格。每一次运算结果清晰、类型明确,在现代化的编程工具帮助下,编程效率很高。NNs28资讯网——每日最新资讯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());*/

解读

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

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

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

声明式风格函数

代码

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

解读

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

总结

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz&ldquo;难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?&rdquo;这一番话,出自百合网联合创
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的&ldquo;在线鉴别&rdquo;,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的&ldquo;征求意见版&rdquo;:1、取消P序列
  • iQOO 11S或7月上市:搭载“鸡血版”骁龙8Gen2 史上最强5G Soc

    去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,iQOO 11不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞屏,同时在快充
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
  • 外交部:美方应停止在网络安全问题上不负责任地指责他国

      中国外交部今天(16日)举行例行记者会。会上,有记者问,美国情报官员称,他们正在阻拦来自中国以及其他国家的黑客获取相关科研成果。 中方对此有何评论?对此
  • 荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    2022年第一季度临近尾声,在该季度内,许多品牌陆续发布自己的最新产品,让大家从全新的角度来了解当今的手机技术。手机是电子设备中,更新迭代十分迅速的一款产品,基
Top