为了清楚起见,值得在调用方法之前创建变量参数

Posted

技术标签:

【中文标题】为了清楚起见,值得在调用方法之前创建变量参数【英文标题】:Is worth creating variable parameters before calling method for clarity 【发布时间】:2012-05-22 10:22:37 【问题描述】:

为方法参数使用尽可能有意义和清晰的名称被认为是一种最佳做法:

public myFunction(String meaningfulName1, String meaningfulName2, boolean meaningfulName3)

但是,在调用方法的时候,有时我们会发现这个,这降低了可读性:

myFunction("", "foo", false);

为了清晰起见,是否值得为参数创建变量的开销?

String meaningfulName1 = "";
String meaningfulName2 = "foo";
String meaningfulName3 = false;
myFunction(meaningfulName1,meaningfulName2,meaningfulName3)

【问题讨论】:

【参考方案1】:

根据您的命名约定,我假设您不使用 c#,但在 c# 以及许多其他语言中,您可以在调用方法时使用命名参数。

myFunction(meaningfulName1: "", meaningfulName2: "foo", meaningfulName3: false)

我经常使用这种技术来帮助提高可读性,因为从内容上看不同的参数代表什么并不明显。尤其是带有大量 0, 1, true, false, null 的方法调用是很好的候选者,您需要在参数命名中更加明确以使代码可读。

在不能选择命名参数的语言中,当内容在上下文中不明显时,我肯定会拆分变量以提高可读性。

但是在我编写的大多数代码中,我很少使用常量参数调用我的方法,大多数参数都是在其他地方计算的,并且已经包含在良好命名的变量中。

【讨论】:

感谢您提供的好信息!貌似java也有这个功能,第一次听说!谢谢!【参考方案2】:

根据我的经验,我很确定显式方式更好(至少在大多数情况下)。第一种方式不会给您带来太多的性能提升;但对于继续进行维护工作的人会很有帮助。

毕竟,Pre-optimization is the root of evils。

P/s:第二种方法对于具有 LONG 参数列表的方法也是非常必要的(除了“objectize”参数方法)。但我希望你不必处理它。

【讨论】:

为 java 添加了一个语法糖(感谢 Albin 回答中的概念):artima.com/weblogs/viewpost.jsp?thread=118828【参考方案3】:

如果您在定义函数时正确记录了函数,那么对参数的解释只是 ctrl + 单击或鼠标悬停在 IDE 中。

作为开发人员,我更有可能对该函数对这些变量的作用和返回感兴趣,而不是它们在运行时的上下文(即使我确切地知道每个 var 是什么,我也不能不依赖输出看看实际发生了什么),所以我还是想看看它的代码。

【讨论】:

确实如此,但如果是一遍又一遍自己的项目,保存点击 * x 次是否有意义......你不觉得吗?

以上是关于为了清楚起见,值得在调用方法之前创建变量参数的主要内容,如果未能解决你的问题,请参考以下文章

“异步”调用图中的最后一次调用是不是需要同步?

ref关键字的用法

继承 修饰变量

C#:为具有不同名称(快捷方式)的变量创建属性?

为了清楚起见,如何将 MainActivity 功能拆分为另一个类?

window.requestAnimationFrame() ,做逐帧动画,你值得拥有