Quick Search

# Page History: The LUA 5.1 Programming Language

Compare Page Revisions

 « Older Revision - Back to Page History - Newer Revision »

## Intro

WoW add-ons are developed using the LUA 5.1 programming language: LUA 5.1 Manual

Of course, the LUA language itself does not implement the WoW API, which uses an event-driven model, so simply reading the manual will not help you to write that killer add-on. But, you've got to crawl before you can run, so let's dive into some of the syntax features of LUA itself.

## Reserved Keywords

A lot can be learned about a language just by knowing what words are reserved keywords (and thus, cannot be used as variable names).

```and       break     do        else      elseif
end       false     for       function  if
in        local     nil       not       or
repeat    return    then      true      until   while```

## Arithmetic Operators

```+  addition        1 + 2 => 3
-  substraction    2 - 1 => 1
*  multiplication  3 * 4 => 12
/  division        9 / 3 => 3
%  modulo          8 % 6 => 2
^  exponent        2 ^ 5 => 32```

## Relational Operators

```== equality
~= inequality
<  less-than
<= less-than or equal
>  greater-than
>= greater-than or equal```

## Logical Operators

false and nil are both considered false, everything else is true.

```and  (returns first argument if false/nil, otherwise returns second argument)
or   (returns the first argument if not false/nil, otherwise returns the second argument)
not  (returns true or false, depending on the argument)

10  or  20  --> 10
10  and 20  --> 20
nil or  10  --> 10
nil and 10  --> nil```

## Concatenation

The double-dot (..) represents the concatenation operator.

```name = "Jason"
print("Hello, "..name..", it is very good to meet you!")

results:

Hello, Jason, it is very good to meet you!```

## Length Operator

The pound-sign (#) preceeding a variable returns the length of that variable. If the variable is a string, then the returned value is the number of characters. If the variable is a table, then the returned value is the highest index number such that the table element at the next higher index is nil.

```name = "Jason"
print(#name)

results:

5```

## For Statements

```for i = 1, 5, 1   -- start, limit, increment
do
print(i.."\n")
end

results:

1
2
3
4
5```

(work in progress)

ScrewTurn Wiki version 2.0.13. Some of the icons created by FamFamFam.