Use of special characters in function names

空扰寡人 提交于 2019-12-03 01:20:51

The answer is, of course, language (and language culture) specific.

For example, depending on the language, all of the following are appropriate: empty-p, empty?, empty, is_empty or isEmpty. (These examples are, of course, not inclusive).

The examples in the original question come from Ruby where such use of ? and ! to end method names are, where appropriate, accepted. This acceptance comes from 1) readily accessible as symbol terminators in the grammar 2) use of ? and ! in the standard library. However, it should be note that ! is not used universally to imply "side-effect" and is generally only present on alternative forms: save/save!, sort/sort!, etc. There are an overwhelming number of methods that perform side-effects which do not have the ! prefix.

Personally, if I was designing a language, I would allow ?, ! and ' to be valid unquoted trailing characters in symbol names. Even though that some languages allow full symbol escaping, such as Scala, such symbols are usually avoided because it's a pain to have to quote them for use.

// 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

When in Rome...

  • Scala - empty? or empty_? (not common)
  • C/C++/JS/Java/Python/Perl - no ? or ! in identifiers; JS/Java allow $; $ is a sigil in Perl
  • C/C++/Perl/JS - hands up in the air?
  • C# - IsEmpty (method or property) or Empty (property)
  • Python - is_empty or isEmpty per Guido-guide (although usually len protocol: if not len(foo): "empty!")
  • Java - isEmpty per Language Guide
  • Ruby - special trailing ? and ! (quoting?)
  • JS - indirect identifier access: obj["empty?"] (not common for this)
  • Lisp (conventional): empty-p for predicate; variations in reader/quoting
  • Julia - appends ! to functions that modify their arguments

Glad to see corrections and/or additions -- is only a drop in a bucket.

I'm not a big fan of special characters in function names, but then I'll also beat to death, with a stick of wet celery to tease out the pain, anyone I find putting spaces into file names :-)

The ? variant can just as easily be done with something like isEmpty() and the ! variant with sortInPlace().

English is a very adaptive language, even without the punctuation.

In either case, my languages of choice (C and Java) use punctuation for all sorts of other things. Having them in identifiers as well would make the lexical analysis a nightmare.

Prepending "@" to a method name (or any identifier) in C# allows you to name that method with a normally-reserved keyword.

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

void @null()
// compiles

Don't do this; it's mainly for machine-generated code, like datasets. MSDN page on the topic.

If you count Javascript as a language, many frameworks seem to make use of the '$' character to mean "Selector"; For example, one might use $("id-of-some-item") in Prototype.js or $("#id-of-some-item") in jQuery to select a tag that was written <div id="id-of-some-item">. The use of these selection functions is actually quite complicated and powerful (if you're interested, check out their supporting documentation at prototypejs.org and jquery.com), but they boil down to doing something I consider semantically similar to what you've indicated.

Again, this is assuming you count Javascript as a language.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!