如何编写高质量的代码五-函数
程序员文章站
2022-06-21 16:27:42
...
无论对于面向过程的语言还是面向对象的语言,创建函数都是必须的。
那为什么要创建函数呢?
- 减少代码复杂度
- 增加一个中间的,可以理解的抽象
- 避免代码重复
- 增加子集
- 隐藏逻辑顺序
- 隐藏指针操作
- 提高代码移植
- 简化复杂的bool测试
- 提高性能
同时很多适用于创建类的理由也适用于创建函数上:
- 隔离复杂度
- 隐藏实现细节
- 限制代码修改的地方
- 隐藏全局数据
- 集中逻辑控制
- 代码重用
- 有利于代码重构
函数该多大?
我从来没有见过好函数超过100行的。经过很多人的经验总结,一个函数最多不要超过100。 如果你的函数体比较大,你基本上可以肯定你的函数干了好几件事情,你需要重构代码。
好的函数名称
一个好的函数名称是写好一个函数的关键,在函数被调用的地方,好的函数名称极大的的提高代码的可读性,对于未来的维护也具有很高的直观性。对于很多操作,名字应该成对出现:
add/remove
increment/decrement
open/close
begin/end
insert/delete
show/hide
create/destroy
lock/unlock
source/target
first/last
min/max
start/stop
get/put
next/previous
up/down
get/set
old/new
如何传递函数参数?
函数参数传递应该遵循某种规则。在调用函数的时候,很多bug是因为传错了参数顺序导致的。
函数参数总是要按照入参,出参的顺序排列,不要交叉使用。下面的函数为合理的函数申明。
int InvertMatrix(Matrix original_matrix, Matrix* out_matrix);
函数参数数量不要超过7个,要考虑重新定义数据结构如果传入的参数有很大的关联性. 比如:
bool validPersionInfor(char *given_name, char *family_name, char * address, char *phone, int age, char *job, char *title);
参数越多代码逻辑就会越复杂,变量也就也多,程序变得脆弱。该代码完全可以重构(refactor)成:
struct PersionInfo{
char *given_name;
char *family_name;
char *address;
char *phone;
int age;
char *job;
char *title;
};
bool validPersionInfor(PersionInfo *person_info);
写高质量函数的关键点
- 创建函数的最主要原因是提高程序复杂度管理的可能性,降低软件复杂度。
- 函数的名称暗示着函数的质量。如果函数的名称不好而且不准确,那么该函数可能存在设计问题。
- 一个函数只做一个事情。
- 除非万不得已不要用Macro, macro应该是你最后一招。
转载于:https://my.oschina.net/billzheng/blog/84927
推荐阅读
-
编写高质量的代码——从命名入手
-
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用_PHP
-
如何用php编写一个简单的模板引擎(附代码)
-
PHP如何编写易读的代码
-
php中的四舍五入函数代码(floor函数、ceil函数、round与intval),ceilintval
-
php如何使用crypt()函数进行加密的实例代码
-
如何组织css,写出高质量的css代码_html/css_WEB-ITnose
-
高质量Python代码编写的5个优化技巧
-
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
-
[编写高质量iOS代码的52个有效方法](十)Grand Central Dispatch(GCD)