- Names representing types must be in mixed case starting with upper case. Line, SavingsAccount - Variable names must be in mixed case starting with lower case. line, savingsAccount - Named constants (including enumeration values) must be all uppercase using underscore to separate words. MAX_ITERATIONS, COLOR_RED, PI - Names representing methods or functions must be verbs and written in mixed case starting with lower case. getName(), computeTotalWidth() - Names representing namespaces should be all lowercase. model::analyzer, io::iomanager, common::math::geometry - Names representing template types should be a single uppercase letter. template ... template ... - Abbreviations and acronyms must not be uppercase when used as name [4]. exportHtmlSource(); // NOT: exportHTMLSource(); openDvdPlayer(); // NOT: openDVDPlayer(); \\ Using all uppercase for the base name will give conflicts with the naming conventions given above. A variable of this type whould have to be named dVD, hTML etc. which obviously is not very readable.\\ Another problem is illustrated in the examples above; When the name is connected to another, the readbility is seriously reduced; the word following the abbreviation does not stand out as it should. - Global variables should always be referred to using the :: operator. ::mainWindow.open(), ::applicationContext.getName() In general, the use of global variables should be avoided. Consider using singleton objects instead. - Private class variables should have underscore suffix. class SomeClass { private: int length_; } - Generic variables should have the same name as their type. void setTopic(Topic* topic) // NOT: void setTopic(Topic* value) // NOT: void setTopic(Topic* aTopic) // NOT: void setTopic(Topic* t) void connect(Database* database) // NOT: void connect(Database* db) // NOT: void connect (Database* oracleDB) Non-generic variables have a role. These variables can often be named by combining role and type: Point startingPoint, centerPoint; Name loginName; - All names should be written in English. fileName; // NOT: filNavn - Variables with a large scope should have long names, variables with a small scope can have short names [1].\\ Scratch variables used for temporary storage or indices are best kept short. A programmer reading such variables should be able to assume that its value is not used outside a few lines of code. Common scratch variables for integers are i, j, k, m, n and for characters c and d. - The name of the object is implicit, and should be avoided in a method name. line.getLength(); // NOT: line.getLineLength(); - The terms get/set must be used where an attribute is accessed directly. employee.getName(); employee.setName(name); matrix.getElement(2, 4); - The term compute can be used in methods where something is computed. valueSet->computeAverage(); matrix->computeInverse() this is a potential time consuming operation, and if used repeatedly, consider caching the result. - The term find can be used in methods where something is looked up. vertex.findNearestVertex(); matrix.findMinElement(); this is a simple look up method with a minimum of computations involved. - The term initialize can be used where an object or a concept is established. printer.initializeFontSet(); - Variables representing GUI components should be suffixed by the component type name. mainWindow, propertiesDialog, widthScale, loginText, leftScrollbar, mainForm, fileMenu, minLabel, exitButton, yesToggle etc. - Plural form should be used on names representing a collection of objects. vector points; int values[]; - The prefix n should be used for variables representing a number of objects. nPoints, nLines - The suffix No should be used for variables representing an entity number. tableNo, employeeNo An elegant alternative is to prefix such variables with an i: iTable, iEmployee. This effectively makes them named iterators. - Iterator variables should be called i, j, k etc. for (int i = 0; i < nTables); i++) { : } for (vector::iterator i = list.begin(); i != list.end(); i++) { Element element = *i; ... } - The prefix is should be used for boolean variables and methods. isSet, isVisible, isFinished, isFound, isOpen There are a few alternatives to the is prefix that fits better in some situations. These are the has, can and should prefixes: bool hasLicense(); bool canEvaluate(); bool shouldSort(); - Complement names must be used for complement operations [1]. get/set, add/remove, create/destroy, start/stop, insert/delete, increment/decrement, old/new, begin/end, first/last, up/down, min/max, next/previous, old/new, open/close, show/hide, suspend/resume, etc. - Abbreviations in names should be avoided. computeAverage(); // NOT: compAvg(); - Naming pointers specifically should be avoided. Line* line; // NOT: Line* pLine; // NOT: LIne* linePtr; - Negated boolean variable names must be avoided. bool isError; // NOT: isNoError bool isFound; // NOT: isNotFound - Enumeration constants can be prefixed by a common type name. enum Color { COLOR_RED, COLOR_GREEN, COLOR_BLUE }; An alternative approach is to always refer to the constants through their common type: Color::RED. - Exception classes should be suffixed with Exception. class AccessException { : } - Functions (methods returning something) should be named after what they return and procedures (void methods) after what they do.'''