繁体   English   中英

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

[英]Naming conventions for function parameter variables?

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

永远,我一直这样做:

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

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

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

是否有一个主要原因反对这个?

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

如果:

  1. 你的函数/方法写得很好而且简短(应该是这样)
  2. 变量名称足够描述

不需要这种做法。

如果你需要这个,那就意味着编写的代码不够可读(函数/方法太长),神秘的变量/函数名称,糟糕的OO实践,快捷方式,代码债务等等:)

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

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

  • 不要将它命名为j,k,i,m,n(除非它仅用于迭代)或“占位符”或“测试”。 当“测试”工作时,我经常不花时间重命名变量,无论它在哪里列出。

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

  • 保持它尽可能广泛和人类可读 ,因此您使用英语(或您的语言)编码而不是$ j = $ k / sqrt($ pi); 或同样难以理解的东西。

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

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

$arrFormData

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

$form_data

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

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

至于前缀,我建议相反:保留参数未标记,并将您在函数中使用参数执行的任何操作标记为单独的变量。 例如:

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

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

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

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

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

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

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

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

  • 局部变量: index
  • 类成员变量: m_index
  • class static variables: ClassIndex
  • 全局变量: INDEX

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

你可以遵循php的PHP编码标准编码标准,建议在核心php中做出贡献。

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

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

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

但作为一般规则,它们应该被命名为,只要看一下变量本身,它做了什么以及它用于什么就可以了,就在那里,而不必经过数千行代码来查找 - 而且不仅仅是为了以后可能需要排除故障的人,但如果您自己必须排除故障,如果您的代码长达数千行就可以了解自己的利益

并且无论你的代码是什么,你都可以选择一致的 - 这个不能迭代:)

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

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

给我$ thumbnailVideo_getVideoAll

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM