¿Es un int? ¿Es un String? ¡Es Superman!

Esta es una de esas cosas que veo demasiado a menudo

private int telefono;

Es común ver que datos como el teléfono, el código postal, o el DNI se representen mediante variables numéricas (int) en la programación, cuando en realidad deberían tratarse como cadenas de texto (String). Este error surge del razonamiento de que, al consistir únicamente de números, tales datos deben ser representados como tal. Sin embargo, los tipos de datos numéricos están diseñados para realizar operaciones aritméticas, algo que no aplicamos a datos como el número de teléfono o el DNI. ¿Alguna vez alguien ha visto algo del tipo telefono++? o ¿telefono = (telef1 + telef2)/2 ? Evidentemente no. Pues entonces el número de teléfono, el código postal o el DNI son un String.

La decisión de usar int o String debería basarse en la función del dato dentro de la aplicación. Si no se van a realizar cálculos matemáticos con el dato, entonces su naturaleza es textual, no numérica. Las preocupaciones sobre la optimización y el rendimiento son, en muchos casos, infundadas.

Y si aún no estás convencido:

  • Estos tipos de datos acostumbran a tener un significado (los dos primeros dígitos del código postal son la provincia, por ejemplo) que se puede extraer mucho más fácilmente con un String que con int .
  • Muchos de estos «números» pueden empezar por cero: códigos postales, teléfonos… lo que complica mucho su tratamiento como número.
  • Los requisitos de formato pueden cambiar, haciendo que un diseño inicial basado en números enteros sea insuficiente o inflexible. Cuantas veces he visto que alguien ha puesto puerta (en una clase Dirección) como int y luego no podía poner 4B y tienen que añadir un nuevo registro, este sí como un String.

En conclusión, a menos que un dato se vaya a usar en operaciones aritméticas, su representación más adecuada es como una cadena de texto (String).

Esta entrada fue publicada en Diseño. Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *