From TRCCompSci - AQA Computer Science
-- Two dashes start a one-line comment.
--[[
Adding two ['s and ]'s makes it a
multi-line comment.
--]]
Write to Console
print("helloworld")
io.write('helloworld')
Escape Characters
Read from Console
input = io.read()
-- Convert input to a number
num = tonumber(io.read())
Variables
Numbers
num = 42 -- All numbers are doubles.
Strings
s = 'walternate' -- Immutable strings like Python.
t = "double-quotes are also fine"
u = [[ Double brackets
start and end
multi-line strings.]]
-- String concatenation uses the .. operator:
message = 'Winter is coming, ' .. line
Empty / Null
t = nil -- Undefines t; Lua has garbage collection.
Global Variables
-- Variables are global by default.
thisIsGlobal = 5 -- Camel case is common.
Local Variables
-- How to make a variable local:
local line = io.read() -- Reads next stdin line.
If Statement
if num < 40 then
print('below 40')
elseif name ~= 'wayne' then
-- ~= is not equals.
-- Equality check is == like Python; ok for strs.
io.write('over 40 and Name is wayne\n') -- Defaults to stdout.
else
print('above 40')
end
Conditions
Relational
Symbols |
Explanation
|
== |
Equal
|
~= |
Not equal
|
<= |
Less than or equal
|
>= |
Greater than or equal
|
< |
Less than
|
> |
Greater than
|
Conditional
Operator |
Description |
Example
|
and |
Called Logical AND operator. If both the operands are non zero then condition becomes true. |
(A and B) is false
|
or |
Called Logical OR Operator. If any of the two operands is non zero then condition becomes true. |
(A or B) is true.
|
not |
Called Logical NOT Operator. Use to reverses the logical state of its operand. If a condition is true then Logical NOT operator will make false. |
!(A and B) is true.
|
Loops
While
-- Blocks are denoted with keywords like do/end:
while num < 50 do
num = num + 1 -- No ++ or += type operators.
end
For
karlSum = 0
for i = 1, 100 do -- The range includes both ends.
karlSum = karlSum + i
end
-- Use "100, 1, -1" as the range to count down:
fredSum = 0
for j = 100, 1, -1 do
fredSum = fredSum + j
end
-- In general, the range is begin, end[, step].
Repeat / Do While
-- Another loop construct:
repeat
print('the way of the future')
num = num - 1
until num == 0
Classes
Define a class
-- Meta class, class defined with {}, variables can be set like 'area'
Shape = {area = 0}
-- Base class is named, followed by ':' to create a method for the class
function Shape:new (o,side)
o = o or {}
setmetatable(o, self)
self.__index = self
side = side or 0
self.area = side*side;
return o
end
-- Base class method printArea
function Shape:printArea ()
print("The area is ",self.area)
end
Inheritance
Square = Shape:new()
-- Derived class method new
function Square:new (o,side)
o = o or Shape:new(o,side)
setmetatable(o, self)
self.__index = self
return o
end
Creating an object
-- Creating an object
myshape = Shape:new(nil,10)
--to access the methods of the object you need to use ':'
myshape:printArea()