`

代码整洁之道--函数

 
阅读更多

 

函数

 

短小,函数的第一规则就是短小。

每个函数都一目了然,每个函数都只说一件事。

而且,每个函数都依序把你带到下一个函数。

这就是函数短小应该达到的程度。

 

代码块和缩进

if语句、else语句、while语句

 

 

只做一件事

函数应该做一件事,做好这件事,只做一件事。

 

只做一件事的函数用起来应该是最方便的,复用性最好的。

是大的组合的基本单元。

 

每个函数一个抽象层级

要确保函数只做一件事,函数中的语句都要在同一抽象层级上。

自顶向下度代码:向下规则j

我们想要让每个函数后面都跟着位于下一抽象层级的函数,这样一来,在查看函数列表时,就能循抽象层级向下阅读了。

 

switch语句

 

使用描述性的名称

命名方式要保持一致,使用与模块名一脉相承的短语名称或者动词给函数命名。

 

函数参数

最理想的参数数量是0参数,其次是一,再次是二,应该尽量避免三

 

一元函数的普遍形式

标识参数

二元函数

 

参数对象

如果函数看来需要两个三个或者三个以上参数,

就说明其中一些参数应该封装为类了。

 

参数列表

动词与关键词

给函数取个好名字,能较好的解释函数的意图,以及参数的顺序和意图。

 

无副作用

古怪的时序性耦合及顺序依赖

都有可能出现在,函数多做无关的事情

典型的案例,在进行用户密码校验时,初始化了session对象。

在会话开始是可以的,在其他的地方就会有可能导致程序出错。

 

输出参数

 

分割指令与询问

函数要么做什么事,要么回答什么事,但是二者不可都做。

 

使用异常替代返回错误码(应当这么做)

从指令式函数返回错误码违反了指令与询问分隔的规则。

 

抽离Try/Catch代码块

Try/Catch代码块丑陋不堪,他们搞乱的代码结构,把错误处理和正常流程混为一谈。

最好把try/catch代码块主体部分抽离出来,另外形成函数。

 

错误处理就是一件事

函数应该只做一件事,错误处理就是一件事,因此处理错误的函数不该做其他事。

 

Error.java依赖磁铁

返回错误码通常暗示有个类或者枚举,定义了所有错误码。

这样的类就是一块磁铁,其他许多类都得导入和使用它。

Error枚举修改时,所有其它的类都需要重新编译和部署。

使用异常代替错误码,新异常就可以从异常类派生出来,无需要重新编译或重新部署。

 

别重复自己

重复会导致代码臃肿,当需要改变时,要改变多次,增加了错误产生的几率。

重复可能是软件中一起邪恶的根源,许多原则与实践规则都是为控制与消除重复而创建。

 

结构化编程

遵循Edsger Dijkstra 的结构化编程规则

每个函数、函数中的每个代码块都应该有一个入口、一个出口。

函数中只有一个return瑜伽,循环中不能有breakcontinue语句,而且永远不能有任何goto语句。

但是小函数中,偶尔出现的return breakcontinue语句,比单入单出原则更具有表达力,没有坏处。

 

 

如何写出这样的函数

写代码和写被动东西很像,先想什么写什么,然后再打磨

写函数是,一开始都冗长而复杂,有太多缩进和嵌套循环,有过长的参数列表,名称是随意取的,也有重复的代码

然后打磨这些代码,分解函数就、修改名称、消除重复,缩短和重新安置方法,有事还拆散类。

最后遵循本章列出的规则,组装好这些函数。

并不从一开始就按照规则写函数,没人做得到

 

大师级程序员把系统当作故事来讲,而不是当作程序来写。

他们使用选定编程语言提供的工具构建一个更为丰富更具表达力的语言,用来讲那个故事。

那种领域特定语句的一个部分就是描述在系统中发生的各种星湖的函数层级。

遵循这些规则,函数会短小,有个好名字,而且被很好的归置,

真正的目标在于讲述系统的故事,而你编写的函数必须干净利落的拼装到一起,

形成一种精确而清晰的语言,帮助你讲故事。

 

 

分享到:
评论

相关推荐

    代码坏味道与启发--《代码整洁之道》总结.pdf

    代码坏味道与启发--《代码整洁之道》总结.pdf

    FPGA整洁代码之道3-信号命名和定义应该明确.pdf

    FPGA A 整洁代码之 道 3- 信号命名和定义应该 明确 在设计中,我们不断的给目录、源代码、文件、函数、变量、参数、类、封包进 行命名与定义。当一件工作需要进行的次数非常之多,足以证明它是不可或缺的 基本工作。...

    代码整洁之道读书笔记.zip

    * 整洁代码的意义? 可读性,可维护性。 * 如何写出整洁代码? 1.只做一件事 2.不重复 3.有表达力 * 整洁代码的态度要求,要遵守的军规? 专业 和责任。让营地比你来时更干净,拒绝破窗效应。 * 写出整洁...

    Linux C函数手册 清晰

    此外,C陷阱与缺陷、C和指针、C语言参考手册、代码整洁之道、C语言趣味算法、C语言详解、C Primer Plus、妙趣横生的算法(C语言实现)、嵌入式Linux_C语言应用程序设计等等书籍都已经上传,并且全部免费!...

    浅谈JavaScript 代码整洁之道

    它们仅用于参考,不过要知道这些原则都是《代码整洁之道》的作者们累积多年的集体经验。 我们在软件工程方面的技术发展刚刚超过 50 年,我们仍然在学习很多东西。当软件架构和架构本身一样古老的时候,我们应该遵循...

    matlab复变函数指数函数代码-RobustDMD.jl:健壮的DMD.jl

    matlab复变函数指数函数代码健壮的DMD在Julia 该存储库包含julia中动态模式分解(DMD)的强大版本的实现。 安装 您可以通过克隆Git存储库来安装此软件包: julia> Pkg.add(url=...

    bash-best-practices:保持代码整洁的简单方法

    保持代码整洁的简单方法。 受到和启发。 快速大规则 所有代码都在一个函数中 总是双引号变量 避免使用全局变量,并将其声明为readonly 始终具有可运行脚本的main()函数 始终使用set -eo pipefail :快速失败并注意...

    FPGA整洁代码2.pdf

    极限编程实施》作者Ron Jeffries 仔细研究了贝克的...包括尽量少的实体,比如类、方法、函数等 能通过所有测试这一点,后文中在架构设计方面详细说明,这里我们还是借助一个小的例子说明“没有重复代码”的一些技巧。

    matlab兔子程序代码-algebra-calculus-r-yacas:将代数和微积分与R和yacas一起使用

    我展示了如何使用诸如Deriv::Deriv()和splinefun()类的整洁函数,并制作了精美的图来显示供需关系,这很酷。 我写这篇文章主要是因为我正在教一本入门的微观经济学课程,并且想要一种简单,通用且无需人工的无数学...

    spark源码之scala基础语法demo

    scala是一种基于JVM的面向对象的函数编程,scala编程相对于java而言代码整洁、开发效率更高。 其中scala优点主要有: 1:面向对象,可以定义class,通过new调用实例对象使用。 2:兼容java,在scala中可以直接调用...

    matlab开发-Waitbar2

    matlab开发-Waitbar2。修改了标准的waitbar函数;更整洁的代码,并添加了奇特的颜色转换效果。

    C语言指针参数示例

    例如,在main函数中有一个非常复杂的结构体(局部变量),为了代码整洁,将结构体的初始化过程由一个专门的函数来完成,main直接调用该函数就完成了结构体的初始化。对应文章地址:...

    FPGA整洁的代码3.pdf

    在设计中,我们不断的给目录、源代码、文件、函数、变量、参 数、类、封包进行命名与定义。当一件工作需要进行的次数非常之多, 足以证明它是不可或缺的基本工作。我们一定要知道一点,基础工作 是整个项目的基石。...

    浅谈JavaScript 代码简洁之道

    代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础。 本文并不是代码风格指南,而是关于代码的可读性、复用性、扩展性探讨。 我们将从几个方面展开讨论: 变量 函数 ...

    快速将所有变量放入/更新到/在一个结构中:非常小的函数,没什么大不了的。 我分享这个,因为我认为它可能对喜欢整洁代码的人有所帮助-matlab开发

    完成此任务的默认方法是乏味且不灵活例如:s = struct('a',{},'b',{},'c',{}) ... 此函数可用于添加/更新结构的现有字段或者以给定的变量作为字段直接生成一个新结构。 例如 s1 = updateStruct( [ ], a,b,c)

    haxe-overload:Haxe宏库支持重载函数

    例如,我建议使用JavaScript的 API(它包含字符串,正则表达式以及替换字符串或替换函数),这很整洁。 我不必记住,在Haxe的本机API中,这些功能分布在StringTools.replace , EReg.replace和EReg.map 。 但是要...

    rstudio-conf-2020-lighting-talk:两个整洁的tidymetrics函数使度量(和寿命)的计算更加有趣,在rstudio :: conf 2020上进行了闪电演讲

    rstudio-conf-2020-lighting-talk 在rstudio :: conf 2020上的闪电演讲中,两个整洁的整洁度功能使计算指标(和生活)更加有趣 ... 为了重现.Rmd中的代码,您需要下载并将CSV移动到您的工作目录。

    好的程序员如何写代码

    要判断一个程序员是不是好的程序员,主要看他写的代码,因为程序员最重要的事是写...差的程序员写的代码则经常出现过长的函数,前后不一致的命名方式和排版,过深的嵌套结构,非常复杂的表达式,随处可见的数字等毛病。

    MATLAB中sin用代码咋写-Get-smart-on-Matlab:该课程记录了我学习Matlab的道路,希望对大家有所启发

    MATLAB中sin用代码咋写在Matlab上获取智能 该程序记录了我学习Matlab的道路,希望对大家有所启发。 问题需要回答: 什么是Matlab? 我怎样才能有效地学习它? 从新秀到高手展示我的学习过程的最佳方法是什么? 答:...

    Code-Snippets-Kotlin:Kotlin主题列表及其代码片段!

    代码段KotlinKotlin主题及其代码段列表!为什么选择KotlinKotlin的许多内容都是关于促进不变性。... 本地函数,扩展函数,顶级函数,默认参数使代码更整洁。 密封类知道其所有子类。 因此,您可以在“ whe

Global site tag (gtag.js) - Google Analytics