Code Smells

Code Smells / Bloaters / Data Clump

Data Clump code smell icon

Data Clump

Data clumps are sets of related primitives (eg. 1, 3.14, "Hello", False) that always appear together. Data Clumps can be avoided by encapsulating them together in a class.

from math import sqrt

# Code smell
x_coordinate = 4
y_coordinate = -7
z_coordinate = 43

distance = sqrt(x_coordinate**2 + y_coordinate**2 + z_coordinate**2)  # Pythagorean theorem
print(distance)

# Improved
class Coordinates:
    def __init__(self, x_coordinate, y_coordinate, z_coordinate):
        self.x_coordinate = x_coordinate
        self.y_coordinate = y_coordinate
        self.z_coordinate = z_coordinate
    
    def distance(self):
        return sqrt(self.x_coordinate**2 + self.y_coordinate**2 + self.z_coordinate**2)  # Pythagorean theorem


my_coordinates = Coordinates(4, -7, 43)
print(my_coordinates.distance())

The problem with Data Clumps, is that it is not easy to centrally control their behaviour. In the example above, if we wanted to restrict y_coordinate to positive numbers only, we may need to edit the code in many places, leading to Shotgun Surgery.

Data Clumps are also often Primitive Obsessions.

Books about code smells

Learn to write better smelling code.

Refactoring: Improving the Design of Existing Code book cover

Refactoring: Improving the Design of Existing Code

Code smells: A Predictor of Remarkable Quality Improvement book cover

Code smells: A Predictor of Remarkable Quality Improvement

Clean Code: A Handbook of Agile Software Craftsmanship book cover

Clean Code: A Handbook of Agile Software Craftsmanship

I receive a commission on sales made from the above affiliate links.