You might be a ThreeStarProgrammer if you use the ternary conditional operator '''?:''' in CeeLanguage or JavaLanguage or PerlLanguage. Especially if you used it as an LValue. ''You have used ?: to avoid writing an if statement.'' This is a useful technique when instrumenting code for profiling: if(x) { } else { } becomes: if((x) ? TRACE(1),1 : // executed when (x) is true, continues into "if" block TRACE(2),0) // executed when (x) is false, continues into "else" block { } else { } In this context the technique doesn't interfere with the block code if the original didn't use brackets, and the conditional is still evaluated OnceAndOnlyOnce, so it won't cause macro-expansion problems. I consider this usage to be a special case; I'd discourage regularly using ? in place of if-else. ''Ummm...this technique doesn't work Consider this simplification:'' if (x? foo(),1: bar(),0) { ... } ''Because ? and : are brackets, there is no binding problem with the first comma. However, comma has lower precedence than ?:, so this statement should be parsed as'' if ((x? (foo(), 1): bar()), 0) { ... } ''which implies that the { ... } will never be executed.'' ''I am leaving the original suggestion uncorrected because I think it's a useful lesson. --AndrewKoenig'' ---- I'd like to add another use of ?: that can make mathematically based code much easier to read. Guards in languages like HaskellLanguage are an immensely useful feature and ?: can be used to implement them in C/C++. const double a = expression1 ? a1 : expression2 ? a2 : expression3 ? a3 : /*otherwise*/ a4; Compare this to the equivalent if statements version which is more error prone and procedural instead of the mathematical declarative form. Also note that in the above code a can be declared as const as we intended it. double a; if( expression1 ) a = a1; else if( expression2 ) a = a2; else if( expression3 ) a = a3; else /*otherwise*/ a = a4; Like anything else ?: can be abused, but used well it can produce better code. --DavidSankel ---- PythonLanguage 2.4 and below had no official ternary conditional, but it could be emulated with short-circuiting and/or: a = p '''and''' t '''or''' f However, this is not a perfect solution because, for this to behave the same as the conditional operator, t must not evaluate to False. If it does, the "and" test will fail and the expression will evaluate to f, regardless of the value of p. Python 2.5 introduced a true conditional operator with the following syntax: a = t '''if''' p '''else''' f ---- LispLanguage and many others simply use if-then-else or cond, since they are already expressions. ---- As pointed out in the introductory paragraph, it is possible (though generally discouraged) to use the ternary operator as a LeftValue selector: ((foo) ? bar : baz) = frink; which is equivalent to: if (foo) bar = frink; else baz = frink; Defenders of the device hold that it makes the intention of a selected assignment clear, but the vast majority of programmers consider this extremely poor style, if only because the technique's obscurity. (Personally, I have a certain fondness for it, but then I'm a manic Lisp weenie; I would never use it in anything anyone else would ever have to maintain, however, unless I intended it as EvilCode. -- JayOsako) The same thing can be done with function calls: foo = (bar ? baz : quux)(frink) Using ?: in lvalues are not supported in C, but you can still do this: *(foo?&bar:&baz)=frink; ---- A good use for the conditional operator is when you have code like this: if (a) f(b); else f(c); It can be re-written as: f( a ? b : c); ---- See also ChoiceOperatorDoesNotConsiderInheritance