在功能名称中使用特殊字符

问题描述 投票:22回答:4

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

[].empty?   #=> true 

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

mylist.sort! # sort mylist in-place

最近,我已经看到了方案中使用这些约定。我不知道这使得其他什么语言使用/支持这个公约?是否有通常用于这些或其他语言命名的任何其它特殊字符?

programming-languages naming-conventions special-characters method-names
4个回答
18
投票

答案是,当然,语言(和语言文化)具体。

例如,依赖于语言,以下所有的适合:空 - 对,空?,空,is_empty或的isEmpty。 (这些实施例,当然,不包括在内)。

在原来的问题的例子来自红宝石所使用的场合吗?和!结束方法名是,在适当情况下,接受了。这种接受来自1)如在语法2)使用的符号的终止子容易接近?和!在标准库。但是,应该注意的是!并非普遍用于暗示“副作用”,并且通常只出现在可替代的形式:保存/保存!排序/排序!等有执行副作用的方法压倒性数量不具有所述!字首。

就个人而言,如果我设计一门语言,我会允许?,!和“是在符号名称不带引号的有效尾部字符。尽管有些语言允许完整符号逃脱,如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

在罗马的时候...

  • 斯卡拉 - empty?或empty_? (不常见)
  • C / C ++ / JS /的Java / Python的/ Perl的 - 不是吗?要么 !在标识; JS / Java的允许$; $是Perl中的一个印记
  • C / C ++ / Perl的/ JS - 手在空中?
  • C# - 为IsEmpty(方法或属性)或空(属性)
  • 蟒 - is_empty或每的isEmpty圭导(尽管通常len个协议:if not len(foo): "empty!"
  • 爪哇 - 每次的isEmpty语言指南
  • 红宝石 - 特殊拖尾?和! (引用?)
  • JS - 间接标识符访问:OBJ [ “空?”](不常见此)
  • 口齿不清(常规的):空 - 对谓词;在读取器的变化/引述
  • 朱莉娅 - appends ! to functions that modify their arguments

很高兴看到更正和/或增加 - 只是杯水车薪。


3
投票

我不是在函数名特殊字符的大风扇,但后来我还会打不死,用棍子湿芹菜梳理出的痛苦,任何人,我觉得把空格到文件名:-)

?变种也可以很容易地与像isEmpty()!sortInPlace()变种完成。

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

在这两种情况下,选择我的语言(C和Java)使用标点符号的各种其他的事情。在标识让他们也会使词法分析的噩梦。


1
投票

前面附加“@”的方法的名称(或任何标识符)在C#允许你命名与常保留关键字该方法。

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

void @null()
// compiles

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


-2
投票

如果算上JavaScript作为一门语言,许多框架似乎利用“$”字符的意思是“选择”;例如,人们可能会在的Prototype.js或$("id-of-some-item")使用$("#id-of-some-item")在jQuery来选择写<div id="id-of-some-item">的标签。使用这些选择功能实际上是相当复杂和强大的(如果你有兴趣,在prototypejs.org和jquery.com检查了他们的支持文档),但它们归结为做一些我认为语义相似,你已经什么表示。

再次,这是假设你指望JavaScript作为一门语言。

© www.soinside.com 2019 - 2024. All rights reserved.