欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 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