January 01, 2021
Nikolay Kostov (Nikolay.IT)
Topics covered:
General Naming Guidelines
The Power of Meaningful Names
Naming Classes / Types / Applications
Naming Classes, Interfaces, Types, Delegates, Enumerations, Namespaces, Files, Folders, Assemblies, Applications
Naming Methods and Method Parameters
Naming Variables and Constants
Other Naming Guidelines
Video (in Bulgarian)
VIDEO
Presentation Content
General Naming Guidelines
Always use English
How will you feel if you read Vietnamese code with variables named in Vietnamese?
English is the only language that all software developers speak
Avoid abbreviations except accepted ones
Example : scrpCnt vs. scriptsCount
Avoid hard-to-pronounce names
Example : dtbgRegExPtrn vs. dateTimeBulgarianRegExPattern
Use Meaningful Names
Always prefer meaningful names
Names should answer these questions:
What does this class do? What is the intent of this variable? What is this variable / class used for?
Correct examples:
FactorialCalculator , studentsCount , Math.PI , configFileName , CreateReport
Incorrect examples:
k, k2, k3, junk, f33, KJJ, button1, variable, temp, tmp, temp_var, something, someValue
Names Should Be Meaningful in Their Context
Whether a name is meaningful or not depends on its context (its enclosing type)
Examples of meaningful names:
Generate() in the class LabyrinthGenerator
Find(string fileName) in the class FileFinder
Deposit(decimal amount) in the class Account
Examples of meaningless names:
Generate() in the class Program
Find(string name) in the class Program
Fake Meaningful Names
Junior developers often use “fake ” meaningful names that are in fact meaningless
Bad naming examples:
Topic6Exercise12, LoopsExercise12, Problem7, OOPLecture_LastExercise
Yes, Topic6Exercise12 indicates that this is solution to exercise 12, but what is it about?
Sum of numbers or Tetris game?
Better naming:
MaximalNumbersSubsequence
Naming Classes and Types
Naming types (classes, structures, etc.)
Use PascalCase character casing
In C#, JavaScript, Java, PHP
Correct examples:
RecursiveFactorialCalculator , TreeSet , XmlDocument , IEnumerable , Color , TreeNode , InvalidTransactionException , MainForm
Incorrect examples:
recursiveFactorialCalculator, recursive_factorial_calculator, RECURSIVE_FACTORIAL_CALCULATOR
Naming Classes and Structures in C#, JavaScript, C++ and Java
Use the following formats:
[Noun]
[Adjective] + [Noun]
Correct examples:
Student , FileSystem , BinaryTreeNode , Constants , MathUtils , CheckBox , Calendar
Incorrect examples:
Move, FindUsers, Fast, ExtremlyFast, Optimize, Check, FastFindInDatabase
Naming Interfaces in C#
Following formats are acceptable:
’I ’ + [Verb] + ’able ’
’I ’ + [Noun], ’I ’ + [Adjective] + [Noun]
Correct examples:
IEnumerable , IFormattable , IDataReader ,IList , IHttpModule ,ICommandExecutor
Incorrect examples:
List, iFindUsers, IFast, IMemoryOptimize, Optimizer, FastFindInDatabase, CheckBox
Naming Interfaces in Java
Following formats are acceptable:
[Verb] + ’able ’
[Noun], [Adjective] + [Noun]
Correct examples:
Serializable , Enumerable , Comparable , Runnable , CharSequence , OutputStream
Incorrect examples:
list, FindUsers, Run, Inumber, OPTIMIZER, IMemoryOptimize, FastFindInDatabase
Naming Enumerations in C#
Several formats are acceptable:
[Noun] or [Verb] or [Adjective]
Use the same style for all members
Correct examples:
enum Day {Monday, Tuesday, Wednesday, …} , enum AppState {Running, Finished, …} , enum WindowState {Normal, Maximized, …}
Incorrect examples:
enum Color {red, green, blue, white},enum PAGE_FORMAT {A4, A5, A3, LEGAL, …}
Naming Enumerations in Java
Several formats are acceptable:
[Noun] or [Verb] or [Adjective]
Use PascalCase for the enumeration and CAPITALS for its members
Correct examples:
enum Suit {CLUBS, DIAMONDS, HEARTS, SPADES} , enum Color {RED, GREEN, BLUE, …}
Incorrect examples:
enum Color {red, green, blue, white},enum PAGE_FORMAT {A4, A5, A3, LEGAL, …}
Naming Special Classes
Attributes
Add ’Attribute ’ as suffix
Correct example: WebServiceAttribute
Incorrect example: WebService
Collection Classes
Add ’Collection ’ as suffix
Correct example: StringsCollection
Incorrect example: ListOfStrings
Exceptions
Add ’Exception ’ as suffix
Use informative name
Correct example: FileNotFoundException
Incorrect example: FileNotFoundError
Delegate Classes
Add ’Delegate ’ or ’EventHandler ’ as suffix
Correct example: DownloadFinishedDelegate
Incorrect example: akeUpNotification
The Length of Class Names
How long could be the name of a class / struct / interface / enum / delegate?
The name should be as long as required
Don’t abbreviate the names if this could make them unclear
Your IDE has autocomplete, right?
Correct examples: FileNotFoundException , CustomerSupportNotificationService
Incorrect examples: FNFException, CustSuppNotifSrvc
Naming Namespaces in C#
Namespaces naming guidelines
Following formats are acceptable:
Company . Product . Component . …
Product . Component . …
Correct example:
Telerik.WinControls.GridView
Incorrect examples:
Telerik_WinControlsGridView, Classes
Naming Java Packages /JS Namespaces
Packages naming guidelines
Following formats are acceptable:
com . company . product . component . …
product . component . …
Correct examples:
com.apple.quicktime , hibernate.core
Incorrect examples:
IBM.DB2.Data, ibm.db2_data, Tetris.UI
Naming Project Folders
Project folders’ names should follow the project namespaces / packages
Correct examples:
com
Telerik.WinControls.GridView
Incorrect examples:
com_apple_quicktime, quicktime.src
Naming Files in C# / Java
Files with source code should have names matching their content
File containing a class Student should be named Student.cs / student.java
Correct examples:
StudentDAO.cs , Constants.java , CryptographyAlgorithms.cs
Incorrect examples:
Program.cs, SourceCode.java, _d2.cs, WebApplication1.jsp, Page1.aspx
Naming Files in JavaScript
Use small letters and hyphens for JavaScript file names (+ optionally .min + version)
Put a single library / component in a single file
Correct examples:
jquery-1.8.2.min.js , widgets.js , kendo.common.min.js , scriptaculous.js
Incorrect examples:
KendoUI.js, jQuery_classes.js, MyAjax.Library.js, jQuery-1.8.2.js
Naming .NET Assemblies
.NET assembly names should follow the root namespace in its class hierarchy
Correct examples:
Oracle.DataAccess.dll
Interop.CAPICOM.dll
Telerik.WinControls.GridView.dll
Incorrect examples:
OracleDataAccess.dll
Telerik_WinControlsGridView.dll
Naming JAR Files in Java
JAR files names should consist of single word or several words separated by hyphen
Can contain version information
Correct examples:
xalan25.jar
ant-apache-log4j.jar
Incorrect examples:
Ant.Apache.Log4J.jar
Oracle.JDBC.Drivers.jar
Naming Applications
Applications should be named meaningfully
Use [Noun] or [Adjective] + [Noun]
Use PascalCase
Correct examples:
BlogEngine
NewsAggregatorSerivice
Incorrect examples:
ConsoleApplication4, WebSite2
zadacha_14, online_shop_temp2
Naming Methods
Methods naming guidelines
Use meaningful method names
Method names should answer the question:
What does this method do?
If you cannot find a good name for a method, think about whether it has a clear intent
Correct examples: FindStudent , LoadReport , Sinus
Incorrect examples: Method1, DoSomething, HandleStuff, SampleMethod, DirtyHack
Use PascalCase for C# and camelCase for JavaScript, PHP and Java
Example (C#): LoadSettings
Example (JS/PHP/Java): loadSettings
Prefer the following formats:
[Verb], [Verb] + [Noun],[Verb] + [Adjective] + [Noun]
Correct examples: Show , LoadSettingsFile , FindNodeByPattern , ToString , PrintList
Incorrect examples: Student, Generator, Counter, White, Approximation, MathUtils
Methods Returning a Value
Methods returning values should describe the returned value
Examples :
ConvertMetersToInches , not MetersInches or Convert or ConvertUnit
Meters2Inches is still acceptable
CalculateSinus is good but Sinus is still acceptable
Ensure that the unit of measure is obvious
Prefer MeasureFontInPixels to MeasureFont
Single Purpose of All Methods
Methods should have a single purpose !
Otherwise they cannot be named well
How to name a method that creates annual incomes report, downloads updates from internet and scans the system for viruses?
CreateAnnualIncomesReportDownloadUpdatesAndScanForViruses
is a nice name, right?
Methods that have multiple purposes (weak cohesion) are hard to be named
Need to be refactored instead of named
Consistency in Methods Naming
Use consistent naming in the entire project
LoadFile , LoadImageFromFile , LoadSettings , LoadFont , LoadLibrary , but not ReadTextFile
Use consistently the opposites at the same level of abstraction:
LoadLibrary vs. UnloadLibrary , but NOT FreeHandle
OpenFile vs. CloseFile , but NOT DeallocateResource
GetName vs. SetName , but NOT AssignName
The Length of Method Names
How long could be the name of a method?
The name should be as long as required
Don’t abbreviate
Your IDE has autocomplete
Correct examples (C#):
LoadCustomerSupportNotificationService , CreateMonthlyAndAnnualIncomesReport
Incorrect examples:
LoadCustSuppSrvc, CreateMonthIncReport
Naming Method Parameters
Method parameters names
Preferred form: [Noun] or [Adjective] + [Noun]
Should be in camelCase
Should be meaningful
Unit of measure should be obvious
Correct examples: firstName , report , speedKmH , usersList , fontSizeInPixels , font
Incorrect examples: p, p1, p2, populate, LastName, last_name, convertImage
Naming Variables
Variable names
Should be in camelCase
Preferred form: [Noun] or [Adjective] + [Noun]
Should explain the purpose of the variable
If you can’t find good name for a variable check if it has a single purpose
Exception:
variables with very small scope, e.g. the index variable in a 3-lines long for-loop
Names should be consistent in the project
Naming Variables – Example
Correct examples:
firstName , report , config , usersList , fontSize , maxSpeed , font , startIndex , endIndex , charsCount , configSettingsXml , dbConnection , createUserSqlCommand
Incorrect examples:
foo, bar, p, p1, p2, populate, LastName, last_name, LAST_NAME, convertImage, moveMargin, MAXSpeed, _firtName, __temp, firstNameMiddleNameAndLastName
More about Naming Variables
The name should address the problem we solve, not to the means used to solve it
Prefer nouns from the business domain to computer science terms
Correct examples:
accounts , customers , customerAddress , accountHolder , paymentPlan , vipPlayer
Incorrect examples:
paymentsPriorityQueue, playersArray, accountsLinkedList, customersHashtable
Naming Boolean Variables
Give to boolean variables names that imply true
or false
Use positive boolean variable names
Correct examples:
hasPendingPayment , customerFound , validAddress , positiveBalance , isPrime
Incorrect examples:
notFound, findCustomerById, player, programStop, run, list, isUnsuccessfull
Naming Special Variables
Naming counters
Establish a convention, e.g. [Noun] + ’Count ’
Examples : ticketsCount , customersCount
State
Establish a convention, e.g. [Noun] + ’State ’
Examples : blogParseState , threadState
Variables with small scope and span
E.g. loop counters
Short names can be used, e.g. index , i , u
Temporary Variables
Do you really think temporary variables exist?
All variables in the program are temporary because are used temporary only during the program execution, right?
Temporary variables can always be named better than temp or tmp :
int temp = a[i]; (why not? int oldValue = a[i];)
a[i] = a[j];
a[j] = temp; (a[j] = oldValue;)
The Length of Variable Names
How long could be the name of a variable?
Depends on the variable scope and live time
More “famous” variables should have longer and more descriptive name
Naming Constants in C#
Use CAPITAL_LETTERS or PascalCase for const fields and PascalCase for readonly
Use meaningful names that describe their value
Correct examples:
private const int READ_BUFFER_SIZE = 8192 ;
public static readonly PageSize DefaultPageSize = PageSize.A4;
private const int FONT_SIZE_IN_POINTS = 16 ;
public const int MAX = 512 ;
public const int BUF256 = 256 ;
public const string GREATER = ">" ;
public const int FONT_SIZE = 16 ;
public const PageSize PAGE = PageSize.A4;
Naming Constants
Use CAPITAL_LETTERS for JavaScript /Java / PHP / C++ constants
Use meaningful names
Constants should describe their value
Correct examples:
public static final int READ_BUFFER_SIZE = 8192 ;
public static final PageSize DEFAULT_PAGE_SIZE = PageSize.A4;
public static final int FONT_SIZE_IN_POINTS = 16 ;
public static final int NAME = "BMW" ;
public static final int BufSize = 256 ;
public static final int font_size_pixels = 16 ;
Names to Avoid
Don’t use numbers in the identifiers names
Example :
PrintReport and PrintReport2
What is the difference?
Exceptions:
When the number is part of the name itself,e.g. RS232Port , COM3 , Win32APIFunctions
Don’t use Cyrillic or letters from other alphabet
FindСтудентByName, DisplayΩ2Protein
Never Give Misleading Name!
Giving a misleading name is even worse than giving a totally unclear name
Example :
Consider a method that calculates the sum of all elements in an array
Its should be named Sum or CalculateSum
What about naming it CalculateAverage or Max or CheckForNegativeNumber ?
It’s crazy, but be careful with “copy-paste”
What’s Wrong with This Code?
FileStream fs = new FileStream(FILE_NAME, FileMode.CreateNew);
BinaryWriter w = new BinaryWriter(fs);
for (int i = 0 ; i < 11 ; i++)
{
w.Write( (int ) i);
}
w.Close();
fs.Close();
fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
for (int i = 0 ; i < 11 ; i++)
{
Console.WriteLine(r.ReadInt32());
}
r.Close();
fs.Close();