Re: generic programming: (in?)compatibility of CamelCase and snake_case
Jeff Schwab wrote:
Victor Bazarov wrote:
Jeff Schwab wrote:
Some people who clearly understand generic programming (probably a
good deal better than I do) seem to prefer CamelCase, even when
trying to interoperate with the C++ standard library. One striking
example is Andrei's book Modern C++ Design. What is the reason for
using CamelCase? Since static identifiers effectively define the
interface supported by each type, how is syntactic compatibility
maintained between CamelCase libraries and the snake_case STL?
What does a naming convention have to do with syntax? As long as
any identifier is valid and not a reserved one (which a convention
like CamelCase would ensure), what would be the objection to using
it?
Consider a naming convention that both method and type names begin
with capital letters. You define a container:
struct MyContainer {
//...
Iterator Begin();
Iterator End();
};
If you have a generic function template designed to work with standard
containers, it will expect the method names to be "begin" and "end",
not "Begin" and "End". To the extent that the actual and expected
names differ, the container and the function become incompatible. The same
holds for traits types, e.g. algorithm implementations may
need to know a container's value_type, rather than its ValueType.
I'm not saying that any particular convention is superior to any
other, but that generic code is only as generic as the naming
conventions it expects. Expecting names to follow a standardized
convention is no different (AFAICS) from expecting iterator types to
support prefix increment and dereference operations, or otherwise
associating concepts with syntax.
I like CamelCase becuase it's easier to read. I don't like some of the
suggestions such as classes starting with a capital letter, variables not or
vice versa becuase it is to easy to simply get it wrong. Typing an E
instead of an e for example being a hard bug to find.
I also kinda of like the fact that the STL uses all small letters and my own
variables and classes use CamelCase, it's fairly easy on a glance of a
program to determine what is coming from where. But in the long run, it
doesn't matter. Whatever your organization decides upon everyone use it. I
don't think there really is a right way.
The same with some classes having private variables and methods end with _
such as MyVar_ some people like it, some people don't. If you don't like
it, don't use it in your organization. If you do, try to get it used in
your organization. I really don't think there is a consensus amongst C++
programmers which is best nor do I feel there will ever be. Just be
flexible enough to use whatever formatting your orgranization calls for.
--
Jim Langston
tazmaster@rocketmail.com