Javascript tiene principios

Así es, como buena estudiante en constante absorción de conocimientos, tengo como objetivo aprender buenas prácticas a la hora de programar, por eso le quiero dedicar un artículo a los principios de diseño de Javascript.

Javascript es un lenguaje de programación funcional y como tal, los principios hablan mucho de funciones y de cómo deberían usarse.

Lo que hay que evitar

En este sentido, debemos evitar que nuestro código tenga:

- Rigidez: con efectos cascada (tocas algo y, como si de un efecto dominó se tratara, se rompen otras cosas), con lo cual, es difícil de mantener

- Fragilidad: tiene mucho que ver con el anterior punto, en el sentido de que lo frágil se destruye fácilmente en cuanto tocas algo.

- Inmovilidad: no se puede reutilizar.

- Viscosidad: tendencia a escribir tu propio código, haciendo copia-pega o haciendo “apaños” y condicionales, en vez de solucionar el problema usando el código ya existente y refactorizándolo o adaptándolo a las necesidades actuales.

- Repetitividad: abuso del copia y pega (aunque esto en cantidades moderadas no supone un problema si hace que el código sea más entendible).

- Incoherencia: el código dice una cosa y hace otra.

Principios de diseño

Estos principios se han englobado en las siglas S.O.L.I.D.

S-Single Responsibility. Que no haga más cosas de las que dice, que tenga una finalidad sencilla y concreta.

O-Open-closed. Abierto en cuanto a poder usarse ampliamente, pero cerrado en cuanto a modificaciones (para que no se rompa).

L-Liskov Substitution

I-Interface Segregation

D-Dependency-Inversion. El objetivo es conseguir desacoplar el código. Las funciones de más alto nivel (que son las más cercanas al usuario, al lenguaje humano), saben que necesitan de otras funciones de más bajo nivel, pero no saben exactamente lo que hacen, pues esa información se mantiene de forma privada o en otra función aparte.

Conceptos que me guiarán en este camino

Acomplamiento.

Para conseguir esto, debemos tratar de que nuestras funciones sean en la medida de lo posible, cajas negras, y que no sepamos mucho acerca de cómo están hechas. Sabemos lo que hacen, pero no cómo lo hacen. Por ejemplo, sé que suma dos items, porque ejecuto una función que se llama sumaDosItems, pero no sé cómo lo hace, porque no conozco sus entrañas.

Cohesión.

Abstracción y nombramiento.

¿Query o Action?

Esto también va a determinar nuestro diseño funcional, ya que las funciones tipo query se pueden usar por ejemplo como callbacks o como parámetro, elevando así el nivel de abstracción y permitiendo por ejemplo tener funciones más puras, ya que no modifican el estado. Este tipo de funciones (query), se acercan más a la programación funcional.

Testeable.

If something does not work, ACT. Yes, you! That’s why I’m now #Developer at @vmware . Formerly @kairos_ds .Constantly absorbing knowledge. Proud #Adalaber

If something does not work, ACT. Yes, you! That’s why I’m now #Developer at @vmware . Formerly @kairos_ds .Constantly absorbing knowledge. Proud #Adalaber