3 formas de comparar y asignar en Javascript

Enmanuel Jarquín
200CodeBlog
Published in
4 min readDec 7, 2017
Image result for i love javascript

A todos nos gusta escribir código que se vea elegante y sobre todo límpio, siempre estamos buscando nuevas formas de hacer la misma operación para añadir mejoras de rendimiento, legibilidad, disminuir la cantidad de líneas de código, etc. Miremos 3 formas de evaluar una condición y asignar un valor dependiendo de dicha respuesta.

Dado los siguientes roles:

  1. Administrador
  2. Usuario mortal

Vamos a evaluar el tipo de perfil del siguiente objeto:

var user = {
displayName: 'Pedro Baltodano',
roleId: 1
}

Decidiremos si mostramos el menú del administrador dependiendo del tipo de perfil del usuario.

// Declaramos e inicializamos la variable showMenu,
// con la que determinaremos si mostramos el menú.
var showMenu = false
  1. Comparar y asignar un valor a showMenu
showMenu = user.roleId == 1

Preguntamos si el rol del usuario es igual a 1 (user.roleId == 1), la respuesta de esa comparación se la asignamos a la variable showMenu, en este caso es true.

2. Usando operador ternario

showMenu = user.roleId == 1 ? true : false

Esta expresión se divide en 3 secciones, la primera es la comparación (user.roleId == 1), la segunda es donde definimos lo que sucederá en caso de que la comparación de verdadero (? true), en caso contrario ( : false), y finalmente ese resultado ya sea true o false se lo asignamos a la variable showMenu, siendo el resultado true .

3. La tercer forma y para algunos desconocida, es usando el operador NOT NOT (doble negación)

Con el simple NOT (!) negamos una expresión, por ejemplo:

!true =>> false
!false =>> true

Pero usando ese operador 2 veces hacemos una doble negación:

!!true =>> true
!!false =>> false

Aplicándolo a nuestro ejemplo:

showMenu = !!user.roleId

El resultado es el mismo que en las 2 primeras formas, lo que está haciendo es que con el primer NOT niega el valor de user.roleId y el resultado es false, luego vuelve a negarlo y resulta true.

Obviamente no podemos hacer esto: showMenu = user.roleId, porque asignaría el valor de user.roleId a showMenu, y si sólo dejamos un operador NOT, siempre dará la respuesta contraria al valor real de la variable, tenemos que poner 2 operadores NOT, para que valide el valor real de la variable a la segunda negación.

Tal vez te preguntarás:

¿Cuál uso?

Es notorio que nos ahorramos trabajo con la tercer forma, pero el problema es leerlo y entenderlo, de seguro si otro programador trata de entender tú código se detendrá unos cuantos minutos ahí, a menos que todo el equipo se ponga de acuerdo sobre el estándar para codear (que así debería de ser), en caso que sólo tú lo sepas, puedes hacer 2 cosas, usar el que todos conozcan o compartirles este post (que también así debería de ser).

¿Cuál es mejor?

Vamos a hacer una simple comparación del rendimiento:

Según el test anterior, refleja que es óptima la primer forma (==), ya que puede realizar más operaciones en menor tiempo, así el operador NOT NOT queda descartado.

Este segundo test nos lanza un array con 3 objetos que corresponden a las 3 formas antes mencionadas de realizar comparaciones y asignaciones, aquí notamos que el primer lugar se lo lleva el operador ternario y una vez más el operador de doble negación lleva las de perder.

Conclusión

El uso del operador de doble negación es opcional de cada desarrollador y del equipo en el que está trabajando, si nos dejamos llevar por las pruebas anteriores la mejor opción a usar es el operador ternario, aunque en los propios módulos de NodeJs usan doble negación.

https://github.com/nodejs/node/blob/master/lib/buffer.js

También podemos usarlo, siempre y cuando se evalúen los escenarios.

--

--

Enmanuel Jarquín
200CodeBlog

I’m a software developer, I love learning Javascript(Node, React), DJango and practicing SOLID with C#, writter in medium/funnydev