# Understanding Operators

There are many types of operators. There are those who drive cars, those who perform surgery, those who run casinos, and so on. We don't care about them, however (at least not for the purposes of this primer!) On the other hand, we care a lot about those that add or subtract things from each other, and in other ways manipulate one thing with another. I'm talking about the operators in programming languages; languages like Perl, VBScript and JavaScript; languages near and dear to a web developer's heart!

Since operators are so fundamental to the work of programming languages, it is important to understand the types of operator that there are, and their place in a language. Understanding fundamental aspects of language structure makes it simpler to get to know a language you are seeing for the first time. That being so, a little clarification couldn't hurt. I don't intend to provide a comprehensive list of either the types of operator or of the operators themselves, but rather to provide a basic understanding of the concepts involved.

In a computer language it's the operators that tell the computer what to do. If you want to add one to one to get a result, you would tell the computer "result equals one plus one". In this example there are two type of operator at work. "Plus" is an arithmetic operator that says to add the two numbers either side of itself together. "Equals" is an operator that says to assign the value of the answer to "result".

Not all types of operator are present, or implemented, in every language. Perl, for example, has a few special groups of operators that are peculiar to Perl. Common to most programming languages, and certainly to those that I have mentioned here, are arithmetic, assignment, relational and logical.

Arithmetic operators include the add, subtract, multiply and divide basic building blocks, along with exponentiation, modulus and increment. Hopefully, you are already familiar with the operation of the first four! It is worth noting that there are frequently variations on the add and subtract. In addition to addition, there is also the "Concatenate" operator. Though concatenate is usually referred to as a different operator type, namely a string operator, it is sometimes the same symbol as add (e.g. "+" in JavaScript). Using JavaScript for an example, -- result = 1 + 1 -- would yield a value of 2 in result, while -- result = "one " + "one" -- would yield a value of "one one" in result.

"Add" adds one number to another, meaning that is operates on two numbers, or has two operands. Operators with two operands are called "binary" operators. Those with one operand are called unary, and those with three are called ternary. I don't know of any operators with more than three operands, but they might exist in some language.

While subtract is a binary operator, there is also a unary variation. In its unary form, minus is used to define a negative number, "-1" for example. Exponentiation refers to raising a number to a power. For example (in Perl) 2**4 is equivalent to 2*2*2*2 which yields 16 (2 to the fourth power). Modulus (a.k.a. Modulo) returns the remainder after dividing the first operand by the second operand. For example -- result = 7 modulus 3 -- would give a value of 1 in result.

Assignment operands direct a value into a data item. If our examples above we have shown "equals" as an assignment operator. Most languages these days, including the three previously mentioned, assign from right to left. That is, in the arrangement "op1 = op2" the value already in op2 is assigned to op1, replacing its value. There are still some languages, however, that assign from left to right. Cobol is one such, as in "move op1 to op2" or "add 1 to 1 giving result". By the way, in case you think Cobol is dead, it's worth remembering that it is estimated that there are still more lines of Cobol code in use today than any other language. Of course, we don't really care very much because it's (probably) never used for web site development!

Relational operators compare one thing to another. "Equals" is also a relational operator, as in the JavaScript example -- if op1 == op2 -- where you notice that the language syntax calls for two "=" signs to distinguish it from its assignment cousin. "Greater than", "less than" and the negatives "not equal" (etc.), are all examples of relational operators. Some languages, including Perl, consider numeric and string relational operator to be different operator types.

Logical operators include "and", "or" and "not". These operators are used to combine other conditions in true/false tests. For an example in JavaScript -- if ((op1 == op2) && (op1 == op3)) -- there are two equality condition tests in the overall condition, joined by a logical "and". If both test evaluate true, the overall condition is true, if either or both evaluate false the overall condition is false. In a logical "or" the overall condition is true is either or both evaluate true, and false when both are false. Be careful with the (unary operator) logical "not"!! Sometimes it's simple to see what it means. For a JavaScript example -- if op1 != op2 -- clearly is looking for inequality between op1 and op2, but consider the Perl example -- \$op1 = !\$op2 -- where op1 will be assigned (the "=" assignment operator) a value of zero if op2 is either null or equal to zero. Trust me, it can get tricky! Negatives are like that! Consider: there's not no way to misunderstand this!! Beware also of the bitwise operators (another type) that also include an "and" an "or" (and a thing called an "exclusive or") and sometimes a "not". These fellas can also be tricky to understand and are beyond the scope of this little piece!

Hopefully, this explanation of this part of computer language structure will help you to operate on your own!