Guia de rastreamento dinâmico Solaris

Expressões condicionais

Embora D não dê suporte a construções if-then-else, ela não oferece suporte a expressões condicionais simples que usam os operadores ? e : . Esses operadores permitem que três expressões sejam associadas, onde a primeira expressão é usada para avaliar condicionalmente uma das outras duas. Por exemplo, a declaração de D seguinte poderia ser usada para definir uma variável x como uma de duas seqüências, dependendo do valor de i:

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

Neste exemplo, a expressão i == 0 é avaliada primeiro para determinar se é verdadeira ou falsa. Se a primeira expressão for verdadeira, a segunda expressão será avaliada e a expressão ?: retornará seu valor. Se a primeira expressão for falsa, a terceira expressão será avaliada e a expressão ?: retornará seu valor.

Como em qualquer operador de D, você pode usar vários operadores ?: em uma única expressão para criar mais expressões complexas. Por exemplo, a expressão seguinte tomaria uma variável char c contendo um dos caracteres 0-9, a-z ou A-Z, e retornaria o valor desse caractere quando interpretado como um dígito em um inteiro (base 16) hexadecimal:

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

A primeira expressão usada com ?: deve ser um ponteiro ou um inteiro para que seja avaliada em seu valor verdadeiro. A segunda e a terceira expressões podem ser de quaisquer tipos compatíveis. Você não pode construir uma expressão condicional onde, por exemplo, um caminho retorne uma seqüência e outro caminho retorne um inteiro. A segunda e a terceira expressões também não podem chamar uma função de rastreamento como trace() ou printf(). Se você quiser rastrear dados condicionalmente, use um predicado, como discutido no Capítulo 1Introdução.