Tom said:
Hi
Is this a conditional ? what is the structure of the statement?
Lots of good answers already, but I'll add my 2 cents: ?: is nothing but
shorthand for a longer construction. A tediously common pattern in almost
any programming context is to have to write something of the form:
if(condition)
variable = value1;
else
variable = value2;
Kernighan and Ritchie, when they cooked up C many years ago, recognized that
the point of that code, its underlying semantics, is to assign to the
variable. But the assignment has become disguised by wrapping it in an if
statement. Recognizing that this is such a common pattern they cooked up
the ?: operator to allow developers to make the intention of their code more
explicit. Thus, instead of hiding the assignment inside of an if(), you
hide the if() inside of the assignment:
variable = condition ? value1 : value2;
Not only can this make your code (slightly) more self-documenting, if the
actual variable name in question is something long and complicated, the ?:
version can certainly be easier to type. Either way--written as an if()
block or as an assignment--both pieces of code should compile to exactly the
same machine code (or IL or whatever).
The drawback, of course, is that this solution is not very scalable to
situations where you have more than a boolean choice to make. People who
favor the use of ?: can be tempted to nest them, as in:
variable = condition1?value1

condition2?value2:value3);
but this sort of thing quickly--no, immediately--becomes difficult to read,
understand, debug, and maintain. Personally, I don't use ?: very much
myself, and generally only in the context of parameters to function calls;
if I have a lengthy function call, something like:
function(paramter1, parameter2, paramater3,
"some long string",
parameter4, parameter5);
and then I find that in some circumstances parameter5 needs to have one or
the other value, then it's much easier to write:
function(paramter1, parameter2, paramater3,
"some long string",
parameter4,
condition?value1:value2);
than it is to replicate the entire function call inside an if(condition)
block. It's also easier to maintain if I end up changing the values of some
of the other parameters. At any rate, when used wisely ?: can make your
code shorter, easier to read, and easier to maintain. Used unwisely, it can
turn otherwise clean code into an obfuscated mess.