switch(true) con casos dinámicos en coldfusion?
cfml (2)
Para evitar declaraciones if anidadas y mejorar la legibilidad, quería crear una sentencia switch(true){ ... }
en Coldfusion. Lo usé a menudo en php, pero cuando pruebo esto en Coldfusion, recibo el siguiente error en la inicialización:
Error de plantilla
Esta expresión debe tener un valor constante.
Esto sucede cuando una caja de interruptor usa una variable en su condición, como:
//this example throws the error
switch(true){
case foo == 1:
writeOutput(''foo is 1'');
break;
}
Usar una instrucción switch (true) {...} con valores constantes (como explica el error) funciona:
//this example doesn''t throw the error
switch(true){
case 1 == 1:
writeOutput(''1 is 1'');
break;
}
¿Hay alguna forma de que la primera declaración funcione en Coldfusion? Tal vez con una evaluación de la variable o algún truco, o ¿es esto un definitivo no ir a Coldfusion?
Como señalaron Adam y Leigh, los valores del caso deben ser constantes. No estoy seguro de cuál es tu caso de uso real, pero puedes hacer algo como esto:
switch(foo){
case 1:
writeOutput(''foo is 1'');
break;
case 2:
writeOutput(''foo is 2'');
break;
case 3:
writeOutput(''foo is 3'');
break;
case 4:
case 5:
case 6:
writeOutput(''foo is 4 or 5 or 6'');
break;
default:
writeOutput("I do not have a case to handle this value: #foo#");
}
En resumen: no. El valor del caso debe ser algo que pueda compilarse a un valor constante. 1==1
puede ser, ya que es true
. foo == 1
no puede ser, ya que foo
solo está disponible en tiempo de ejecución.
básicamente, lo que estás describiendo es una construcción if
/ else if
/ else
todos modos, así que solo usa uno de esos.