cover-img

Code Smell 48 - Code Without Standards

Working on a solo project is easy. Unless you go back to it after some months. Working with many other developers requires some agreements.

4 February, 2023

3

3

0

TL;DR: Don't be rude. Standardize your code!

Problems

  • Maintainability
  • Readability

Solutions

  1. Automate your styles and indentation.
  1. Enforce agreed policies.

Examples

Sample Code

Wrong

Correct sample taken from Sandro Mancuso's bank kata

[Gist Url]: # (https://gist.github.com/mcsee/ef87aec745f654878ce71c844f786f17)

package org.craftedsw.domain;

import static org.craftedsw.domain.Amount.amountOf;

import java.io.PrintStream;
import java.util.Date;

public class MY_Account {
// Some class have different case, underscores

private Statement privStatement;
// Attributes have visibility prefixes

private Amount currentbalance = amountOf(0);

public SetAccount(Statement statement) {
this.statement = statement;
}
// Setters and getters are not normalized

public GiveAccount(Statement statement)
{ this.statement = statement; }
// Indentation is not uniform

public void deposit(Amount value, Date date) {
recordTransaction(value, date);
// some variables are named after type and not role.
}

public void extraction(Amount value, Date date) {
recordTransaction(value.negative(), date);
// the opposite of *deposit* should be withdrawal
}

public void voidPrintStatement(PrintStream printer)
{
statement.printToPrinter(printer);
// Name is redundant
}

private void privRecordTransactionAfterEnteredthabalance(Amount value, Date date) {
Transaction transaction = new Transaction(value, date);
Amount balanceAfterTransaction = transaction.balanceAfterTransaction(balance);
balance = balanceAfterTransaction;
statement.addANewLineContainingTransation(transaction, balanceAfterTransaction);
// naming is not uniform
}
}

Right

package org.craftedsw.domain;

import static org.craftedsw.domain.Amount.amountOf;

import java.io.PrintStream;
import java.util.Date;

public class Account {

private Statement statement;

private Amount balance = amountOf(0);

public Account(Statement statement) {
this.statement = statement;
}

public void deposit(Amount value, Date date) {
recordTransaction(value, date);
}

public void withdrawal(Amount value, Date date) {
recordTransaction(value.negative(), date);
}

public void printStatement(PrintStream printer) {
statement.printTo(printer);
}

private void recordTransaction(Amount value, Date date) {
Transaction transaction = new Transaction(value, date);
Amount balanceAfterTransaction = transaction.balanceAfterTransaction(balance);
balance = balanceAfterTransaction;
statement.addLineContaining(transaction, balanceAfterTransaction);
}

}

The Right example has several other smells, but we keep it loyal to its GIT version in order to show only code standardization issues.

Detection

Linters and IDEs should test coding standards before a merge request is approved.

We can add our own naming conventions related to Objects, Classes, Interfaces, Modules etc.

Tags

  • Standardization

Conclusion

Use coding standards in your projects.

A well-written clean code always follows standards about naming conventions, formatting and code style.

Such standards are helpful because they make things clear and deterministic for the ones who read your code, including yourself.

Code styling should be automatic and mandatory on large organizations to enforce Collective Ownership.

Automatic code formatting by a parser or compiler is the way machines gives us feedback on how their interpret our instructions.

It could prevent disagreements and follows fail fast principle.

Fail Fast

Relations

Code Smell 06 - Too Clever Programmer

More Info

What exactly is a name - Part I The Quest

Credits

Comic by XKCD


The nice thing about standards is that there are so many to choose from.

Andrew S. Tannenbaum


Software Engineering Great Quotes


This article is part of the CodeSmell Series.

How to Find the Stinky Parts of your Code

3

3

0

Maxi Contieri

Buenos Aires, Argentina

🎓Learn something new every day.📆 💻CS software engineer 👷coding👨🏽‍🏫teaching ✍🏾writing 🎨Software Design 🏢SOLID 🌉TDD 👴Legacy 💩Code Smells

More Articles

Showwcase is a professional tech network with over 0 users from over 150 countries. We assist tech professionals in showcasing their unique skills through dedicated profiles and connect them with top global companies for career opportunities.

© Copyright 2024. Showcase Creators Inc. All rights reserved.