什么样的函数算好函数??

slowgrace 2009-02-09 10:28:07
一些粗浅的见解,希望大家一起来谈谈自己的体会

(1)我觉得检验一个函数是否好的标准很简单,就是你是否反复使用它。如果你写了个函数,之后却再也没用过它,这个函数就不是个好函数。
(2)功能明确,参数不要太多。其实写这个帖子,是因为最近我写了个很通用的函数,带了几十个参数。因为很通用,每次我用的时候都会有点担心,都会回头重新检查这个函数的代码,害怕当时写这个函数的时候有些情况没考虑到。结果,本来我写这个通用函数是为了省时间,可是倒反更花时间了。以致于现在每次我要用这个函数,都会头疼畏惧。不知大家有同感否?
...全文
326 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
slowgrace 2009-02-17
  • 打赏
  • 举报
回复
感谢各位热心参与讨论,我已将各位的高见总结在http://blog.csdn.net/slowgrace/archive/2009/02/17/3900237.aspx
用户 昵称 2009-02-11
  • 打赏
  • 举报
回复
楼主说的非常好!!!!!!
sonic_andy 2009-02-11
  • 打赏
  • 举报
回复
标志位可以通过定义 不同的枚举类型+位运算符 进行传递(类似MsgBox的参数):

public enum hzTester
hzA = 1
hzB = 2
hzC = 4
hzD = 8
end enum

public sub test(byval tester as hzTester)
if (tester and hzA) = hzA then
' ...
end if
if (tester and hzB) = hzB then
' ...
end if
' ...
end sub

' 调用
call test(hzA or hzC or hzD)

zzyong00 2009-02-11
  • 打赏
  • 举报
回复
学学微软的API,一般参数不会太多,如果确实需要很多,用一个结构体可以节省很多参数
sonic_andy 2009-02-11
  • 打赏
  • 举报
回复
用对象来封装参数是个好办法:)

<重构-改善既有代码的设计>
中的代码坏味(bad smell)中就有函数包含过多的参数的情况,
此时可以将参数封装为一个对象:参数对象
gjz_1209 2009-02-11
  • 打赏
  • 举报
回复
参数少点,不出错
嗷嗷叫的老马 2009-02-10
  • 打赏
  • 举报
回复
呃....说不好......
smalle 2009-02-10
  • 打赏
  • 举报
回复
直接写个类,在类里面定义几个公用变量,函数直接使用那些公用变量计算,使用时直接设置类里面那几个变量,然后直接执行函数。这样可以减少参数过多而引起混乱的情况
king06 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 SYSSZ 的回复:]
(1)无错误;
(2)执行快;
(3)资源占用少;
(4)重用性好;
(5)易用.
[/Quote]
up~
slowgrace 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sdm588 的回复:]
重载,用数组/结构体都行啊,不一定非得那么多参数吧?
[/Quote]

用结构体,其实还是很多参数,要考量的因素还是一样多,实质还是不变。

重载的话,我用的是VBA,不支持,唉。
slowgrace 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 Tiger_Zhao 的回复:]
出于统一维护的考虑,建立一个有十几个参数的函数没问题。
既然你每次调用重新检查函数,说明并没用将各种参数的组合情况都实现了。那么你就应该针对各个已实现的情况,做一些封装函数,该函数就作为私有函数仅供封装函数调用。这样通用性和健壮性都能满足要求。
[/Quote]

谢谢!你的建议真好。一开始我没看懂,现在明白了。
神马都能聊 2009-02-09
  • 打赏
  • 举报
回复
参数那么多就说明你的函数还需要压缩和拆分
bdzwj 2009-02-09
  • 打赏
  • 举报
回复
函数功能尽量单一,目的性明确 易于重用
代码不要太长,太长的要合理拆解细化,然后通过一些封装手段对外暴露接口
参数不要太多,容易混淆,实在没有办法可以通过 定义结构体作为参数,或class或轻量对象实现
of123 2009-02-09
  • 打赏
  • 举报
回复

大量重复使用的函数,或要提供给用户或伙伴使用的函数,参数不要超过 4 个。
注意,传统工艺生产线上,快速流水的要求之一,就是每个工位处理的零件数不超过 4 个。是有统计学测试依据的。

偶尔使用的函数,参数不要超过 6 个。
传统工艺生产线上,对于熟练人员,简单操作的项目不超过 6 项。

极少使用的函数,参数不要超过 10 个。
_l_ 2009-02-09
  • 打赏
  • 举报
回复
用起来方便的就可以了 参数过多 那事自己给自己找麻烦 我写的函数 很少超过3个参数的
slowgrace 2009-02-09
  • 打赏
  • 举报
回复
这所有改标志位共有的步骤是有两个嵌套访问数据表,还有一个轮询发消息,改树控件的标志位。

但几乎每种标志位都有自己特别需要处理的地方,害得我每次用这个函数的时候,都要重新检查考量一番。

今早上我干脆不用这个函数了,而是把里面循环、轮询的部分拷贝粘贴出来,另外写了个改计数位的函数。

虽然有人说“当拷贝粘贴发生的时候,就是你该考虑重用的时候”,可我现在切身体会就是,有时候拷贝粘贴它就是好使啊……
slowgrace 2009-02-09
  • 打赏
  • 举报
回复
我夸张了哈,刚才数了数,是十几个参数,将近20个吧,嘿嘿。

函数的功能是用来改我设置的诸多标志位的。
白发程序猿 2009-02-09
  • 打赏
  • 举报
回复
什么函数需要十几个参数?
你这函数功能这么强大?
是做什么的?
如果一个函数的功能太多,还不如分成多个函数呢
东方之珠 2009-02-09
  • 打赏
  • 举报
回复
几十个参数,太多了吧!如果参数太多,可考虑用数组。
特别 2009-02-09
  • 打赏
  • 举报
回复
我认为
第一原则是能解决问题
第二原则是让其他人能相对容易地读懂、维护这段代码
第三性能、效率
其他都可以不用考虑
加载更多回复(7)

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧