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();