¿Sueña con utilizar la evaluación en cortocircuito, los operadores ternarios, liberarse de un bucle o salir de un método con una simple palabra clave?
Pues bien, ¡no sueñe más! Hemos escuchado y estado atentos a sus peticiones de características en el Foro 4D, así que aquí viene un conjunto de mejoras del lenguaje 4D que le ayudarán a simplificar su código.
return, continue y break
Añadimos 2 nuevas sentencias que le permiten saltar de un bloque de código:
- La palabra clave return termina la ejecución del método o función en el que aparece y devuelve el control al método que lo llama. También puede devolver un valor opcional:
function factorial ( $n : Integer) : Integer
If ($n<1)
return 1
Else
return $n*factorial($n-1)
End if
- La palabra clave break termina el bucle que la contiene. La siguiente sentencia que se ejecuta es la que está inmediatamente después del cuerpo del bucle:
For ($i; 1; 100)
If ($myTab{$i}="")
break
End if
End for
If ($i<101)
// your code
End if
- La sentencia continue termina la ejecución de las sentencias en la iteración actual del bucle actual y continúa la ejecución del bucle con la siguiente iteración:
For ($i; 0; 10)
If ($i=3)
continue
End if
$text+=String($i)
End for
// $text="012456789"
evaluación en cortocircuito
En una expresión que utiliza un operador AND o OR, una evaluación de cortocircuito significa que el segundo argumento se ejecuta o evalúa sólo si el primer argumento no es suficiente para determinar el valor de la expresión. Para ello hemos añadido dos nuevos operadores
Esta nueva forma de escribir los operadores AND y OR permite escribir este tipo de pruebas en una sola línea:
if (($myColl.length>0) && ($myColl[$i]>10))
// your code
End if
Si $myColl está vacío, el segundo argumento no se ejecuta, por lo que no se lanza ningún error.
Así que, por supuesto, todos ustedes entienden el interés de este estilo de escritura para hacer su código más legible. Pero le permite ir más allá.
Cuando se escribe expr1 && expr2 o expr1 || expr2, 4D evalúa ambas expresiones truthy o falsy naturaleza. Los valores indicados a continuación se consideran falsy:
- falso
- Null
- indefinido
- Null objeto
- Null colección
- Null puntero
- Null imagen
- Null fecha
- «» – Cadenas vacías
- [] – Colecciones vacías
- {} – Objetos vacíos
Todos los demás valores se consideran truthy.
El operador || devuelve la primera expresión si la primera expresión es truthy, en caso contrario devuelve la segunda.
El operador && devuelve la primera expresión si la primera expresión es falsyen caso contrario, devuelve la segunda.
Por ejemplo, el código siguiente no devuelve un booleano sino un valor numérico:
$salary:= $employee.salary || $minSalary
$employee.salary se evalúa primero. Si su resultado no es Null, se considera como truthy y se devuelve.
Si $employee.salary es Null, y por tanto falsyse evalúa la segunda expresión($minSalario) y se devuelve su resultado.
Operadores de asignación compuestos
Los operadores de asignación compuestos son una forma simplificada de escribir operaciones:
- El operador de asignación de suma (+=) suma el valor del operando derecho a una variable y asigna el resultado a la variable.
$a+=5
// equals to $a:=$a+5
- El operador de asignación de sustracción (-=) resta el valor del operando derecho de una variable y asigna el resultado a la variable.
$s-=5
// equals to $s:=$s-5
- El operador de asignación de división (/=) divide una variable por el valor del operando derecho y asigna el resultado a la variable.
$d/=2
// equals to $d:=$d/2
- El operador de asignación de multiplicación (*=) multiplica una variable por el valor del operando derecho y asigna el resultado a la variable.
$m*=5
// equals to $m:=$m*5
Operador ternario
Un operador ternario es una condición seguida de un signo de interrogación ( ? ), una expresión a evaluar si la condición es truthy seguida de dos puntos ( : ). Finalmente, la expresión a evaluar si la condición es falsy: condición ? valor Si es Verdadero : valor Si es Falso
Por ejemplo, se puede escribir:
$label:=($size>1000) ? "big" : "small"
El operador ternario es muy similar al comando Choose excepto que Choose sólo acepta una expresión booleana como condición cuando el operador ternario acepta todos los tipos y comprueba sus falsy y truthy condición.
Puede obtener más información aquí.