Guía de seguimiento dinámico de Solaris

Expresiones condicionales

Aunque D no proporciona compatibilidad para construcciones if-else-then, proporciona compatibilidad para las expresiones condicionales sencillas utilizando los operadores ? y :. Estos operadores permiten que tres expresiones se asocien cuando se utiliza la primera expresión para evaluar condicionalmente una de las otras dos. Por ejemplo, la siguiente declaración de D se podría utilizar para definir una variable x en una o dos cadenas en función del valor de i:

x = i == 0 ? "zero" : "non-zero";

En este ejemplo, la expresión i == 0 se evalúa en primer lugar para determinar si es true o false. Si la primera expresión es true, la segunda expresión se evalúa y la expresión ?: devuelve su valor. Si la primera expresión es false, la tercera expresión se evalúa y la expresión ?: devuelve su valor.

Al igual que con cualquier operador D, puede utilizar varios ?: operadores en una sola expresión para crear más expresiones complejas. Por ejemplo, la siguiente expresión tomará una variable char c que contenga uno de los caracteres 0-9, a-z o A-Z y devolverá el valor de este carácter cuando se interprete como un número en un número entero hexadecimal (base 16):

hexval = (c >= '0' && c <= '9') ? c - '0' :
    (c >= 'a' && c <= 'z') ? c + 10 - 'a' : c + 10 - 'A';

La primera expresión que se utilice con ?: debe ser un puntero entero para que se pueda evaluar para su valor verdadero. La segunda y tercera expresión pueden ser de cualquier tipo compatible. No debe construir una expresión condicional en la que, por ejemplo, una ruta devuelva una cadena y otra ruta devuelva un número entero. La segunda y tercera expresión tampoco deben invocar una función de seguimiento como trace() o printf(). Si desea realizar un seguimiento condicional de los datos, use un predicado en su lugar, como se indica en el Capítulo 1Introducción.