You assign a value to a variable and use it, but never change it
TL;DR: Be declarative on mutability.
-
Readability
-
Honor the Bijection mutability.
-
Potential performance and memory issues.
- Change the variable to a constant and be clear on its scope
Refactoring 003 - Extract Constant
Refactoring 008 - Convert Variables to Constant
We are always learning from the domain.
Sometimes we guess that a value can change with the MAPPER.
Later on, we learn it won't change.
Therefore we need to promote it to a constant.
This will also avoid Magic Constants
<?
function configureUser() {
$password = '123456';
// Setting a password on a variable is a vulnerability
$user = new User($password);
// Notice variable doesn't change
}
<?
define("USER_PASSWORD", '123456')
function configureUser() {
$user = new User(USER_PASSWORD);
}
// or
function configureUser() {
$user = new User(userPassword());
}
function userPassword() : string {
return '123456';
}
[X] Automatic
Many linters check if the variable has just one assignment.
We can also perform mutation testing and try to modify the variable to see if tests break.
- Mutability
We must challenge ourselves and refactor when the variable scope is clear and we learn more about its properties and mutability.
Code Smell 116 - Variables Declared With 'var'
Code Smell 127 - Mutable Constants
Code Smell 107 - Variables Reuse
Code Smell 02 - Constants and Magic Numbers
Code Smells are just my opinion.
Photo by Noah Buscher on Unsplash
A complex system that works is invariably found to have evolved from a simple system that worked.
John Gall
Software Engineering Great Quotes
This article is part of the CodeSmell Series.