美文网首页@IT·互联网简友广场
编程范式链式调用的前世今生(方法论分析)

编程范式链式调用的前世今生(方法论分析)

作者: 御承扬 | 来源:发表于2024-03-13 08:23 被阅读0次

    在这个互联网繁荣发展的时代,我相信有很多人,不是正在互联网行业中抛头颅、洒热血,就是打算到互联网行业中抛头颅、洒热血,这从近几年的计算机专业很火热的现实状况中可以看清一二。诸多从事互联网行业的人员当中,程序员是其中浓墨重彩的群体成员,而看到本文的你或许就是其中一个。

    众多程序员中,尤其是行业经历尚不丰富的部分人员,刚开始到具体的互联网公司上班时,所面对的现实情况,可能会与自己料想中的有些出入,比如工作任务的完成过程中,会不禁地觉得,明明自己在大学或培训班时按部就班地跟着老师认真学习每一个知识点,为何到了解决实际生产任务时却跟没有系统地学习过编程的人士一样,不知道怎么将业务逻辑转化为函数方法,却发现同学中那些没有跟着老师学而是自己摸索的人没有这样的烦恼,不明白自己和他们之间究竟少了什么东西。

    VS Code 界面

    其实,这种区别涉及到一个编程素养的问题。紧跟着老师学习的,可能因为有老师在前面帮忙整理思路,从而缺少了一个独立思考的过程,即缺少了对某种技术从完全陌生、到一知半解、再到基本掌握的的探索了解过程,而这些因素都是后期形成编程素养所不可或缺的必要经历,而编程素养的强弱最终直接影响程序设计能力,例如同样的幂运算,编程素养较差的程序员,只会老老实实地调用语言函数库提供的 pow 函数,而编程素养好一点的会想到根据幂运算的数学原理设计自定义函数,而编程素养再好一点的人不仅会根据数学原理封装方法、并且还会在封装代码中对底数是否是 2 进行区分,因为底数固定为 2 的幂运算可以直接用移位操作完成。

    知道了学习编程要进行独立思考,对于形成较好的编程素养来说,还是不够的,因为还需要明确何种形式的思考才有利编程素养的形成,而这就是本文标题所说的了。编程设计中的一个个功能函数模块,实际上是对现实生活中我们处理事情的过程步骤的抽象。而哲学思想中的方法论,也同样是来自对现实实践过程的总结。所以,哲学和编程通过唯一的现实联系了在一起,并且用方法论去指导程序设计过程中的功能封装,是完全可以的;也所以,在编程学习的独立思考中,应该注意用方法论的思维模式去思考,这样才能有效提高自己的编程素养。

    Java 中的链式调用示例

    什么叫做按照方法论的思维模式去思考呢?本文接下来将进行演绎,演绎之前,先请屏幕前的你,看一下上面图片中的一段 Java 代码。

    对于那些对行业前沿跟得比较近的,应该能看出上面的 Java 代码片段中,用到了近两年比较流行的编程范式,即函数式编程和链式调用中的链式调用。链式调用这种编码风格,在 Java 和 python,以及 JavaScript 中用的比较普遍,就连最近讨论比较多的 HarmonyOS 的 ArkTS 语法也是用了链式调用这种风格。

    然而,我想问的是,在 C/C++ 中可不可以使用这种链式调用呢?当然了,问题的思考范围限制在自定义函数设计过程中,因为,C/C++ 官方并没有原生支持链式调用这种编程范式,这也是为什么很少在在 C/C++ 项目源码中看到类似 String[] result =new Simple("Tom","England").toString().split(",") 这样的代码语句。但是,没见过不代表 C/C++ 代码中不能使用链式调用,这是因为在写本文之前,本人已经亲自实践过用 C/C++ 写一个链式调用的代码片段,不信的话,可以看看下面的图片:

    C/C++中的链式调用案例

    为了表示功能的可用,我连代码运行结果都一起截图进来了。暂且不要管我在 People 里面具体怎么实现,而先来按照方法论的思维模式去思考链式调用。

    按照方法论的思维模式去思考,就要回答三个问题,即是什么、为什么、怎么来的。对于,链式调用是什么,这样一个问题,实际上在前面内容中已经回答了,即链式调用是编程范式。那么,链式调用为什么,这其实是要回答链式调用的作用,也即是用了链式调用后,可以在程序设计中形成什么样的效果,答案就是,使用链式调用去编写代码可以提高源码的可读性简洁性以及提高编程效率

    第一个问题和第二个问题都比较好回答,因为都是比较浅显的内容,不涉及链式调用的内部机理。然而,认识一个事物时没有完成对事物内部机理的了解,那么就不算完成了对事物的认识,所以,就需要通过回答第三个问题,来完成对链式调用的内部机理的了解

    而了解链式调用的内部机理,要先回到函数的声明定义这一基础知识上来。对于函数的声明定义格式,具体有哪些呢?这个问题本文不会进行回答,所以已经清楚函数声明定义形式的先接着往下阅读,而不清楚的先离开本文页面去使用浏览器搜索信息进行了解。

    在函数的声明定义中,有一种具有函数返回值的形式,而具体到函数返回值上,可以分成返回基础数据类型和返回对象类型两种形式,而这里需要重点说的就是返回对象类型的函数。对于函数的返回值允许不通过变量承接而直接使用,最经典的就是在输出语句中输出函数返回值;那么,以此类推,函数返回的对象也是允许直接进行使用的。到此,在代码书写形式上,已经回答了链式调用代码,如 new Simple("Tom", "England").toString().split(","),是怎么样形成的了。

    但对链式调用的认识过程还没有结束,因为还涉及到一个,如何保证调用链中每个函数返回的对象里面保存了前面的操作结果,这样一个具体的问题没有回答,而回答这样一个问题,请先看看下面的代码案例:

    如何让函数返回的对象保存先去的操作结果

    我相信,代码阅读能力过关的人,一看到上面的图片,已经知道了链式调用中每个函数是如何将之前的操作结果保存到所返回的对象身上的,就是利用对象的深拷贝,将旧对象中每个属性的值都拷贝到新对象中,然后将当前函数完成的操作结果也保存到新对象中,最后在将这个保存了旧操作结果和新操作结果的新对象返回出去

    到此,我们便按照方法论的思维模式,完成了对链式调用的思考,而完成这个思考之后,我相信你一定产生了新的知识,即如何让自己设计的类或方法也能够以链式调用的风格进行使用,而这也就完成了对自身编程素养的添砖加瓦。

    相关文章

      网友评论

        本文标题:编程范式链式调用的前世今生(方法论分析)

        本文链接:https://www.haomeiwen.com/subject/wxvvzdtx.html