在 Ruby 中,标准约定是在方法名称的末尾使用问号来指示方法返回布尔结果:
[].empty? #=> true
另一个标准约定是,如果方法具有破坏性(即,它修改了原始数据),则方法名称以感叹号结尾:
mylist.sort! # sort mylist in-place
最近我在 Scheme 中看到了这些相同的约定。这让我想知道,还有哪些其他语言使用/支持这个约定?是否有其他特殊字符通常用于这些或其他语言的命名?
在 Ruby 中,标准约定是在方法名称的末尾使用问号来指示方法返回布尔结果:
[].empty? #=> true
另一个标准约定是,如果方法具有破坏性(即,它修改了原始数据),则方法名称以感叹号结尾:
mylist.sort! # sort mylist in-place
最近我在 Scheme 中看到了这些相同的约定。这让我想知道,还有哪些其他语言使用/支持这个约定?是否有其他特殊字符通常用于这些或其他语言的命名?
答案当然是特定于语言(和语言文化)的。
例如,根据语言,以下所有选项都是合适的:empty-p、empty?、empty、is_empty 或 isEmpty。(当然,这些例子不包括在内)。
原始问题中的示例来自Ruby where such use of ? 和 !结束方法名称在适当的情况下被接受。这种接受来自 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_?(不常见)if not len(foo): "empty!"
:)很高兴看到更正和/或补充——只是杯水车薪。
我不是函数名中特殊字符的忠实粉丝,但我也会用一根湿芹菜来消除痛苦,我会在文件名中添加空格的任何人 :-)
变体可以很容易地用类似的?
东西isEmpty()
和!
变体来完成sortInPlace()
。
英语是一种适应性很强的语言,即使没有标点符号。
在任何一种情况下,我选择的语言(C 和 Java)都使用标点符号来表示各种其他事物。将它们放在标识符中也会使词法分析成为一场噩梦。
在 C# 中将“@”添加到方法名称(或任何标识符)之前,您可以使用通常保留的关键字来命名该方法。
void null() {}
// Invalid token 'null' in class, struct, or interface member declaration
void @null()
// compiles
不要这样做;它主要用于机器生成的代码,例如数据集。 MSDN 页面上的主题。
如果将 Javascript 算作一门语言,许多框架似乎都使用“$”字符来表示“选择器”;例如,可以$("id-of-some-item")
在 Prototype.js 或$("#id-of-some-item")
jQuery 中使用来选择编写的标签<div id="id-of-some-item">
。这些选择函数的使用实际上是相当复杂和强大的(如果你有兴趣,在prototypejs.org和jquery.com查看他们的支持文档),但他们归结为做一些我认为语义上与你相似的事情表明的。
同样,这是假设您将 Javascript 视为一种语言。