# Programming Fundamentals/Assignment vs Equality

## Overview

Assignment sets and/or re-sets the value stored in the storage location denoted by a variable name. Equality is a relational operator that tests or defines the relationship between two entities.

## Discussion

Most control structures use a test expression that executes either selection (as in the: if then else) or iteration (as in the while; do while; or for loops) based on the truthfulness or falseness of the expression. Thus, we often talk about the Boolean expression that is controlling the structure. Within many programming languages, this expression must be a Boolean expression and is governed by a tight set of rules. However, in many programming languages, each data type can be used as a Boolean expression because each data type can be demoted into a Boolean value by using the rule/concept that zero and nothing represent false and all non-zero values represent true.

Within various languages, we have the potential added confusion of the equals symbol `=` as an operator that does not represent the normal math meaning of equality that we have used for most of our life. The equals symbol typically means assignment. To get the equality concept of math we often use two equal symbols to represent the relational operator of equality. Let’s consider:

```If (pig = 'y')
Output "Pigs are good"
Else
```

The test expression of the control structure will always be true because the expression is an assignment (not the relational operator of `==`). It assigns the ‘y’ to the variable pig, then looks at the value in pig and determines that it is not zero; therefore the expression is true. And it will always be true and the else part will never be executed. This is not what the programmer had intended. The correct syntax for a Boolean expression is:

```If (pig == 'y')
Output "Pigs are good"
Else