函数参数变量的命名约定?

时间:2009-08-20 15:14:24

标签: php parameters function naming-conventions

是否有命名约定或可能有关如何命名函数参数的指南?

永远,我一直这样做:

function divide( $pDividend, $pDivisor )
{ ... }

这样我就会知道哪些变量作为参数传递。

(这是PHP的,但它应该适用于大多数编程语言)

是否有一个主要原因可以解决这个问题?

是否有更好的方法可以做到这一点,或者最好避免这样的命名方案?

8 个答案:

答案 0 :(得分:6)

如果:

  1. 你的功能/方法写得很好而且简短(应该是这样)
  2. 变量名称足够描述
  3. 不需要这种做法。

    如果你需要这个,这意味着编写的代码不够可读(函数/方法太长),隐藏变量/函数名称,错误的OO实践,快捷方式,代码债务等等。)

    因此,这将是代码需要重构/改进的信号。

答案 1 :(得分:2)

我认为接受Code Complete关于命名的建议 - 任何事情都是合理的,因为整个第11章是关于正确命名变量的):

  • 不要将它命名为j,k,i,m,n(除非它仅用于迭代)或“占位符”或“测试”。当“测试”有效时,我经常不会花时间将变量重命名为任何位置。

  • 将其称为描述性名称,该名称与代码的功能分开,即“EmployeeComments”而不是“XMLEmp_Comment_File”,因为很多信息(XML,外部文件)可能会发生变化,但是程序使用“员工评论”不会

  • 尽可能保持广泛且易读的,这样您就可以用英语(或您的语言)编码而不是$ j = $ k / sqrt($ pi);或同样难以理解的东西。

至于具体参数,我从未使用过P符号。我喜欢这个想法,但如果你把它们命名为正确,那么它们是不是很明显它们是函数的参数吗?

答案 2 :(得分:1)

我听说有些人会将他们的函数参数保留为一种样式,数据类型是变量的第一部分(array = arr),然后大写以下单词:

$arrFormData

其中变量的其余部分采用不同的样式,其中的单词都是小写,没有类型定义,单词用下划线分隔。

$form_data

就个人而言,我倾向于保持变量与其余变量相同,纯粹是因为在函数的前两行,我确保它们是我期望的,或者抛出异常。在那之后,局部变量和传入的变量之间应该没有什么区别。但是,如果它保持你的代码更清晰,可以用一种方式输入它。

答案 3 :(得分:1)

您应遵循如何为其他变量命名参数的一般准则(名称应清晰,准确,具体,一致,通常为8-20个字符)。

对于前缀,我建议相反:保留参数未标记,并将函数中参数的任何内容标记为单独的变量。例如:

function upperCase($title) {
    $upTitle = ucfirst($title);
    return $upTitle;
}

在我的示例中,我使用了一个裸参数$title。在我转换输入之后,我将其称为其他内容,以表明它现在处于转换状态$upTitle。这样我知道它不再仅仅是函数参数。仅仅调用参数$pTitle并不能提供与此一致方法相同的优势。

如果您考虑一下,您的方法会在界面上标记所有参数,这不是最佳级别。如果查看程序的API,所有函数参数都标有$p含义参数,这是多余的。你说,我的所有参数都是参数,我们已经知道它们是API的一部分。所以我建议删除参数的前缀,而是使用一系列语义前缀来表示你对参数做了什么,以便在函数中对其进行转换,如我的例子所示。

我不同意之前的建议,即您应该让代码更清晰。拥有清晰的代码并不能消除明确的命名约定。

答案 4 :(得分:0)

我有一些变量的命名约定,比如成员字段或静态字段,因为变量的声明可能远离我使用它的代码。对于参数或局部变量,我不使用任何东西,因为变量定义通常距离大约十行。

特别是在所有IDE阵营中,人们似乎越来越不喜欢任何前缀或后缀,因为“IDE提供突出显示”。好吧,它对我没有帮助,我不喜欢只提供颜色的语义信息。但是,我可以看到这一点,因为变量名称应该使最重要的信息清晰,如果没有,没有任何帮助。

所以,这更多是关于风格。良好的命名比良好的前缀更重要。对于计划:选择一个,坚持下去。这将有助于可怜的维护开发人员。是的,那些人通常也喜欢{}围绕单个语句块等等,但它有帮助。

答案 5 :(得分:0)

对我来说混淆的最大机会在于成员职能。如果可能的话,我希望看到以下命名之间存在差异:

  • 局部变量:index
  • 类成员变量:m_index
  • 类静态变量:ClassIndex
  • 全局变量:INDEX

这可以更容易地追踪发生在哪里的事情。但是,我同意Toto的说法,最好让你的功能足够短,以便这些惯例不会影响或破坏你弄清楚发生了什么的能力。

答案 6 :(得分:0)

所以看完这一切之后,我决定选择:

ClassName methodName propertyName function_name (meant for global functions) $variable_name

答案 7 :(得分:0)

有很多方法可以命名变量(从答案中可以看出)

但是作为一般规则,它们应该这样命名,只要看一下变量本身,它做了什么以及它用于什么就可以了,就在那里,而不必经历成千上万行代码找出 - 而不仅仅是为了让其他人可能需要在以后进行故障排除,但如果您的代码需要数千行才能获得自己的好处,如果您自己必须在以后进行故障排除

无论您在任何代码中选择一致的命名约定 - 这都不能足够迭代:)

我个人使用以下内容:
变量的第一部分是为什么 第二部分是它用于什么/用于什么 对于函数,类等之外所需的变量,第三部分是函数,类等,它来自

例如:
我想在首页上为视频缩略图命名变量:
所以我从它是什么开始(lower_case) - 缩略图
然后我添加它用于什么(第一个字母upper_case) - 视频
因为我需要在功能之外的首页上使用它来自它的功能(由under_score分隔) - getVideoAll

给我$ thumbnailVideo_getVideoAll

无论我在哪里查看代码的任何部分(HTML,PHP等)中的变量,我都知道... 啊这是我试图显示的视频的缩略图,如果它由于某种原因不起作用我首先不需要去任何地方进行拼写检查,其次我确切地知道它是什么函数,类被调用(getVideoAll)并且可以去那里进行故障排除

如果我只是将它命名为$ tnVid,我个人可能会有一个含糊不清的概念,但是其他人看着它将不知道tn代表(t)humb(n)所有等等。
因此,为了排除故障,他们必须首先查看周围的代码,以便可能推断它可能是缩略图的变量,然后通过数千行代码来查找它来自哪个函数,类等等 - 这是几个小时工作只是找到你需要甚至开始故障排除 - 而不是看到$ thumbnailVideo_getVideo所有和去的5秒 -  啊这是视频的缩略图,我需要去函数getVideoAll进行故障排除