您的位置:首页 > 编程语言

如何编写高质量的代码五-函数

2012-10-25 07:30 411 查看
无论对于面向过程的语言还是面向对象的语言,创建函数都是必须的。

那为什么要创建函数呢?

减少代码复杂度

增加一个中间的,可以理解的抽象

避免代码重复

增加子集

隐藏逻辑顺序

隐藏指针操作

提高代码移植

简化复杂的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应该是你最后一招。

如何编写高质量的代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: