cft

Code Smell 160 - Invalid Id = 9999

Don't couple real IDs with invalid ones. In fact: Avoid IDs.


user

Maximiliano Contieri

2 years ago | 1 min read

Maxint is a very good number for an invalid ID. We will never reach it.

TL;DR: Don't couple real IDs with invalid ones. In fact: Avoid IDs.

Problems

  • Bijection violation
  • You might reach the invalid ID sooner than your think
  • Don't use nulls for invalid IDs either
  • Coupling flags from caller to functions

Solutions

  1. Model special cases with special objects.
  2. Avoid 9999, -1, and 0 since they are valid domain objects and implementation coupling.
  3. Introduce Null Object

Context

In the early days of computing, data types were strict.

Then we invented The billion-dollar mistake.

Then we grew up and model special scenarios with polymorphic special values.

Sample Code

Wrong

#include "stdio.h"#include "stdlib.h"#include "stdbool.h"#define INVALID_VALUE 999int main(void){ int id = get_value(); if (id==INVALID_VALUE) { return EXIT_FAILURE; // id is a flag and also a valid domain value } return id;}int get_value() { // something bad happened return INVALID_VALUE;}// returns EXIT_FAILURE (1)

Right

#include "stdio.h"#include "stdlib.h"#include "stdbool.h"// No INVALID_VALUE definedint main(void){ int id; id = get_value(); if (!id) { return EXIT_FAILURE; // Sadly, C Programming Language has no exceptions } return id;} get_value() { // something bad happened return false;}// returns EXIT_FAILURE (1)

Detection

[X] Semi-Automatic

We can check for special constants and special values on the code.

Tags

  • Null

Conclusion

We should use numbers to relate to the external identifiers.

If no external identifier exists, then it is not a number.

Relations

Code Smell 120 - Sequential IDs

Code Smell 12 - Null

More Info

Null: The Billion Dollar Mistake

Y2K22 - The Mistake That Embarrasses Us

Disclaimer

Code Smells are just my opinion.

Credits

Photo by Markus Spiske on Unsplash

Bugs lurk in corners and congregate at boundaries.

Boris Beizer

Software Engineering Great Quotes

This article is part of the CodeSmell Series.

How to Find the Stinky parts of your Code

Upvote


user
Created by

Maximiliano Contieri

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


people
Post

Upvote

Downvote

Comment

Bookmark

Share


Related Articles