¿Por que leer el libro Tipos y gramática de la serie You Don’t Know JS?

Tal y como reza el titulo, quiero exponer por qué es interesante leer este libro que os compartí traducido recientemete, bueno, quizas no por el libro en sí, sino por los temas que saca a reluzzir y seguro que desconoces. Quiero hacer una síntesis aquí de algunos puntos importantes para animarte a que lo leas.

Una de las cosas que se comenta es que según muchos desarrolladores es que Javascrip no tiene tipos. Pero la especificación claramente establece los siguientes tipos:

  • null
  • undefined
  • boolean
  • number
  • string
  • object
  • symbol — añadido en ES6!

También nos dejan claro que las variables en JS no tienen tipos, son los valores de las variables los que los tiene. Además siendo un lenguaje no fuertemente tipado, JS no exige que el tipo del valor de una variable permanezca inmutable en el tiempo, puede cambiar, y de hecho, lo hace bastante más a menudo de lo que creemos. En relación a esto, el libro profundiza en el mecanismo de coerción, mediante el cual el tipo de un valor es convertido a orto tipo.

Este mecanismo puede observarse a simple vista denominándolo entonces “coerción explícita” o ocurrir sin que nos demos cuentas debido a una operación siendo entonces una “coerción implícita”.

La cuestión es porqué nos debe interesar la coerción. Pues la coerción, concretamente la implícita, es la causa de que muchas veces no sabemos porqué nuestro código no funciona o porqué no entamos el código de otra persona que está utilizando este mecanismo a propósito, el cual al desconocer, hace que no entendamos los resultados. La coerción ocurre cuando hacemos comparaciones/comprobaciones por ejempo:

  • if(a)
  • var b = a ? true : false;

O cuando intentamos realizar operaciones con dos valores de diferentes tipos:

Conocer cuales son los mecanismos que ocurren internamente en la coerción hacen que sepamos que es lo que va a ocurrir y tendremos la certeza de que nuestro programa funcionará.

Interesante también es como funcionan los operadores && y || Según la especificación: El valor producido por un operador && o || no es necesariamente de tipo booleano. El valor producido será siempre el valor de una de las dos expresiones del operando. Así que pensabas que al usar estas operaciones estabas obteniendo un true o false, estabas equivocado y seguramente tengas un error en alguna parte de tu código aunque aún no se haya revelado.

De nuevo, entender que es lo que ocurre bajo el telón no sólo hará más consistente  y menos propenso a errores nuestro código, si no que nos proporcionará nuevas herramientas, como por ejemplo:

Citando al libro: foo() es llamado sólo porque a prueba ser veraz. Si esa prueba fallaba, esta expresión a && foo() se detendría silenciosamente — esto se conoce como “cortocircuito” — y nunca llamaría a foo().

Es por detalles como este por el que me ha encantado el libro. Para terminar, dejo una lista de las coerciones implícitas problemáticas en JS y hay que habríamos de anotarlas en un Postit en nuestro monitor para tenerlas bien a mano:

 

Si bien como se comenta en el libro, podemos reducir la lista a 3 pensando en que nunca deberíamos hacer una comparación “laxa” ( == ) con false en uno de sus lados. Leed el libro para saber porqué debéis evitar esas comparaciones y porqué se obtienen esos valores.


Deja un comentario

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