一位程序员,多种语言-名称难题


14

当您使用多种编程语言工作时,会遇到问题...

一种语言的有效名称(标识符)在另一种语言中无效。例如...

var new function this是JavaScript中的关键字,但您可以在Python中自由使用它们。同样list dict def可以在JavaScript中使用而不会出现问题。

这是非常普遍的事情,程序员通常会在使用多种语言进行编程时很快熟悉它们。

但是,在进行协作时,必须为团队成员制定一些规则/准则,以确保代码的一致性和统一性。对于团队来说,这个问题比简单地记住在编程时记住什么是有效以及什么不是有效更为重要。

所以,我的问题是,您采用什么策略...

  • 只需将您使用的所有语言中出现的所有保留字合并起来,向所有人分发一份清单,然后放弃使用?
  • 接受多样性并在“上下文切换”时加倍努力
  • 采取一种可以使用另一种语言的语言的中间立场,反之亦然

(注意:我只在这个问题上谈论Python和JavaScript ...但是请更广泛地回答这个问题)

-更新-

感谢所有的答案。因此,我看到的普遍共识是,无论程序员使用其他语言做什么,都允许程序员使用任何名称-只要名称具有描述性,就不会受到伤害。


1
或者只要求每个变量名都以开头$。它可以在PHP,JavaScript和某些C / C ++编译器中运行。认真地说,这是PHP正确的恕我直言的一件事。
乔伊·亚当斯

Answers:


46

在我30多年的经验中,使用过多种语言进行编程之后,我会说,试图找到一种适用于任何语言的命名标准可能是一个空想。

在我的早期经验中,我尝试在C中使用#define宏来创建使我的C代码看起来像之前使用的Pascal代码的东西。我曾经习惯于在Pascal上编程,以至于我想如果我可以使C像Pascal一样工作,那将使我更有效率。我很快发现我错了。

使我变得更有效率的是学习C而不是仅仅因为Pascal语法使我更舒适而尝试将Pascal语法用于另一种语言。

我认为您可能会阻止程序员使用一种语言做某事,这可能会限制您的程序员,只是因为用您正在使用的另一种语言做错了。

如果将命名约定限制为对解释变量使用有意义的事物,那么您可能会使用任何语言创建好的代码。


3
有意义的名称是您需要的全部理由。
JeffO 2011年

24

您不应该首先为“列表”,“新”,“变体”,“此”命名,因为它们在任何语言中的描述性都不够。


2
同上“功能”。如果不是关键字,就不是故意的。
MPelletier

11

从javascript切换到python已经是上下文切换。我认为如果变量名发生转移并不坏,特别是如果名称的更改是语言惯用的。甚至有人可能会说,较难的上下文切换在这种情况下会有所帮助,因为它有助于强化“老兄,您正在编写的是javascript而不是python”。


7

我认为,如果您使用描述性变量命名,那么您描述的问题应该很小。话虽如此,如果它是最小的,那么接受由语言之间的变量命名引起的上下文转换也将变得最小。


5

大多数保留字(任何语言)都非常笼统。我更喜欢描述性更强的变量/函数名称,这意味着我几乎从未遇到过此问题。我应该承认自己被查尔斯·西蒙尼(Charles Simonyi)最初的命名方式所感染-这是70年代后期在施乐(Xerox)之前,甚至还没有被称为匈牙利符号(Hungarian Notation)-而且这也往往意味着这些名字并非无理智的人将永远用作保留字。


5

你不应该浪费在写作指导你的时间,直到你发现这是一个实际的而不是假设的问题。

我可以想到的一种情况是当您在编程语言之间共享数据结构时。例如,如果您在客户端具有反映在服务器端Python对象中的Javascript对象,并且您自然希望它们为其成员使用相同的名称。在这种情况下,规则很简单:请勿使用任何语言中的保留字名称。而已。如果需要,请在准则中写下。现在继续执行更重要的任务。

顺便说一句,列表和字典都不是Python中的保留字。它们可以用作变量名,尽管它们很糟糕。


3

以我的经验,解决方法是拥有适用于所有语言的广泛命名约定。无论是JavaScript,C#还是其他一些时髦的语言,变量和类的命名方式都可以成为代码库中的标准,这通常是解决该问题的方式。可以通过每个人的共识来达成这些约定,只是大多数人想要一个指南,管理人员说“这就是我们的做法”,或者我想象的其他几种可能性。

我很少看到您描述的标识符问题,因为在大多数情况下,我的类或变量名具有足够的描述性,不会轻易发生冲突。同时,如果一个人正在与其他人一起工作,那么除了要清楚团队要如何处理这一点之外,这一点很重要。


2

除非您打算将代码从一种语言迁移到另一种语言,否则我看不出这怎么可能成为问题。如果您个人倾向于忘记哪些变量名有效,那么除非您个人确定变量名有效,否则请不要使用变量名。但是,如果其他人使用无效的变量名,则他们的代码将无法编译或运行。因此,如果您正在处理其他人的代码,并且他们将其称为“ var”,则可以确定它在他们使用的任何语言下都是有效名称。

如果您打算将代码从一种语言迁移到另一种语言,那么您可能需要一个禁止名称列表。例如,我的C编码实践文档禁止使用newclass作为变量,因为这会使代码更难移植到C ++。在这种情况下,如果有必要,可以设定简化工作的规则,


-2

只需坚持使用小写的CamelCase。它无处不在。这称为在不兼容的系统之间寻找最低的公分母,您会发现自己经常这样做!


5
除某些语言外,首字母的语法意义重大。
Karl Bielefeldt

1
...并且违反了许多语言建立的文化准标准。
tdammers

匈牙利符号比CamelCase更加令人困惑... ;-)
Zeke Hansell

@Karl:显然,该建议仅限于该语言的范围。您知道Java可以以美元符号开头的变量名吗?我看过看起来像PHP的Java代码,很明显以前的程序员学习编程的地方!
dotancohen

@dotancohen:我记得很多年前在一个业余杂志上看过一个pascal程序,当时pascal刚刚出现。从代码的结构(以及它们使用全局变量将值传递给子例程和函数的事实)显而易见,该程序是我见过写过Pascal 最好的基本程序之一。;-)
Zeke Hansell
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.