Code Smell 235 - Console Side Effects
You compute and log in the same place

TL;DR: Avoid side effects. Always.
Problems
Coupling
Testability
Reusability
Function Composition
Solutions
Decouple the code and avoid side-effects
Inject the output destination
Context
Outputting to the console within an internal function generates coupling and side effects
Sample Code
Wrong
function drawChristmasTree(height) {
let tree = '';
let currentFloor = 1;
while (currentFloor <= height) {
tree += ' '.repeat(height - currentFloor) + '馃巹'.repeat(currentFloor) + '\n';
currentFloor++;
}
// This function has side effects
// You cannot test it
console.log(tree);
}
drawChristmasTree(7);
Right
function createChristmasTree(height) {
let tree = '';
let currentFloor = 1;
while (currentFloor <= height) {
tree += ' '.repeat(height - currentFloor) + '馃巹'.repeat(currentFloor) + '\n';
currentFloor++;
}
return tree;
}
// The side effects are OUTSIDE the function
console.log(createChristmasTree(7));
// You can also test it
const createChristmasTree = createChristmasTree(7);
describe('createChristmasTree', () => {
it('should create a Christmas tree of the specified height', () => {
const expectedTree =
' 馃巹\n' +
' 馃巹馃巹\n' +
' 馃巹馃巹馃巹\n' +
' 馃巹馃巹馃巹馃巹\n' +
' 馃巹馃巹馃巹馃巹馃巹\n' +
' 馃巹馃巹馃巹馃巹馃巹馃巹\n' +
'馃巹馃巹馃巹馃巹馃巹馃巹馃巹\n';
const result = createChristmasTree(7);
expect(result).toEqual(expectedTree);
});
});
Detection
[X] Automatic
Several linters warn for this usage
Tags
- Globals
Conclusion
Instead of logging directly within internal functions, a more modular and flexible approach is to have functions return values or throw exceptions when errors occur.
The calling code can then decide how to handle and log these results based on the application's logging strategy.
Relations
Disclaimer
Code Smells are my opinion.
Credits
Image generated by Midjourney
Memory is like an orgasm. It's a lot better if you don't have to fake it.
Seymour Cray
This article is part of the CodeSmell Series.
About the author
I鈥檓 a senior software engineer loving clean code, and declarative designs. S.O.L.I.D. and agile methodologies fan.
Comments
Join the discussionNo comments yet. Be the first to comment.
Code Smells
In this series, we will see several symptoms and situations that make us doubt the quality of our developments. We will present possible solutions. Most are just clues. They are no hard rules.





