_Underscores in Function Names

2019-01-17 21:15发布

问题:

In a lot of languages with simple OO capability (PHP 4), or misunderstood OO capabilities (Javascript, C using function pointers, etc.), you'll end up with a function naming convention that uses leading underscores to to indicate privilege level.

//ex.
function _myPrivateFunction(){
}   

While individual teams are always going to come up with their own naming conventions like this, the underscore convention seems so prevalent that it made me curious about

  1. Where the technique first came from
  2. If there was ever any standardized systems (sort of like hungarian notation) developed around the convention

Beyond pure curiosity, I'm seeing this in a few codebases I'm dealing with right now, and I'd like to understand the possible headspaces of the developers who originally came up with it.

回答1:

In C++ world, member names that start with underscore are reserved for use by compiler (or low level STL like API) developers. It's not prohibited by compilers in any way, but that's the tradition.

This wiki link is quite informative on underscore.



回答2:

I cannot tell you the origin of this convention. My guess is, since the underscore is the only non-alphanumeric character allowed in identifiers in most programming languages, it is natural to chose it as a prefix for private members.

In Python, prefixing names with an underscore is more than just a convention: Symbols starting with an underscore are not imported by default when importing "everything" from a module, therefore the underscore indicates "private" / "internal usage".



回答3:

underscore ( _ ) stands for a private / protected function or variable.

Don't know WHO actually came up with it, but I know it is "supported" by Zend ( and the Zend coding standards ).

edit : http://framework.zend.com/manual/en/coding-standard.naming-conventions.html

-> section B.3.4 -> paragraph 2



回答4:

I first saw it when coding C++. Marking member variables with "m_" prefix was commonly done.

I prefer to not use any of that when I write Java. I make member variables clear using "this".



回答5:

I've seen underscore used as private functions and I've seen seen underscore as global functions. Also underscore is used to denote global variables within PHP itself.

$_POST $_GET $_SESSION etc..

It's just a naming convention so I'd ask the author, if he's around.