====== Getting Stuff Done I ====== //Operations and expressions// In this chapter, we will take a closer look at what makes up the commands you can use in Processing. Processing is what computer science people call an //imperative// language. The essence of an imperative language is that programs written in it are a sequence of commands that the computer performs. Furthermore, those commands may (and typically do) change the //state// of the program. Here is an example of Processing code that commands three state changes (all on the variable ''%%foo%%''): int foo = 55; foo = 99; foo = 42; In Processing (as in many other imperative languages) you can think of commands as consisting of a hierarchy of concepts (from lowest-level to highest level): operations, expressions, and statements. ===== Statements ===== In a previous chapter, we said that statements are the smallest complete executable element in an imperative language. In Processing, a semicolon is used to mark the end of a statement, as in the examples below: int theAnswer = 42; println(theAnswer); Statements are often built up from expressions, which are themselves built up from operations. We will talk about operations first and then discuss expressions. ===== Operations ===== You are probably familiar with operations in mathematics. **Operations** are made up of **operators** and **operands**. Operators indicate what you want to do and operands are the things you want that operation done to. In the following operation: $12 + 30$ the operator, represented by the plus symbol, indicates what you want to do with the operands ''%%12%%'' and ''%%30%%''. The concept of an operation in imperative languages is taken directly from the concept in mathematics--although the notation and details can and do differ. ==== Arithmetic operators ==== Processing defines a number of arithmetic operators that work essentially the same as in pure math. These are summarized in the table below. ^Operator ^Description ^Example ^ |''%%+%%'' |addition |''%%a + b%%''| |''%%-%%'' |subtraction |''%%b - d%%''| |''%%*%%'' |multiplication|''%%c * d%%''| |''%%/%%'' |division |''%%d / c%%''| |''%%%%%'' |modulus |''%%d % c%%''| Processing uses //infix// notation for arithmetic operations, meaning that the operator is placed between the two operands.((Alternatives to //infix// used by some languages are //postfix// (operator after operands) or //prefix// (operator before operands) notation. )) === Addition === The ''%%+%%'' operator is used for addition. The two operands must be (or evaluate to) numeric values. foo + 5 foo + bar === Subtraction === TODO === Multiplication === TODO === Integer versus floating-point division. === TODO === modulo === TODO ==== Assignment ==== Assignment is an operation on two operands that sets the value of one of the operands (typically a variable) to the value of the other operand. In Processing, the equals symbol is used to indicate assignment. In the example below, the value 8 is assigned to ''%%foo%%'', then twice the value of ''%%baz%%'' is assigned to ''%%bar%%''. foo = 8; bar = 2 * baz; The assignment operation in Processing looks like the "equals" relationship in math, and this is can be a source of confusion to new programmers. //They are not the same thing.// "Equals" is a statement of fact: two things are the same. Assignment is an operation: it does something--specifically, it copies the value of whatever is on the right into what is on the left. Assignment is one way that the state of a program can be changed. ==== Mixing numeric types ==== ==== Logical operators ==== TODO ==== The number of operands ==== Operators can be categorized based on the number of operands they require. **Unary** operators take //one// operand. An example of a unary operator is the logical NOT: ''%%!foo%%''. **Binary** operators take //two// operands. The arithmetic operators above are all examples of binary operators as are the logical operators, with the exception of the logical NOT. **Ternary** operators take //three// operands. Processing's conditional operator (not discussed here) is an example of a ternary operator. Theoretically, it's possible for a language to define an operator with an arbitrary number of operands, but I am not aware of any operators that take more than three operands in Processing. ===== Expressions ===== Expressions are made of up one or more operations and return a value. TODO ==== Order of precedence ==== TODO ==== Whitespace ==== TODO (Spaces, tabs, and the invisible characters that mark the end of a line. In short, whitespace in Processing (and Java, C++, and C) is interchangeable. In other words, from Processing’s point of view, a space is the same thing as a tab is the same thing as the end of a line.)