# Variables (Basic Information)

## Overview

Computer programs typically have one of two general purposes—to produce or identity a sought after value or to control some activity. To do so, data will need to be identified and processed. In most programming languages, data values will most often be referred through the use of variables. A variable can be thought of has the name for some value, e.g., `age`, `height`, `payRate`, `count`, `total`, `average`, etc.

You probably know of the word variable from your study of mathematics. Be aware. Beware! The meaning of "variable" differs in mathematics and computer science. In mathematics, a variable has a single, particular value in all aspects of the the problem being worked. It may be that the value of the variable is unknown. You might use the same variable for some different purpose in another problem in which case it will have a different value, but again, that value will be the same throughout the problem.

In programming, a variable is something like scratch paper where you write a value down so you can remember it. And variables, truly vary depending on the code in the program. At one point in the program the variable may have no value—haven't written anything on the scratch paper yet. At a later or different point in the program, it will likely have some value assigned to it—value noted on the scratch paper. At yet another point in the program the variable can have some other value assigned—value on scratch paper crossed out and a new value noted. This might happen repeatedly during the course of the program.

It is critical that you recognize how variables work in programming. Before explicitly being given a value, a variable should be thought of as having no value or being undefined. Once it is explicitly given a value it retains that value until it is explicitly given another (probably different) value. Variables are given values in an assignment statement. The assignment statement, however, only gives the variable a value. It does not define how the variable's value is determined.

Assignment statements have the form

```    variable = expression
```

The name for the variable starts the statement and is followed by the assignment operator (an equal sign in our language). After the assignment operator comes an expression. The expression can be anything that results in a value, e.g.,

• a literal, e.g. `17`, `2.5`, `"hello"`
• another variable
• a function call, e.g., `Pi()`, `Sqrt(Sum)`, `InputBox("Age?")`
• a combination of literal, variables, functions, and operators, e.g. `weight / (height ^ 2 * 703)`, `Pi() * radius ^ 2`

For example if the variable `grossPay` is given the value of `payRate * hoursWorked` it retains that value, even if the values of `payRate` and `hoursWorked` change. The following commented code illustrate this.

```    			' declare three variables -- all are undefined
Dim grossPay, payRate, hoursWorked as Double
' get a value from user for  payRate (perhaps 15.00)
payRate = InputBox("Hourly pay rate?")
' get a value from user for hoursWorked  (perhaps 40)
hoursWorked = InputBox("Hours worked?")
' calculate and store the value in the variable  grossPay  (600.00 in this case)
grossPay = payRate * hoursWorked
' report the result ("Gross pay is \$600.00" in this case)
MessageBox.Show("Gross pay is " & grossPay.ToString("c"))
' get (and store) a new value for  payRate
payRate = InputBox("Hourly pay rate?")
' NOTE THAT THE VALUE FOR  grossPay  has not changed
```

## Roles of Variables

Most people do not commonly use variables in their daily activities and, therefore, have some difficulty understanding variables and thinking about problems in terms of variables. That makes programming more challenging because programming almost always includes getting data (and storing it in variables), processing data (by manipulating variables and, perhaps, storing results), and reporting those results. Eventually, thinking using variables becomes second nature. It may be helpful to consider how variables are used in computer programs—the roles they can play.

The ideas here are adapted from the Roles of Variables website managed by Jorma Sajaniemi. This discussion applies to individual variables not array or other collections. Also, the role names/labels are somewhat different (but the roles are mostly the same).

As you read about the roles, try to imagine an example or problem of your own that would make use of a variable in that role. Variables represent

• current value

Multiple values for the same entity will be encountered or produced. The variable is/contains the most recent or current one. Some examples are:

• the roll of a pair of dice
• one score in a set of scores
• user's answer to a drill and practice problem
• number for the seat being examined in a ticketing program
• fixed value

A single value for the entity is expected. The value, once received, is unlikely to change in the current execution of the program. Some examples are:

• the date indicating when the program was run
• value for the minimum wage
• number of drill and practice problems to be provided
• user's name
• temporary value

The variable is used to aid in accomplishing a particular task but once the task is complete the variable is no longer needed. Some task examples are:

• swapping two values, i.e.,
```    temp = val1
val1 = val2
val2 = temp
```
• avoiding recalculation of a value that will be used in several other calculations
• make a second use of a function call value (e.g., random number generation
• making a calculation easier to understand by breaking it into parts
• stepper/counter

We often need a variable that counts for us (perhaps by twos, fives, or tens) or otherwise changes in an orderly manner. Some examples are:

• count down to blastoff
• count the occurrences of vowels in a word
• cut the value in half each time it is processed
• aggregator

An aggregator collects or gathers together some value(s). Often this is a sum, but it could be a count of occurrences of some value or activity.

• add the current value to a sum of values (perhaps to find the average)
• count the occurrences of vowels in a word
• sought-after value

Often programs are looking for the largest or smallest value that are encountered. A variable is used to store that value. Typically, the variable is initialized to an opposite extreme value. For instance, if you are looking for the highest temperature, you would set the `highestTemp` variable to a very low value so that whatever values you encounter will be greater.

• follower/previous value

In some problems it is necessary to keep track of a previous value so you will be able to decide what action to take. For example, if you were keeping track of the number of times a coin flips in a row were the same you would need to know about the last flip. Also, some calculations depend on the prior calculation or two (e.g., Fibonacci numbers).

• flag

A flag value indicates a program state (often a Boolean value). In a craps game program you have to know whether the shooter is rolling in the come out phase to set the point or in the point phase to try to roll the point. A variable such as `inComeOut` could be set to indicate the state of the program.

• just a variable

(This was not in the original set of roles. I thought the current value and fixed value roles might be too inflexible so add this one.)

## Accessing Data in Variables

• Calculating (and saving/storing the result)
• Setting control properties