Robert’s Rules of Coders: #7 Use Constants For Values That Don’t Change
Use constants for values that don't change
All programming languages, at least that I know of, support the concept of variables that are used to hold values that change while the program is running. But a lot of cases exist where we need to define a value to our code even though that value will not change as the program runs, and we have three options for providing this value.
We could simply code the value (3.14
in this example) where it needs to be used:
Circumference = 3.14 * diameter
We could create a variable and assign the value to the variable:
Double pi = 3.14
Circumference = pi * diameter
We can declare a special type of variable known as a constant:
Double const pi = 3.14
Circumference = pi * diameter
Of the three options above, using a constant is usually the best option for several reasons.
Variables Over Values
First of all, if the value will be used in many places in the program, you will often save yourself time by placing the value in a variable or a constant so that if the value ever changes, you only need to change it in one place. You may decide that instead of using 3.14 that you prefer to use 3.14159 in the calculations. If your variable is a string
for a format such as “mm/dd/yy
”, you may decide later that you want the format to change to “mm/dd/yyyy
” and using a variable or constant makes the change easier, and more accurate because you are less likely to overlook some.
Second, when changing the value, you are less likely to change the wrong value when you use a variable than if you use a value. In the example below, you are less likely to change the tax rate from 3.14 to 3.14159 if you are using a variable than if you are using a value.
Third, variables make your code more readable. Many people may know that Pi is 3.14 and recognize the value in code, but few would recognize the number 8 as representing the number of planets:
- For I = 1 to 8
- //do some code
- Next I
Is less clear in meaning than the following:
- For I = 1 to NumberOfPlanets
- //do some code
- Next I
Constants Instead of Variables
Values that won’t change while the program is running can be defined as “constants” in most programming languages. This informs the compiler that the value will not change and the compiler can make the program a little more efficient. Often, what the compiler does is the equivalent of a find/replace everywhere the constant is used. This means that the variables will not need to be placed on the memory stack reducing the RAM required by the program to run.
By declaring that your variable is a constant, you also ensure that your own code does not attempt to unintentionally change the value of the variable while the program is running.
Here are some examples of good places to use constants instead of variables:
- When your program has a name that you show on Title Bars and in log file messages such as:
String const PROGRAMNAME = "My Program Name"
Note: Some languages have conventions for constant names such as using all upper case letters for the name. I recommend following the conventions of the language you code in.
- When your program formats a value in many places, especially if that format may ever change:
String const DATEFORMAT = "mon , dd, yyyy"
- Values that almost never changed that are used in multiple places:
Int const NUMBEROFSTATES = 50
- Messages or part of messages that occur frequently in the code. This also helps you reduce the number of spelling errors.
String const ERROROCCURREDHEADER = "An error has occurred!"
When you write programs that have code in multiple assemblies, or projects, or DLLs, you may want some constants to be used across the whole program, and others used just within a single assembly. Use scope and careful naming conventions to correctly place those constants. If a constant will only be used within one assembly, then declare the constant within that assembly and don’t make it globally accessible. If you want the same constant used by several assemblies, place it in an assembly all the others can reference and give it a good name like GlobalConstants
.
Solution for Program with Three Projects:
Project1
namedSharedAlgorithms
- Contains a class named
GlobalConstants
with these constants:String const ERROROCCURREDHEADER = “An error has occurred!”
String const DATEFORMAT = “mon , dd, yyyy”
- Contains a class named
Project2
namedTaxCalculations
- Contains a class named
TaxConstants
with these constants:Double const TAXRATEFORMISSOURI = .08
Double const TAXRATEFORKANSAS = .12
- Contains a class named
Project3
namedAppUI
- Uses the constants from the
SharedAlgorithms
project, but not the constants from theTaxCalculations
project because it does not need any of those values.
- Uses the constants from the
Warning: In many languages, you need to recompile both the AppUI
project and the SharedAlgorithms
project in the example above if the GlobalConstants
are changed. If you don’t, AppUI
will continue to use the values the constants had at the time it was compiled, not the values the constants in SharedAlgorithms
currently have.
Go to Robert’s Rules of Coders for more.