Reemplazar if/else y switch en JavaScript y React
En proyectos modernos con JavaScript, TypeScript o React, es común encontrarse con bloques largos de if/else o switch. A medida que la aplicación crece, por ejemplo, un SaaS, un e-commerce o un panel administrativo— estos condicionales se vuelven difíciles de mantener y leer.
Una solución más limpia y escalable es reemplazar if/else y switch con un mapa de objetos, también conocido como Object Lookup Pattern.
Por qué evitar if/else y switch en JavaScript
Considera un SaaS con distintos roles de usuario: admin, editor y viewer. Cada rol necesita acceder a una ruta diferente en el dashboard.
Ejemplo con if/else
function getDashboardUrl(role: string): string {
if (role === "admin") {
return "/admin/dashboard"
} else if (role === "editor") {
return "/editor/content"
} else if (role === "viewer") {
return "/viewer/home"
} else {
return "/login"
}
}
Cada nuevo rol agrega más líneas de código y complica la legibilidad.
La alternativa: Object Lookup Pattern
function getDashboardUrl(role: string): string {
const routes: Record<string, string> = {
admin: "/admin/dashboard",
editor: "/editor/content",
viewer: "/viewer/home",
}
return routes[role] ?? "/login"
}
Ventajas
- Código más legible y limpio.
- Escalable: agregar un nuevo rol solo requiere añadir una clave.
- Mantenible: modificar rutas es más simple que cambiar bloques de condicionales.
Beneficios de reemplazar switch y if/else en JS
- Legibilidad: permite ver todas las opciones en un solo lugar.
- Escalabilidad: ideal para SaaS con roles, planes o estados dinámicos.
- Compatibilidad con TypeScript: usando
Record, puedes tipar claves y valores y evitar errores. - Útil en React: facilita renderizar componentes diferentes según un estado o valor.
Ejemplo real en un SaaS: estados de suscripción
Con switch (menos recomendable)
function getSubscriptionLabel(status: string): string {
switch (status) {
case "trial":
return "Período de prueba"
case "active":
return "Suscripción activa"
case "canceled":
return "Cancelada"
default:
return "Desconocido"
}
}
Con Object Lookup (recomendado)
function getSubscriptionLabel(status: string): string {
const labels: Record<string, string> = {
trial: "Período de prueba",
active: "Suscripción activa",
canceled: "Cancelada",
}
return labels[status] ?? "Desconocido"
}
En React: reemplazando if/else en componentes
En un frontend, podemos renderizar vistas distintas según el estado de un pago (pending, success, failed).
const PaymentStatus = ({ status }: { status: "pending" | "success" | "failed" }) => {
const views: Record<typeof status, JSX.Element> = {
pending: <p>Tu pago está en proceso...</p>,
success: <p>Pago confirmado</p>,
failed: <p>Error en el pago</p>,
}
return views[status]
}
Esto mantiene el JSX limpio y evita un switch gigante.
Cuándo no usar Object Lookup
- Cuando las condiciones son complejas, por ejemplo:
if (user.age > 18 && user.isPremium) { ... }
- Cuando la lógica depende del contexto o cálculos dinámicos.
- Para casos muy simples (2 o 3 opciones), un
ifcorto puede ser más claro.
Conclusión
Si buscas cómo reemplazar switch en JavaScript o la mejor alternativa a if/else en React, el Object Lookup Pattern es la solución:
- Más limpio y legible
- Fácil de mantener y escalar
- Ideal para roles, estados, planes o UI dinámica en React
Recuerda que no reemplaza todos los if. Para condiciones complejas, los condicionales tradicionales siguen siendo necesarios.
Cuando se trata de mapeo de claves a valores, este patrón simplifica tu código y lo hace mucho más mantenible.