home 首页 » 精彩日志 » 日志查看

Jani Hartikainen的博客 --- 优化代码的一个简单方法: 不要添加过多的参数

 2009-11-13 01:40:03 

helloyou 译

(这里是该博客原文的翻译,而不是这个转载的翻译)

优化代码的一个简单方法: 不要添加过多的参数

你需要增加一些新功能到你的函数或类.比如说你需要删除所有保存的对象,但是同时可选择地调用他们的一个方法.

这很容易,不是吗?让我们加一个参数到removeAllObjects!如果参数为true,那么调用该方法,否则不.

然而这不是一个那么好的主意....

参数有什么不好?

使用参数错了吗?
不,不是的.

参数是好的,但是当你创建一个带参数的函数或增加一个参数到已有的函数时,有些事是需要考虑的. 让我们先做一个比较:

一些代码:
$pump = new OilPump();
$pump->turnSwitchOff(true);

比较下面的代码:
$pump = new OilPump();
$pump->turnSwitchOff();
$pump->deactivate();

你能看出第一个代码段中,turnSwitchOff的参数是做什么用的吗? 你会毫无头绪,除非你是一个猜谜专家.

这很好地说明了反对参数的原因: 许多情况下, 一些参数不是那么容易理解,为了知道一个参数是做什么的,你必须查找你的文档或是代码.

好的参数的原则

第一条很简单: 更少的参数更好. 这不意味着你必须象躲避猪流感一样避免使用参数, 为了减少参数而增加更多不必要的函数通常更糟.

第二条: 你的参数应该与函数相关联. 在我们的第一个例子和代码中, 参数和该函数根本不相关.如果参数和函数相关的,并容易从函数名中理解参数的作用,那通常是好的.比如:
$store->findByName('foo');
很容易理解,对吗?

第三条是一致性:参数的顺序是重要的,如果你有一系列处理类似数据的函数,尽量让参数保持同样的顺序.比如当你写异步的javascript代码是,总是将回叫函数作为最后一个函数(或总是第一个,这不重要,只要你在代码中保持一致)

第四条是利用你的编程语言所提供的优点提高可读性.在python中,你可以使用"kwargs"如:some_function(name='John', age=32).在javascript中,你可以传递一个对象常量作为参数.记住这可以提高你代码的可读性,但是当你第一次使用时,仍然可能难以知道什么参数可以传递给该函数.

<欢迎添加你的原则在这里>

结论

不假思索地给函数/方法加一个参数也许可以很快地解决问题,但也让你的代码更不易理解. 最好是想想是否可能从方法的名称或其他线索猜出参数的意思.如果不确定,增加一个方法来实现该功能通常是更安全的办法,记住有时你不能两全.

有时你不能避免地需要若干个参数,这种情况下,添加清楚的文档块(PHPDoc, JSDoc或其它)和参数的命名就很重要.但更少的参数通常更好,容易让你走得更远.

收藏:

发表评论:
大名:*
网址:   http://sitename
评论:*