What are the Data Type pitfalls?

Download Report

Transcript What are the Data Type pitfalls?

Software Engineering

Fundamental data types
Guidelines - numbers

Avoid “magic numbers” (hardcoded values that are not selfexplanatory):



Changes can be made more reliably
Changes can be made more easily
Code is more readable

Compare
for(i = 0; i < 100; i++)
with
for(i = 0; i < MAX_ENTRIES; i++)
Guidelines - numbers

Avoid “magic numbers” (hardcoded values that are not selfexplanatory):

Exception: 0s and 1s, as in
for(i = 0; i < MAX_ENTRIES; i++)
Guidelines - numbers




Anticipate divide-by-zero errors
Make type conversions explicit
whenever needed to make them
obvious to the reader of your code
Avoid mixed-type comparisons
Pay attention to your compiler
warnings!
Guidelines - integers



Check for integer division (integer
arithmetic differs significantly from
floating point arithmetic at this
point)
Check for integer overflow
Check for overflow in intermediate
calculations
Guidelines – floating point
 Floating
point
arithmetic is not real
number arithmetic
(never forget this)!
Guidelines – floating point




Avoid additions and subtractions on
numbers that have greatly different
magnitudes
Avoid equality comparisons
Anticipate rounding errors
If your language provides specific
support for specific data types (e.g.
currency), use it
Guidelines – characters and
strings

Avoid “magic characters” and
“magic strings”


Centralise them as values of variables
instead
Decide on internationalisation/localisation
strategies as early as possible in the
lifetime of a program
Guidelines – characters and
strings


Know how your language and
environment support Unicode; if you
need to support multiple languages,
use Unicode
Decide on a consistent conversion
strategy among string types
Guidelines – booleans

Use boolean variables to “document”
your program and simplify complicated
tests


Unclear code:
if ((index < 0) || (MAX < quantity) || (quantity
== lastIndex)) ...
Better code:
finished = ((index < 0) || (MAX < quantity));
repeated = (quantity == lastIndex);
if (finished || repeated) ...
Guidelines – enumerated
types


If available in your language, use them
If not, you can still simulate them




Use them for readability
Use them for reliability
Use them for modifiability
They can be good alternatives to plain
Boolean
Guidelines – enumerated
types




Check for invalid values
Define first and last entries for use as
loop limits
Reserve first entry (that should come
even before first) as invalid
Use first, first and last consistently
along the project
Guidelines – named constants


Use them, they are a nice way to
eliminate “magic numbers”
Use them consistently, NEVER use a
named constant in one place and a
literal representing the same value in
another
Guidelines – arrays





Make sure that all array indices are
within the bounds of the array
Check the end points of arrays
Make sure indices of multidimensional
arrays are used in the correct order
Watch out for index “cross-talk”
Consider using containers – sets,
stacks, queues, etc. - instead of
arrays
Guidelines – type aliasing

Type aliasing refers to creating alias
names to existing types or to
subsets of existing types




typedef in C++
Clearer code
Centralised type modifications
Improved reliability
Guidelines – type aliasing




Create types with functionally
oriented names, i.e. names that
refer to the problem instead of the
solution, storage organisation, etc.
Avoid predefined types. Use your
own types as much as you can
Do not redefine a predefined type
Consider creating a class instead of
a typedef