# Code Smells

Code Smells / Bloaters / Data Clump # 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 Code smells: A Predictor of Remarkable Quality Improvement Clean Code: A Handbook of Agile Software Craftsmanship

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