【问题标题】:_Underscores in Function Names_函数名中的下划线
【发布时间】:2024-10-20 11:05:01
【问题描述】:

在许多具有简单 OO 功能 (PHP 4) 或被误解的 OO 功能(Javascript、使用函数指针的 C 等)的语言中,您最终会得到一个使用前导下划线来指示的函数命名约定权限级别。

//ex.
function _myPrivateFunction(){
}   

虽然各个团队总是会提出自己的这样的命名约定,但下划线约定似乎如此普遍,让我很好奇

  1. 这项技术最初来自哪里
  2. 如果有任何标准化系统(有点像匈牙利符号)围绕该约定开发

除了纯粹的好奇之外,我在我现在正在处理的几个代码库中看到了这一点,我想了解最初提出它的开发人员可能的顶空。

【问题讨论】:

  • 在 Python 中,它不仅是一种命名约定,而且两个前导下划线实际上使成员私有!

标签: php javascript oop naming-conventions history


【解决方案1】:

在 C++ 世界中,以下划线开头的成员名称保留给编译器(或类似 API 的低级 STL)开发人员使用。编译器并没有以任何方式禁止它,但这是传统。

这个 wiki 链接在 underscore 上提供了很多信息。

【讨论】:

  • 实际上,所有以下划线开头的名称都保留在全局命名空间中,但只有包含双下划线或以下划线和大写字母开头的名称在所有上下文中都保留。请参阅标准中的*.com/questions/228783/… 或 17.4.3。
  • 这看起来像是最古老的,所以对你来说是一个胜利。 @onebyone,我开始真正理解为什么 c++ 现在名声这么差了 :)
  • 我假设下划线 wiki 的链接是指编程的链接(在我认为的答案中添加了此链接后添加了消歧)。所以应该改成:en.wikipedia.org/wiki/Naming_convention_(programming)?
【解决方案2】:

我不能告诉你这个约定的起源。我的猜测是,由于下划线是大多数编程语言中唯一允许在标识符中使用的非字母数字字符,因此选择它作为私有成员的前缀是很自然的。

在 Python 中,使用下划线作为名称前缀不仅仅是一种约定:从模块中导入“所有内容”时,默认情况下不会导入以下划线开头的符号,因此下划线表示“私有”/“内部使用”。

【讨论】:

    【解决方案3】:

    下划线 (_) 代表私有/受保护的函数或变量。

    不知道是谁提出的,但我知道 Zend(和 Zend 编码标准)“支持”它。

    编辑:http://framework.zend.com/manual/en/coding-standard.naming-conventions.html

    -> B.3.4 节 -> 第 2 段

    【讨论】:

      【解决方案4】:

      我在编写 C++ 时第一次看到它。通常使用“m_”前缀标记成员变量。

      在编写 Java 时,我宁愿不使用任何这些。我使用“this”明确成员变量。

      【讨论】:

      • 成员变量在java中自动标记,因为工具使用静态分析。在您使用的任何编辑器中查看变量的颜色!放这个。在前面意味着你依靠它来获得认可。如果您依赖于某个人记得使用 .this 而不是一台确切知道变量是什么的机器,那么您显然依赖于错误的指标。
      • 无论对错,我怀疑有些人仍然使用无法进行体面(或任何)代码分析的文本编辑器编写(或特别阅读)Java。我尝试将语法高亮视为有助于我编辑的东西,而不是其他人想要能够阅读我的代码所需要的东西......
      【解决方案5】:

      我见过下划线用作私有函数,也见过下划线用作全局函数。下划线也用于表示 PHP 本身的全局变量。

      $_POST $_GET $_SESSION etc..
      

      这只是一个命名约定,所以我会问作者,如果他在附近。

      【讨论】:

        最近更新 更多