0
días
1
horas
21
mins
16
segs
Héctorbliss
@hectorbliss
hace 7 meses
Comparte en
¿Por qué preferir enums en vez de booleanos?
Bueno, el internet está dividido en este respecto, y creo que también tiene que ver con el lenguaje utilizado para argumentar, aunque creo que la respuesta que estoy a punto de ofrecerte, es válida para el lenguaje de la web, que es JS.
Para responder esta pregunta y a la vez intentando resumir el amplio debate en internet, aquí están 3 razones de peso para preferir enums antes que booleanos en tu aplicación web:
Una de las razones de mayor peso es el simple hecho de que cuando necesites "estados" en tu aplicación uses strings que lo representen semánticamente, es decir, una app que necesita de diferentes estados no puede ser binaria, "active" "inactive" puede tener muchos estados más, "idle", "fetching", "submitting" etc.
Además de que tener un enum para representar el estado de tu aplicación, te permite hacerla crecer, siendo capaz de agregar estados nuevos con el tiempo sin refactorizar.
Es mejor hacer esto:
const state = app.getStatus(); // 'in review'
que esto:
const state = app.isActive ? 'Active' : 'Inactive';
No siempre es claro lo que false
significa.
Por ejemplo, si pensamos en que tenemos un estado isApproved
que estamos trabajando con un booleano, ¿qué significaría el falso? ¿"NO_YET_APPROVED", "REJECTED", "PENDING", "IN REVIEW"?, sería difícil entender cuál es la situación real con un estado que no nos dice nada más que false
.
👀 ¡Ojo!, aquí también es importante recordar que los estados negados como "UNAPPROVED" no son una buena opción, es mejor un estado positivo como "DENIED". Esto ayuda con la semántica.
A veces necesitamos una banderita (flag) que dentro de una función nos diga si realizamos un paso extra o no, por ejemplo:
teniendo la función formatNumber(number [, includeDecimals])
donde el segundo parámetro puede decidir si el número retornado incluye decimales o no, la invocación podría ser formatNumber(price, false)
lo que sería muy poco semántico al leerla, sería mejor: formatNumber(price, INT)
teniendo incluso más opciones que solo true o false ("TWO_DIGIT", "TEXT_ONLY", "USD", "MXN", etc.).
Adicional a esto, usar enums en parámetros los convierte en "type-safe" pues es muy fácil intercambiar "flags" por error, pues al esperar booleanos es fácil equivocarse getValidation(data, true, false)
.
Seguro ya tienes en mente más ejemplos con parámetros donde será mejor usar enums explícitos.
Espero esto te haga convertir tus isLoading
en un enum state: 'idle' | 'fetching'
🤓 y ser mejor programador a partir de hoy.
¡Y ya está!, espero que esto te haga decidir usar más enums en tu código, déjame saber si esto te ha sido útil en mi twitter, también te dejo un par de enlaces que te pueden interesar (inglés).
Abrazo. Bliss.
© 2016 - 2023 Fixtergeek