April 5, 2007
Last updated: November 5, 2007
By Richard G. Baldwin
Alice Programming Notes # 160
This tutorial lesson is part of a series designed to teach you how to program using the Alice programming environment under the assumption that you have no prior programming knowledge or experience.
Have some fun
Because Alice is an interactive graphic 3D programming environment, it is not only useful for learning how to program, Alice makes learning to program fun. Therefore, you should be sure to explore the many possibilities for being creative provided by Alice while you are learning to program using these tutorials. And above all, have fun in the process of learning.
In the previous lesson titled "Syntax, Runtime, and Logic Errors" I taught you about syntax errors, runtime errors, and logic errors, and some of the ways to avoid them.
Up to this point in this series, we have pretty much been kicking the tires and polishing the chrome on this programming vehicle. It's time to open the hood and start getting our hands dirty.
In this lesson, I will teach you about expressions, arithmetic operators, and equality operators. Future lessons will teach you about the following topics, with a few other topics thrown in for good measure:
The capabilities represented by these topics are the capabilities that separate a real computer from a programmable device such as a microwave oven or a VCR recorder, so this is the real core of computer programming.
I recommend that you open another copy of this document in a separate browser window and use the following links to easily find and view the figures and listings while you are reading about them.
Once you have mastered Alice, I recommend that you also study the other lessons in my extensive collection of online programming tutorials. You will find a consolidated index at www.DickBaldwin.com.
(An expression is a specific combination of operators and operands, which evaluates to a particular result.In your past experience, you may have referred to expressions by the names formulas or equations.
The operands can be variables, literals, or method calls that return a value.)
Although formulas and equations are not exactly the same thing as expressions, they are close enough to help you understand what expressions are and how they are used.
A statement is a specific combination of expressions. In Java, C++, and C# a statement is terminated by a semicolon. The same appears to be true in Alice, but because the drag and drop paradigm takes care of syntax issues like that for you, it really isn't important.
The following is an example of a statement comprised of expressions.
z = x + y;
Operationally, in the above statement, values are retrieved from the variables named x and y. These two values are added together. The result is stored in (assigned to) the variable named z, replacing whatever value may previously have been contained in that variable.
Operators are the action elements of a computer program.
They perform actions such as:
Operators operate on operands. Stated differently, operands are the things that are operated on by operators.
For example, in the following expression, the plus character is an operator while x and y are operands.
x + y
Assuming that x and y are numeric variables, this expression produces the sum of the values stored in the two variables.
In some languages, if x and y are string variables, this expression produces a new string, which is the concatenation of the string contents of the two string variables. (Alice provides a function that is used to accomplish string concatenation.) According to the current jargon, the plus character is an overloaded operator. Its specific behavior depends on the types of its operands.
The variable x would be called the left operand and the variable y would be called the right operand.Unary, binary, and ternary operators
Java, C++, and C# provide operators that can be used to perform an action on one, two, or three operands.
An operator that operates on one operand is called a unary operator. (Alice supports at least one unary operator: the increment operator.)
An operator that operates on two operands is called a binary operator. (Alice supports several binary operators.)
An operator that operates on three operands is called a ternary operator. (As near as I have been able to determine, Alice does not support ternary operators.)
Some operators can be either unary or binary
In Java, C++, and C#, some operators can behave either as a unary or as a binary operator. The best known operator that can behave either way in those languages is the minus sign. (While Alice has both unary and binary operators, as near as I have been able to determine, Alice does not support any operators that behave as both unary and binary operators.)
The minus sign as binary operator
As a binary operator, the minus sign causes its right operand to be subtracted from its left operand (provided that the two operands evaluate to numeric values).
For example, the following code subtracts the variable y from the variable x and assigns the result of the subtraction to the variable z. After the third statement is executed, the variable z contains the value 1.
int x = 6;
int y = 5;
int z = x - y;
The minus sign as unary operator
Just to expand your thinking a little beyond Alice, in Java, C++, and C#, as a unary operator, the minus sign causes the algebraic sign of the right operand to be changed.
For example, the following two statements cause a value of -5 to be stored in the variable x.
int y = 5;
int x = -y;
Binary operators use infix notation
To keep you abreast of the current jargon, binary operators in Alice as well as Java, C++, and C# use infix notation. This means that the operator appears between its operands.
Prefix and postfix notation
In those other languages, (but apparently not in Alice) there are some unary operators that use prefix notation. In Alice and those other languages, there is at least one unary operator that uses postfix notation. This operator is the increment operator, which I will explain in a future lesson.
For prefix notation, the operator appears before (to the left of) its operand.
For postfix notation, the operator appears after (to the right of) its operand.
General behavior of an operator
As a result of performing the specified action, an operator can be said to return a value (or evaluate to a value) of a given type.
The type of value returned depends on the operator and on the types of the operands.
(To evaluate to a value means that after the action is performed, the operator and its operands are effectively replaced in the expression by the value that is returned.)
There are many different categories of operators in most programming languages. The operators in those different categories have different purposes. This lesson will not attempt to teach you about, or even to introduce you to all of the different operators. Rather, this lesson will teach you about arithmetic operators and equality operators. Future lessons will teach you about relational operators and logical operators.
You will learn about many other operators in due time if you continue to pursue an education in computer programming using Java, C++, or C#.
Programming languages such as Java, C++, and C# typically support the five arithmetic operators shown in Figure 1.
Figure 1. Arithmetic operators.
Operator Description + Adds its operands - Subtracts the right operand from the left operand * Multiplies the operands / Divides the left operand by the right operand % Remainder of dividing the left operand by the right operand - modulus operator
Alice supports four of the five
Alice supports the first four operators shown in Figure 1 but as near as I have been able to determine, does not support the modulus operator. However, the world has a function named Math.IEEERemainder that may serve the same purpose. Note, however, that it is a function and not an operator.
Using the arithmetic operators
The arithmetic operators in Alice are exposed whenever you click the triangle immediately to the right of a component in an expression that can serve as the left operand for the operator. An example of this procedure is shown in Figure 2.
Figure 2. Arithmetic operators exposed.
How did I produce the outcome shown in Figure 2?
In Figure 2, I clicked the triangle immediately to the right of 1 meter. That exposed the topmost menu shown in Figure 2. One of the selections on that menu reads math. When I selected the math item, the menu immediately to its right opened up showing the left operand and a choice of each of the four arithmetic operators. When I selected the item that reads 1+, that exposed the rightmost menu in Figure 2.
The b at the top of that menu indicates that the rightmost menu represents the right operand for the selected arithmetic operator. As usual, for numeric data, there was a choice of values plus the item that reads other... As you have seen before, selecting other... exposes a numeric keypad that allows you to specify any numeric value. It also allows you to compute the quotient of two numeric values and to specify that quotient as the right operand.
Mixing arithmetic operators
When using the drag and drop paradigm to construct expressions containing arithmetic operators, you must be careful to construct them in such a way that they will be evaluated properly. An example of this situation is shown in Figure 3.
Figure 3. Two examples of mixed operator types.
Figure 3 contains two statements that evaluate an arithmetic expression using the current values of the variables a and b, along with the literal constant 3. The expressions also include the addition operator (+) and the multiplication operator (*). Given the values shown for the two variables, the result of evaluating the arithmetic expression in the first statement would be 21. The result of evaluating the arithmetic expression in the second statement would be 11.
Can you see the difference?
Basically when expressions containing terms that are grouped within matching parentheses are evaluated, the contents of the inner-most pair of parentheses are evaluated first. Then that pair of parentheses and its contents are replaced by the value that was produced and that value is used to evaluate the next inner-most pair of parentheses. This process continues until all of the parentheses have been eliminated. (Do you remember doing this in your high school algebra class?)
Using this approach, we see that the result of evaluating the arithmetic expression in the first statement in Figure 3 is 7*3 or 21. The result of evaluating the arithmetic expression in the second statement is 5+6 or 11. Just remember, parentheses are always cleared out beginning with the inner-most parentheses and working outward to the outer-most pair of parentheses.
At this point in your studies, you should be able to create the two statements shown in Figure 3. See if you can do it.
Programming languages such as Java, C++, and C# have several different numeric types. Some of those types are whole number or integer types. The others are types that can contain a fractional part. However, Alice has only one numeric type (Number) and it is a type that can contain a fractional part.
When you master Alice and move on to those other programming languages, you will find that there are some subtle, somewhat tricky, and important issues involved in performing arithmetic using values of different types. For the time being, however, you can relax because you won't have to deal with those issues with Alice. Don't become too complacent, however. If you continue in your efforts to become a computer programmer, the day will come when you too will have to deal with the problems associated with mixed-type arithmetic.
There are two more operators that I want to teach you about before we leave this lesson: the equality operators. Each of these operators is a binary operator, which returns the boolean values true or false, depending on whether their two operands are equal or not. The operators are pictured in Figure 4.
Figure 4. Equality operators.
Operator Description == Returns true if operands are equal. Otherwise returns false. != Returns true if operands are not equal. Otherwise returns false.
An example of equality operators
The Alice code in Figure 5 illustrates the behavior of both operators.
Figure 5. Illustration of "equal" and "not equal" operators.
Performing operations on three variables
The simple code in Figure 5 declares and initializes three variables named A, B, and C. The variables A and B are each of type Number, and are given values of 5 and 2 respectively. Thus, the values in these two variables are not equal to one another.
The variable named C is of type Boolean, and its initial value is immaterial because that value will be overwritten by the code in Figure 5 when the program is run.
Evaluating the expression
The first statement in Figure 5 evaluates the expression
A==Band stores the value that is returned in the variable named C, overwriting the previous contents of C. The second statement in Figure 5 prints the value stored in C, producing the first line of output text in Figure 6. As you can see, the printed output indicates that the expression is false because A is not equal to B.
Figure 6. Output produced by the code in Figure 5.
the value of world.main.C is false the value of world.main.C is true
Evaluating the other expression
The third statement in Figure 5 evaluates the expression
A!=Band stores the result in variable C, once again overwriting the previous contents of C. The fourth statement in Figure 5 prints the contents of C, producing the second line of text in Figure 6. The printed output indicates that the expression is true because A is not equal to B.
Modify values for A and B
Figures 7 and 8 show the result of modifying the values of the two variables so that the value of A is equal to the value of B and running the program again.
Figure 7. Illustration of "equal" and "not equal" operators.
Figure 8. Output produced by the code in Figure 7.
the value of world.main.C is true the value of world.main.C is false
Make certain that you understand the outcome
We will be using these two operators extensively in a future lesson on selection and loop structures, so you need to make certain that you understand their behavior before leaving this lesson.
In this lesson, I taught you about expressions, arithmetic operators, and equality operators.
Future lessons will teach you about the following topics, with a few other topics thrown in for good measure:
There is no lab project for this lesson. You will use the expressions and operators that you learned about in this lesson in the lab projects for the lessons that follow.
Resources from earlier lessons in the series titled "Learn to Program using Alice"
Copyright 2007, Richard G. Baldwin. Faculty and staff of public and private non-profit educational institutions are granted a license to reproduce and to use this material for purposes consistent with the teaching process. This license does not extend to commercial ventures. Otherwise, reproduction in whole or in part in any form or medium without express written permission from Richard Baldwin is prohibited.
Richard has participated in numerous consulting projects and he frequently provides onsite training at the high-tech companies located in and around Austin, Texas. He is the author of Baldwin's Programming Tutorials, which have gained a worldwide following among experienced and aspiring programmers. He has also published articles in JavaPro magazine.
In addition to his programming expertise, Richard has many years of practical experience in Digital Signal Processing (DSP). His first job after he earned his Bachelor's degree was doing DSP in the Seismic Research Department of Texas Instruments. (TI is still a world leader in DSP.) In the following years, he applied his programming and DSP expertise to other interesting areas including sonar and underwater acoustics.
Richard holds an MSEE degree from Southern Methodist University and has many years of experience in the application of computer technology to real-world problems.