Neha Patil (Editor)

Yoda conditions

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit

In programming jargon, Yoda conditions (also called Yoda notation) is a programming style where the two parts of an expression are reversed from the typical order in a conditional statement. A Yoda condition places the constant portion of the expression on the left side of the conditional statement. The name for this programming style is derived from the Star Wars character named Yoda, who spoke English in a non-standard syntax.

Contents

Yoda conditions are part of the WordPress and Symfony coding standards.

Example

Usually a conditional statement would be written as:

Yoda conditions describe the same expression, but reversed:

The constant is written to the left of the comparison operator, and the variable whose value is being checked against the constant is written to the right. This order is comparable to the non-standard speaking style of Yoda, which is roughly object–subject–verb (e.g., “When nine hundred years old you reach, look as good you will not.").

Advantage

Placing the constant value in the expression does not change the behavior of the program (unless the values evaluate to false—see below). In programming languages that use a single equals sign (=) for assignment and not for comparison, a possible mistake is to assign a value unintentionally instead of writing a conditional statement.

Using Yoda conditions:

Since 42 is a constant and can not be changed, this error will be caught by the compiler.

It can also solve some types of unsafe null behavior.

With Yoda conditions:

Criticism

Critics of Yoda conditions see the lack of readability as a disadvantage that outweighs the benefits described above. Some programming languages as Python and Swift do not allow variable assignments within conditionals, by defining assignments to not return a value, in which case this error is impossible to make. Many compilers produce a warning for code such as if (myNumber = 42) (e.g., the GCC -Wall option warns suggest parentheses around assignment used as truth value), which alerts the programmer to the likely mistake. In JavaScript, linters such as ESLint can warn on assignment inside a conditional.

The advantage of avoiding null behavior can also be considered a disadvantage, as null pointer errors can be hidden and only appear much later in the program.

Another disadvantage appears in C++ when comparing non-basic types as the == is an operator and there may not be a suitable overloaded operator function defined. Example: a CComBSTR compare against a string literal, written as if (L"Hello" == cbstrMessage), does not map to an overload function.

References

Yoda conditions Wikipedia