在函数名称中使用特殊字符

时间:2009-10-21 02:18:17

标签: programming-languages naming-conventions special-characters method-names

在Ruby中,标准约定是在方法名称的末尾使用问号来指示该方法返回一个布尔结果:

[].empty?   #=> true 

另一个标准惯例是,如果方法具有破坏性(即,它修改原始数据),则使用感叹号结束方法名称:

mylist.sort! # sort mylist in-place

最近我看到了Scheme中使用的这些约定。这让我想知道,其他语言使用/支持这个约定?是否有其他特殊字符通常用于这些或其他语言的命名?

4 个答案:

答案 0 :(得分:17)

答案当然是特定的语言(和语言文化)。

例如,根据语言的不同,以下所有内容都是合适的:empty-p,empty?,empty,is_empty或isEmpty。 (这些例子当然不包括在内)。

原始问题中的例子来自Ruby这样使用的地方?而且!在适当的情况下,接受方法名称。这种接受来自1)随时可以作为符号终结符在语法中2)使用?而且!在标准库中。但是,应该注意的是!一般不用于暗示“副作用”,通常只出现在替代形式:save / save !, sort / sort!等等。有大量的方法可以执行没有的效果!前缀。

就个人而言,如果我正在设计一种语言,我会允许吗?并且'是符号名称中有效的不带引号的尾随字符。尽管某些语言允许完全符号转义,例如Scala,但通常会避免使用这些符号,因为必须引用它们才能使用。

// in Scala, esp. with Java-compat, the last form is generally used although
// the first two are perfectly valid -- do what makes sense in the language
foo.`empty?`
foo.empty_?
foo.isEmpty

在罗马时......

  • Scala - empty?或空_? (不常见)
  • C / C ++ / JS / Java / Python / Perl - 不是吗?要么 !标识符; JS / Java允许$; $是Perl的一个印记
  • C / C ++ / Perl / JS - 在空中举手?
  • C# - IsEmpty(方法或属性)或空(属性)
  • Python - 每个Guido-guide的is_empty或isEmpty(虽然通常是 len 协议:if not len(foo): "empty!"
  • Java - isEmpty per Language Guide
  • Ruby - 特殊的尾随?而且! (引用?)
  • JS - 间接标识符访问:obj [“empty?”](不常见)
  • Lisp(常规):用于谓词的空-p;读者/报价的变化
  • 朱莉娅 - appends ! to functions that modify their arguments

很高兴看到更正和/或添加 - 只是一桶水。

答案 1 :(得分:3)

我不是功能名称中特殊字符的忠实粉丝,但是我也会用一根湿芹菜来消除疼痛,任何我发现将空格放入文件名的人:-)

使用?isEmpty()变种!sortInPlace()变体可以轻松完成。

即使没有标点符号,英语也是一种非常适应性的语言。

在任何一种情况下,我选择的语言(C和Java)都会使用标点符号来处理各种其他事情。将它们放入标识符也会使词法分析成为一场噩梦。

答案 2 :(得分:1)

在C#中将方法名称(或任何标识符)添加到“@”允许您使用常规保留关键字命名该方法。

void null() {}
// Invalid token 'null' in class, struct, or interface member declaration

void @null()
// compiles

不要这样做;它主要用于机器生成的代码,如数据集。 MSDN page on the topic.

答案 3 :(得分:-1)

如果你将Javascript算作一种语言,许多框架似乎都使用'$'字符来表示“选择器”;例如,可以在Prototype.js中使用$("id-of-some-item")或在jQuery中使用$("#id-of-some-item")来选择编写为<div id="id-of-some-item">的标记。这些选择函数的使用实际上非常复杂和强大(如果你有兴趣,请查看他们在prototypejs.org和jquery.com上的支持文档),但是他们归结为我认为在语义上类似于你所做的事情。指示。

同样,这假设您将Javascript算作一种语言。