Código espagueti

↑ Me gusta (1)

Así llamamos al código complejo, y un código complejo es aquél que no alcanzamos a entender fácilmente. Imagina un plato hondo lleno de espagueti ¿puedes ver el enredo?... Sacar un hilo de espagueti no sería sencillo, traería a su vez otros espaguetis con él.

Se podría comparar con la estopa para pulir o con el intento de desenredar un kilo de anzuelos. ¿Se entiende la idea?.

Este término se usa para describir un proyecto escrito con muchas sentencias de control y bucles, donde incluso se copia y se pegan bloques de códigos de un archivo a otro o archivos enteros de una carpeta a otra.

Es importante describir esto porque supone una gran mejora programar mediante objetos debido a la aplicación de modularidad, abstracción, encapsulamiento, herencia, etc.

Nota Importante: Cuando estamos empezando con la programación orientada a objetos creemos que ya dejamos de escribir código espagueti, pero no es del todo cierto. Podemos crear clases manteniendo las malas prácticas...

Usar un if, for, while, etc no está mal. Lo que está mal es crear infinidades de sentencias dentro de un método de una clase y controlar el flujo de un sistema desde ahí dentro. Si no aprendemos esto correctamente estaremos creando código espagueti o programación estructurada dentro de clases.

Veamos esto desde otro punto de vista, no está mal escribir código espagueti cuando estamos comenzando si eso te ayuda a comprender mejor el problema que debes resolver, lo que está mal es dejarlo así sin la intención de mejorarlo.

Si creas código espagueti para resolver el problema y luego lo organizar y mejoras entonces ¡perfecto!, pero si creas código espagueti y dejas ese código así solo "porque funciona" entonces vas mal. Te perjudicas a ti mismo y vas a perjudicar a otros.

¿Qué es lo correcto?. Lo correcto es hacer lo que aprendimos en el curso de TDD en Laravel y es lo siguiente: "Una vez resuelto el problema debemos mejorar nuestro código, debemos refactorizar".

Refactorizar es mejorar nuestro código sin alterar el resultado logrado.

Si nos volvemos más técnicos podemos decir que al refactorizar vamos a convertir a los if y otras sentencias de control en métodos para mejorar en gran medida la visibilidad de nuestro código y así poder leer mejor nuestro código.

Programación Estructurada y OOP

Siguiendo con lo anterior podemos decir que hemos convertido a cada sentencia de control como if en nuevos métodos, ahora analicemos mejor: Cuales de estos métodos conforman una única responsabilidad para separarla en uno o varios objetos.

Por ejemplo: Imagina que necesitamos hacer un login común y corriente. Para ello podemos crear un controlador llamado LoginController.php y dentro creamos un método llamado login().

Dentro de login() colocamos toda la lógica necesaria para resolver el problema y una vez resuelto entonces dividimos en métodos a cada sentencia de control. Esto podría terminar en varios métodos llamados de la siguiente manera:

  1. login(): Método principal.
  2. validate(): Verificamos si son datos válidos (email y contraseña).
  3. attempt(): Verificamos si los datos existen en la base de datos para dar acceso.
  4. failed(): Retornamos el error correspondiente si los datos son incorrectos.
  5. response(): Devolvemos la vista adecuada si los datos son correctos.

Recuerda que todo corresponde a nuestro controlador LoginController.php. Leyendo y analizando bien podemos ver que todo corresponde al inicio de sesión, así que podemos crear una clase llamada Auth.php y mudamos todos nuestros métodos allá, dejando en LoginController.php solo al método principal login().

¿Se comprende?...

  1. Resuelves el problema como puedas (espagueti o no).
  2. Creas métodos de forma lógica y coherente.
  3. Creas uno o varios objetos solo si es necesario.

El punto (2) y (3) no debe alterar el resultado final ya conseguido en el punto (1).

  • Manuel Dautt (CTO)