金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  423 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks
摘译自:

Clean Code
A Handbook of Agile
Software Craftsmanship
Robert C. Martin


Function Arguments

The ideal number of arguments for a function is
zero (niladic). Next comes one (monadic), followed
closely by two (dyadic). Three arguments (triadic)
should be avoided where possible. More than three
(polyadic) requires very special justification—and
then shouldn’t be used anyway.

函数参数

函数参数的理想个数是零个(零元)。
其次是一个(一元),
紧接下来是两个(二元)。
三个参数(三元)应尽可能地避免。
三个以上的参数(多元)需要非常特殊的理由
————否则无论如何都不应该。

(转载请注明来源于金庆的专栏)


posted on 2009-08-03 17:35 金庆 阅读(2274) 评论(10)  编辑 收藏 引用 所属分类: 1. C/C++5. 软工与管理9. 其它

评论

# re: 函数参数的理想个数 2009-08-03 18:11 forgot
不用这么教条吧,Windows API跟Crt里面的函数貌似很大一部分都是3个/3个以上参数  回复  更多评论
  

# re: 函数参数的理想个数 2009-08-03 20:23 mybios
不敢恭维,如果按照这个理想的话,真有太多的反面教材  回复  更多评论
  

# re: 函数参数的理想个数[未登录] 2009-08-04 12:27 kk
不用参数难道用全局变量? 参数需要几个就用几个。  回复  更多评论
  

# re: 函数参数的理想个数 2009-08-04 16:54 欲三更
对,应该需要几个用几个  回复  更多评论
  

# re: 函数参数的理想个数[未登录] 2009-08-05 08:43 Alex
一个输入bytes,inlen,outbytes,outlen的函数就是4个参数了,这样的很多的  回复  更多评论
  

# re: 函数参数的理想个数 2009-08-05 09:44 金庆
大家受C语言的影响比较大.
确实在Windows API和C库函数中存在参数一大堆的情况.
在面向对象语言中, 参数可以转化为成员变量和参数对象, 大大减少参数的个数.
C++库比C库更好用, 就是因为调用时不必列出一大堆的参数.

以transform(const BYTE* inBytes, int inLen, BYTE* outBytes, int& outLen)为例,
可以转换成对象的方式:
outBuf = transform(inBuf)
或者 buf.transform()
  回复  更多评论
  

# re: 函数参数的理想个数 2009-08-05 13:24 欲三更
@金庆
要是把本该是参数的变量转换成成员变量,会带来更多的问题:
如何初始化? 你怎么设置它? 设置了以后能不能随便改动? 要不要加锁?...

而且你每次改动这个参数的类型都要找到头文件里再改一遍, 很麻烦.

本质上说, 一个只与某个方法有关的变量, 为什么要让类知道他的存在?  回复  更多评论
  

# re: 函数参数的理想个数 2009-08-05 18:01 金庆
@欲三更
还可以用参数对象。多个参数组织成一个结构体。  回复  更多评论
  

# re: 函数参数的理想个数 2009-08-05 18:53 空明流转
对象要面临着隐式的上下文的问题。  回复  更多评论
  

# re: 函数参数的理想个数 2009-08-21 22:30 李现民
简单意味着更容易理解,意味着程序逻辑更容易组织,意味着更容易保持正确性。函数参数应该尽可能少,函数体应该尽可能短,类应该尽可能小---这些都是设计与折衷的问题  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理