Prefer Domain-Specific Types to Primitive Types
At 23 of September 1999, the $327.6 million Mars Climate Orbiter was lost while entering orbit due to a software error back at Earth. The error was later called the metric mix-up. The ground station software was working in pounds while the spacecraft expected newtons, leading the ground station to underestimate the power of the spacecrafts thrusters with a factor of 4.45.
This is one of many examples of software failures that could have been prevented if strong typing was applied. It also an example of the rationale behind the Ada language, primarily designed to implement embedded safety critical software. Ada support strong typing to the extreme, as illustrated in the example below.
subtype Velocity_In_Knot is Float range 0..500.00; subtype Distance_In_Nautical_Miles is Float range 0..3000.00; Velocity: Velocity_In_Knot; Distance: Distance_In_Nautical_Miles; Some_Number: Float; Some_Number:= Distance + Velocity; -- Will be caught by the compiler as a type error.
Developers in less demanding domains might also benefit from applying strong typing, especially those working in languages with abstract data types such as Java, C++ and Phyton. In these languages the abstract data type is know as
class. Using classes such as
DistanceInNaticalMiles adds a lot of value with respect to code quality:
The code become more readable as it expresses concepts of a domain, not only Float or Strings.
The code become more testable as the code encapsulate behavior that is easily testable.
The code facilitate re-use across applications and systems.
The approach is valid for statical and dynamical typed languages. The only difference is that developers using statical typed languages get some help from the compiler while those embracing dynamical typed languages need to rely on their unit tests alone.
The morale is to start exploring strong typing for the purpose of developing quality software.
By Einar Landre
This work is licensed under a Creative Commons Attribution 3
Back to 97 Things Every Programmer Should Know home page