【问题标题】:Why is no one using the STL naming conventions? [closed]为什么没有人使用 STL 命名约定? [关闭]
【发布时间】:2011-01-27 17:25:42
【问题描述】:

Lots of C++ projects 使用某种驼峰式命名约定。唯一使用 STL 命名约定的项目似乎是 boost(正在为 STL 进行大量原型设计)。我知道有些项目早于 STL,但大多数新代码库(使用 STL)都坚持骆驼命名约定。

所以我的问题是:

  • 为什么没有人使用 STL 命名约定?
  • 您是否建议在新项目中使用 STL 命名约定而不是驼峰式命名?
  • 我看到一些项目对某些'STL type' 类(limited_stacksimplify_type)使用 STL 命名约定,而对其他所有类使用驼峰命名约定。这看起来像是将基础架构与应用程序代码分开的好方法。你会推荐这样做吗?

(我知道命名约定已经被讨论到死了。但我认为这个问题以前没有回答过。尤其是拆分命名约定的想法,在我看来,值得讨论。)

【问题讨论】:

  • 这又是一个风格问题......
  • 如果程序员使用 stdlib 命名约定并且@andreas 没有看到它,它发生了吗?肯定有人使用这些约定。
  • 真正的程序员使用下划线!
  • @James:我手边没有引文,但至少有一项研究表明,人们必须先习惯 camelCase,才能很好地阅读它。同一项研究表明,使用下划线不需要这样的适应期。
  • @mingos:找到它:citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.21.9043。再看一遍,我发现我对结果的记忆并不完全正确——他们删除了空格,但(显然)没有大写来分隔单词,所以它可能对驼峰式没有太多意义。至于我最初的评论,我认为任何以“真正的程序员”开头的东西都不应该太认真......

标签: c++ stl naming-conventions


【解决方案1】:

首先,让我强调一下,我的回答非常主观,仅基于我的经验,没有任何外部数据或资源的支持。

约定就是这样:约定。重要的不是你使用哪一种,而是哪一种对你和那些维护你正在使用的代码的程序员来说可读和舒适。

我在 C++ 中使用 CamelCase,因为它在视觉上更令人赏心悦目,而且我已经习惯了。另一方面,我在 C 语言中使用下划线和小写的函数名——它已成为一种区分我使用哪种语言的简单方法。

其他程序员肯定会给你其他理由——其中大部分或多或少是主观的,对他们或他们所属的开发团队来说是正确的。

看看其他语言。 C# 支持 CamelCase,首字母大写。为什么这比保留第一个小写更好?

使用 Zend 框架的 PHP 程序员也熟悉 Zend 命名约定:http://framework.zend.com/manual/en/coding-standard.naming-conventions.html

Drupal API 也是 PHP - 但使用下划线、小写字母和模块/主题特定前缀。

库、框架甚至整个语言都可能具有出于某种原因受到其制造者青睐的命名约定。这不会强迫您使用通常的命名约定退出:)。所以,总而言之,我认为你的问题的答案可以用一种愚蠢的方式来回答:只是因为:D。因为单个程序员对此感到满意。

至于第二个问题:不,我不建议对任何项目使用任何约定。选择最适合您的。您别无选择的唯一情况是您在开发团队中,出于某种原因想要坚持单一约定(例如一致的 API)。

第三个问题:是的,你可以这样看。我通常在我的类前面加上前缀,所以很明显UmbraModuleTCODConsole 是 Umbra 或 libtcod API 的一部分。至于 STL,我不喜欢命名空间。使用std::* 为所有内容添加前缀非常清楚地表明它是否属于不同库的一部分,因此基础架构/应用程序代码可以清楚地区分 - 将 CamelCase 与下划线放在次要问题:)。

【讨论】:

  • 前导大写变体有时称为 StudlyCaps 以区别于 camelCase。
  • 哦,谢谢,我不知道那个!
  • thisIsCalledCamelCase,而 ThisIsCalledPascalCase。 dofactory.com/topic/1141/…
  • 在使用 STL 算法或 STL 容器和您自己的容器的多态性时,使用非 STL 样式的问题变得很明显:突然您需要使用 sizebegin 等编写方法,这使您自己的代码在必要时确实不一致。此外,一开始我真的很喜欢使用 PascalCase/and_underscores 来区分 (TypesOrFunctions) / 和 (data),但是随着代码变得更加实用,您会将所有内容都视为数据 - 甚至在进行模板元编程时将类型视为值。
猜你喜欢
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 2010-10-29
相关资源
最近更新 更多