# Head First Lua in 30 minutes

Lua is a powerful, efficient, lightweight, embeddable scripting language. It supports procedural programming, object-oriented programming, functional programming, data-driven programming, and data description.

### Getting Started

A simple example of Lua. `lua hello.lua` or start an interactive session after running a given chunk `lua -i hello.lua`.

``````#!/usr/bin/env lua
-- defines a factorial function
function fact (n)
if n == 0 then
return 1
else
return n * fact(n - 1)
end
end
print("enter a number:")
print(fact(a))
``````

or use `lua -e "print(10)"` to execute a single line of code. The `-l` option loads a library before executing the given chunk. e.g. `lua -i -llib -e "x = 10"`.

### Data Types

``````## Numerals
4.57e-3
0.3e12
5E+20
math.type(3)
0xff0x1A3

## Relational Operators
< > <= >= == ~=

## Strings
a = "one string"
b = string.gsub(a, "one", "another")
string.rep("abc", 3)
string.reverse("A Long Line!")
string.lower("A Long Line!")
string.upper("A Long Line!")
tonumber(" -3 ")
tonumber(" 10e4 ")
tonumber("100101", 2)
tonumber("fff", 16)

## Tables
a = {}
k = "x"
a[k] = 10
a = "great"
print(a["x"])
k = 20
print(a[k])
a["x"] = a["x"] + 1
print(a[k])
a.x = 10
print(a.x)

t = {10, print, x = 12, k = "hi"}
for k, v in pairs(t) do
print(k, v)
end
``````

### Functions

``````-- add the elements of sequence 'a'
local sum = 0
for i = 1, #a do
sum = sum + a[i]
end
return sum
end
``````

Functions as First-Class Values

``````a = {p = print}
a.p("hello world")
print = math.sin
a.p(print(1))
math.sin = a.p
math.sin(10, 20)
``````

### Closures

``````function foo (x)  return 2*x  end
foo = function (x) return 2*x end

network = {
{name = "grauna",  IP = "210.26.30.34"},
{name = "arraial", IP = "210.26.30.23"},
{name = "lua",     IP = "210.26.23.12"},
{name = "derain",  IP = "210.26.23.20"},
}
table.sort(network, function (a,b) return (a.name > b.name) end
``````

### Precompiled Code

``````luac -o prog.lc prog.lua
lua prog.lc
``````

### Error Handling and Exceptions

``````local ok, msg = pcall(function ()
-- some code
if unexpected_condition then error() end
-- some code
print(a[i])    -- potential error: 'a' may not be a table
-- some code
end)

if ok then    -- no errors while running protected code
-- regular code
else   -- protected code raised an error: take appropriate action
-- error-handling code
end
``````

### Reference

• Lua Programming - The Ultimate Beginner’s Guide to Learn Lua Step by Step (2021)
• Lua 5.4 Reference Manual (`https://www.lua.org/manual/5.4/manual.html`)
• Programming in Lua (2017)

Disclaimer
1. License under `CC BY-NC 4.0`
2. Copyright issue feedback `me#imzye.me`, replace # with @
3. Not all the commands and scripts are tested in production environment, use at your own risk
4. No privacy information is collected here
Try iOS App