barbarianmeetscoding

WebDev, UX & a Pinch of Fantasy

3 minutes readlua

Lua

What is Lua?

Lua is a lightweight, high-level, multi-paradigm programming language with a minimalistic and easy to learn syntax.

Installing Lua

brew install lua luarocks

Once installed you can run the lua repl by writing lua in your terminal:

▶ lua
Lua 5.4.3  Copyright (C) 1994-2021 Lua.org, PUC-Rio
>

Or interpret a lua script running the lua interpreter:

lua myprogram.lua

Variables

You can create variables in Lua by assignment a value to a variable like so:

isGood = true

number = 42
number2 = 12.23

str = 'a string'
str2 = "another string"
str3 = --[[
    A multiline string
    that expands
    multiple lines.
  --]]

Variables are global by default, you can create a local variable using the local keyword:

number = 42        -- global variable
local number = 42  -- local variable (block scope)

Comments

-- This is a comment in lua
--[[ 
   This is a multiline comment in lua
--]]

Control Flow

-- if/else
if age > 21 then
  print('Allowed to drink beer! Yippie!')
elseif age > 20 then
  print('Almost there')
else
  print('Not allowed to drink beer')
end

-- while loop
while countdown > 0 do
  countdown = countdown - 1
end

-- for loops
sum = 0
for i = 1, 100 do  -- Range includes both ends.
  sum = sum + i
end

-- Count down
sum = 0
for i = 100, 1, -1 do  -- Range: begin, end[, step]
sum = sum + i 
end

-- Another loop construct:
repeat
  print('the way of the future')
  num = num - 1
until num == 0

-- Iterating over a table
-- pairs -> iterates over key/values, order not guaranteed
for key,value in pairs(table) do
  print(key, value)
end

-- Iterating over an array
-- ipairs -> iterates over numeric keys, order guaranteed
for index,value in ipairs(array) do
  print(index, value)
end

-- you can ignore keys
for _,value in ipairs(array) do
  print(value)
end

Logic operators

== -- equal
~= -- unequal

-- Undefined variables return nil.
-- This is not an error:
foo = anUnknownVariable  -- Now foo = nil.

-- Only nil and false are falsy; 0 and '' are true!
if not foo then print('it was false') end
if not false then print('it was false') end
if 0 then print('it was true') end
if {} then print('it was true') end
if '' then print('it was true') end

-- 'or' and 'and' are short-circuited.
-- This is similar to the a?b:c operator in JS:
result = false and 'yes' or 'no'  --> 'no'

Input and Output

print("hello world");
io.write("hello world")  -- Defaults to stdout

Tables

Tables are lua’s unique compound data structure, they can be used to describe objects (dictionaries) or arrays.

-- a table literal defines key/value pairs
person = { height = 180, weight = 91}

-- index notation lets you access values
print(person.height) -- 180
person.weigth = nil  -- removes a key from the table

-- you can have non-strings as keys as well
table = {[12] = "jaime", [22] = "jamie", [{}] = "wop"}

-- when you call a function with one single param, and that
-- param is a table you don't need to use parentheses. This
-- kind of looks weird, but is a very common pattern in lua:
print{name="jaime", height=180}

-- table iteration
for key, value in pairs(table) do
  print(key, value)
end

-- _G is a special table of all globals.
print(_G['_G'] == _G) 

-- You can use tables as an array if you don't specify a key:
people = {"john", "jane", "jaime"}

-- list iteration (note how indices start at 1)
for i = 1, #people do  -- #people is the size of the list
  print(people[i])
end

-- table operations
table.insert(myTable, value)  -- adds value to table

Error handling

-- Imagine a function that throws an error when it tries to access something
-- which doesn't exist e.g. this function will throw an error if we send nil as
-- table
function printField(table, field)
  print(table[field])
end

local person = nil
-- you can use a pcall to handle errors in lua
-- pcall means protected call and lets you handle errors smoothly:
local ok, result = pcall(printHeight, person, "height")
-- More info: https://www.lua.org/pil/8.4.html

Resources


Written by Jaime González García , dad, husband, software engineer, ux designer, amateur pixel artist, tinkerer and master of the arcane arts. You can also find him on Twitter jabbering about random stuff.Jaime González García


    vceplus-200-125    | boson-200-125    | training-cissp    | actualtests-cissp    | techexams-cissp    | gratisexams-300-075    | pearsonitcertification-210-260    | examsboost-210-260    | examsforall-210-260    | dumps4free-210-260    | reddit-210-260    | cisexams-352-001    | itexamfox-352-001    | passguaranteed-352-001    | passeasily-352-001    | freeccnastudyguide-200-120    | gocertify-200-120    | passcerty-200-120    | certifyguide-70-980    | dumpscollection-70-980    | examcollection-70-534    | cbtnuggets-210-065    | examfiles-400-051    | passitdump-400-051    | pearsonitcertification-70-462    | anderseide-70-347    | thomas-70-533    | research-1V0-605    | topix-102-400    | certdepot-EX200    | pearsonit-640-916    | itproguru-70-533    | reddit-100-105    | channel9-70-346    | anderseide-70-346    | theiia-IIA-CIA-PART3    | certificationHP-hp0-s41    | pearsonitcertification-640-916    | anderMicrosoft-70-534    | cathMicrosoft-70-462    | examcollection-cca-500    | techexams-gcih    | mslearn-70-346    | measureup-70-486    | pass4sure-hp0-s41    | iiba-640-916    | itsecurity-sscp    | cbtnuggets-300-320    | blogged-70-486    | pass4sure-IIA-CIA-PART1    | cbtnuggets-100-101    | developerhandbook-70-486    | lpicisco-101    | mylearn-1V0-605    | tomsitpro-cism    | gnosis-101    | channel9Mic-70-534    | ipass-IIA-CIA-PART1    | forcerts-70-417    | tests-sy0-401    | ipasstheciaexam-IIA-CIA-PART3    | mostcisco-300-135    | buildazure-70-533    | cloudera-cca-500    | pdf4cert-2v0-621    | f5cisco-101    | gocertify-1z0-062    | quora-640-916    | micrcosoft-70-480    | brain2pass-70-417    | examcompass-sy0-401    | global-EX200    | iassc-ICGB    | vceplus-300-115    | quizlet-810-403    | cbtnuggets-70-697    | educationOracle-1Z0-434    | channel9-70-534    | officialcerts-400-051    | examsboost-IIA-CIA-PART1    | networktut-300-135    | teststarter-300-206    | pluralsight-70-486    | coding-70-486    | freeccna-100-101    | digitaltut-300-101    | iiba-CBAP    | virtuallymikebrown-640-916    | isaca-cism    | whizlabs-pmp    | techexams-70-980    | ciscopress-300-115    | techtarget-cism    | pearsonitcertification-300-070    | testking-2v0-621    | isacaNew-cism    | simplilearn-pmi-rmp    | simplilearn-pmp    | educationOracle-1z0-809    | education-1z0-809    | teachertube-1Z0-434    | villanovau-CBAP    | quora-300-206    | certifyguide-300-208    | cbtnuggets-100-105    | flydumps-70-417    | gratisexams-1V0-605    | ituonline-1z0-062    | techexams-cas-002    | simplilearn-70-534    | pluralsight-70-697    | theiia-IIA-CIA-PART1    | itexamtips-400-051    | pearsonitcertification-EX200    | pluralsight-70-480    | learn-hp0-s42    | giac-gpen    | mindhub-102-400    | coursesmsu-CBAP    | examsforall-2v0-621    | developerhandbook-70-487    | root-EX200    | coderanch-1z0-809    | getfreedumps-1z0-062    | comptia-cas-002    | quora-1z0-809    | boson-300-135    | killtest-2v0-621    | learncia-IIA-CIA-PART3    | computer-gcih    | universitycloudera-cca-500    | itexamrun-70-410    | certificationHPv2-hp0-s41    | certskills-100-105    | skipitnow-70-417    | gocertify-sy0-401    | prep4sure-70-417    | simplilearn-cisa    |
    http://www.pmsas.pr.gov.br/wp-content/    | http://www.pmsas.pr.gov.br/wp-content/    |