Fabulous Adventures In Coding
Eric Lippert is a principal developer on the C# compiler team. Learn more about Eric.
The conditional operator ( condition ? consequence : alternative ) is often referred to as both the “ternary operator” and the “tertiary operator”. What’s the difference?
“Ternary” means “having three parts”. Operators in C# can be unary, binary or ternary – they take one, two or three operands.
“Tertiary” means “third in order”. Compiler flaws noted in bug reports can be of primary, secondary or tertiary importance. Colours can be primary (yellow), secondary (orange) or tertiary (yellowish-orange), like our muppet friend to the left there. And so on.
“Tertiary operator” is therefore an English usage error, unless what you’re trying to say is that the conditional operator is third most important to you, or that it is a lovely greenish-blue colour.
I say avoid the problem altogether; it is simply more clear to call the conditional operator “the conditional operator”.
I've always thought it was bluish-purple.
If you search for "tertiary operator" in Google, it suggests 'Did you mean "ternary operator"?' Which I'm surprised at, I thought they only suggested fixing spelling mistakes. So they're also doing their part to educate the masses.
Yes! I am constantly saying this exact thing to others (in real life and on Stack Overflow). It doesn't help that some programming languages (I am looking at you, PHP) officially refer to the conditional operator as *the* ternary operator.
Besides "the conditional operator" does c# have other ternary operators? (which would make "the ternary operator" ambiguous)
Hi Patrick, the "conditional operator" is the only ternary operator, hence why it's usually called the ternary operator
That's what I thought.
Perhaps it should be renamed to "THE Ternary Operator."
The trouble with "the ternary operator" is that it describes what it looks like, not what it does. This is why . + => are called the "member access operator", "addition operator" and "lambda operator" and not the "dot operator", "plus operator" and "fat arrow operator".
I note that one could argue that this form of the call operator "x(y,z)" is a ternary operator, but we actually characterize it as a binary operator between an invocable expression "x", and an argument list "y,z". -- Eric
This is a nice spot- short, sweet and void of pork. I wish Joel Spolsky and Jeff Atwood would read your blogs.
First, they do. (Or, to my knowledge, Jeff does. I don't know if Joel does; he and I haven't chatted in a while.) Second, if you think my blog posts are short and concise, I suspect you haven't been reading my blog very long. I was once given a singing fish as a joke prize for being "the guy who writes the most unnecessarily detailed excessively long emails". And third, if you have a criticism to make of Joel or Jeff, I suggest you make it to them directly. Fourth, glad you like the blog. -- Eric
So you agree that the operator is tertiary because of its colour?
I suggest that all operators should be called tertiary for that reason. In fact, the word operator is redundant. In short,
+ the addition tertiary
=> the lambda tertiary
and ?:, the ternary tertiary.
I once heard it called the 'topiary operator'...
Couldn't && and || also be called "conditional operators" as thier behaviour (in dealing with the right hand side) is conditional on the value of the left hand side.
Good point. Yes. Those operators are formally called the "conditional logic operators", which I agree is potentially easily confused with "the conditional operator". Usually it's clear from context though. -- Eric
Where is the Ruth Buzzy(sp?) operator when you need it?
@Mike Greger: I've always thought it was bluish-purple.
I would have thought that fluorescent greenish-yellow purple was closer to the mark, and explains why only wizards use it.
Let's call it "the ternary conditional operator".
There is a short term with a long history of use that describes this operator precisely - "iif". So I guess it would be the "iif operator".
But iif itself is short for "inline if" and is provided in languages without a conditional ternary operator (e.g., Visual Basic). Is it karmically sound to use shorthand to describe other shorthand?