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

本文深入探讨了在编程中创建高效函数的重要性,包括减少复杂度、避免重复、提高代码可移植性和性能等方面。重点阐述了函数的合理大小、命名原则、参数传递规则以及如何编写高质量代码。此外,文章还提供了关于函数设计的关键点和重构代码的建议。

无论对于面向过程的语言还是面向对象的语言,创建函数都是必须的。

那为什么要创建函数呢?

  • 减少代码复杂度
  • 增加一个中间的,可以理解的抽象
  • 避免代码重复
  • 增加子集
  • 隐藏逻辑顺序
  • 隐藏指针操作
  • 提高代码移植
  • 简化复杂的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值