【问题标题】:Naming conventions for function parameter variables?函数参数变量的命名约定?
【发布时间】:2009-08-20 15:14:24
【问题描述】:

关于如何命名函数参数是否有命名约定或一些指南?

从那以后,我一直是这样的:

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

这样我就总能知道哪些变量是作为参数传递的。

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

这有一个主要原因吗?

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

【问题讨论】:

    标签: php parameters function naming-conventions


    【解决方案1】:

    如果:

    1. 您的函数/方法写得很好且简短(应该如此)
    2. 变量名称足够描述性

    不需要这种做法。

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

    所以这将是代码需要重构/改进的信号。

    【讨论】:

    • 哈哈,关于这个话题的观点很好。我一定会记住这一点,看看这是否可能是我命名约定的原因!
    【解决方案2】:

    我认为采纳 Code Complete 关于命名的建议 - 任何东西 - 都是合理的,整个第 11 章都是关于正确命名变量):

    • 不要将其命名为 j、k、i、m、n(除非它只是用于迭代)或“占位符”或“测试”。当“测试”起作用时,我通常不会花时间在变量被列出的地方重命名它。

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

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

    至于具体的参数,我从未使用过 P 表示法。我喜欢这个主意,但如果你把它们命名正确,是不是很清楚它们是函数的参数?

    【讨论】:

      【解决方案3】:

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

      $arrFormData
      

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

      $form_data
      

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

      【讨论】:

        【解决方案4】:

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

        至于前缀,我建议相反:不要标记参数,并将函数中对参数所做的任何事情标记为单独的变量。例如:

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

        在我的示例中,我使用了一个裸参数$title。转换输入后,我将其称为其他名称以表明它现在处于转换状态,$upTitle。这样我就知道它不再只是函数参数。仅仅调用你的参数$pTitle 并没有给你带来与这种一致方法完全相同的优势。

        仔细想想,你的方法在界面上标记了所有的参数,这不是最好的水平。如果你看你程序的API,你所有的函数参数都标有$p意思参数,这是多余的。你是说,我所有的参数都是参数,我们已经知道了,因为它们是 API 的一部分。因此,我建议删除参数的前缀,而是使用一系列语义前缀来表示您对参数所做的操作,以便在函数中对其进行转换,如我的示例所示。

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

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            【解决方案6】:

            对我来说最大的困惑是在成员函数中。如果可能的话,我希望看到以下之间的命名差异:

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

            这样可以更轻松地跟踪发生的情况。不过,我同意 Toto 的观点,最好让你的函数足够短,这样这些约定不会影响或破坏你弄清楚发生了什么的能力。

            【讨论】:

              【解决方案7】:

              您可以关注PHP Coding StandardsCoding standard for php 建议在核心php 中做出贡献。

              【讨论】:

                【解决方案8】:

                所以看了这一切之后,我决定去:

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

                【讨论】:

                  【解决方案9】:

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

                  但作为一般规则,它们应该这样命名,只要查看变量本身,它的作用和用途就很清楚,就在那里,不必经过数千行代码找出问题 - 不仅是为了以后可能还有其他人需要排除故障,而且如果你的代码有数千行长是为了你自己的利益,如果你自己以后必须排除故障

                  无论您选择什么命名约定,都必须在您的代码中保持一致 - 这不能重复:)

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

                  例如:
                  我想为首页上的视频缩略图命名变量:
                  所以我从它是什么开始(小写) - 缩略图
                  然后我添加它的用途(第一个字母大写) - 视频
                  因为我需要它在函数之外的首页上,所以我用它来自的函数(由 under_score 分隔)完成 - getVideoAll

                  给我$thumbnailVideo_getVideoAll

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

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-05-30
                    • 2013-07-31
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多