21
Linguagens de Programacão I [email protected] 1 Lua Lua – Parte I Parte I Linguagens de Programacão I [email protected] 2 Overview Overview Linguagem pequena Linguagem pequena; Sintaxe Sintaxe simples e simples e clara clara; Grande Grande poder poder de de descrição descrição de dados; de dados; Gerenciamento automático Gerenciamento automático de de memória memória; Execução controlada Execução controlada; Tipagem Tipagem dinâmica. dinâmica.

Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I [email protected] 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

Embed Size (px)

Citation preview

Page 1: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

1

Linguagens de Programacão [email protected] 1

Lua Lua –– Parte IParte I

Linguagens de Programacão [email protected] 2

OverviewOverview

Linguagem pequenaLinguagem pequena;;

SintaxeSintaxe simples e simples e claraclara;;

Grande Grande poderpoder de de descriçãodescrição de dados;de dados;

Gerenciamento automáticoGerenciamento automático de de memóriamemória;;

Execução controladaExecução controlada;;

Tipagem Tipagem dinâmica.dinâmica.

Page 2: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

2

Linguagens de Programacão [email protected] 3

Linguagens de ExtensãoLinguagens de ExtensãoLPs de extensão (scripting languages) são LPs LPs de extensão (scripting languages) são LPs utilizadas para conectar ou configurar componentes utilizadas para conectar ou configurar componentes de um sistema, geralmente em tempo de execução de um sistema, geralmente em tempo de execução

usam interpretadores.usam interpretadores.

Assumem portanto a existência de componentes Assumem portanto a existência de componentes desenvolvidos em outras LPs (system programming desenvolvidos em outras LPs (system programming languages).languages).

São menos estruturadas e oferecem um nível maior São menos estruturadas e oferecem um nível maior de abstração e de flexibilidade.de abstração e de flexibilidade.

Exemplos incluem Visual Basic, Perl, Tcl, Javascript Exemplos incluem Visual Basic, Perl, Tcl, Javascript e Lua.e Lua.

Linguagens de Programacão [email protected] 4

Lua Lua -- IntroduçãoIntrodução

Lua é uma linguagem de extensão projetada para ser Lua é uma linguagem de extensão projetada para ser usada como linguagem de configuração, acoplada a usada como linguagem de configuração, acoplada a um programa hospedeiro (escrito na linguagem de um programa hospedeiro (escrito na linguagem de programação C).programação C).

Aplicações em geral podem acoplar códigos em Lua, Aplicações em geral podem acoplar códigos em Lua, permitindo prototipagem rápida e acesso permitindo prototipagem rápida e acesso programável pelo usuário à tecnologia implementada programável pelo usuário à tecnologia implementada pela aplicação.pela aplicação.

Page 3: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

3

Linguagens de Programacão [email protected] 5

Lua Lua -- IntroduçãoIntrodução

Um programa Lua é composto por blocos de código Um programa Lua é composto por blocos de código conhecidos como conhecidos como chunkschunks..

Todos os comandos e construções de Lua são Todos os comandos e construções de Lua são executados em um executados em um único ambiente globalúnico ambiente global. .

Este ambiente, que guarda todas as variáveis globais Este ambiente, que guarda todas as variáveis globais e definições de funções, é automaticamente e definições de funções, é automaticamente inicializado quando o interpretador é ativado e inicializado quando o interpretador é ativado e persiste enquanto o interpretador estiver em persiste enquanto o interpretador estiver em execução.execução.

Linguagens de Programacão [email protected] 6

TiposTipos de de LuaLuaNil (Nil (nil)nil)

Booleanos (boolean)Booleanos (boolean)

StringsStrings (string)(string)

NúmerosNúmeros (number)(number)

FunçõesFunções (function)(function)

TabelasTabelas ((table)table)

Corotinas (thread)Corotinas (thread)

Dados do Dados do usuáriousuário ((userdatauserdata))

Page 4: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

4

Linguagens de Programacão [email protected] 7

NúmerosNúmeros

NúmerosNúmeros emem Lua são sempre ponto flutuanteLua são sempre ponto flutuanted = 123d = 123

e = 4.2e = 4.2

print( d ) print( d ) 123123

print( d + e ) print( d + e ) 127.2127.2

print( d + t ) print( d + t ) erroerro

Linguagens de Programacão [email protected] 8

StringsStringsPodemPodem ser ser delimitadas pordelimitadas por ‘, “ ‘, “ ouou [[ ]][[ ]]a = "a = "abcabc""

b = 'def' b = 'def'

c = "c = "abc 'substring' abcabc 'substring' abc""

d = d = 'abc'abc ""substringsubstring" " abc'abc'

CaracterCaracter de escape: de escape: \\\\nn quebraquebra de de linhalinha

\\tt tabtab

\\\\ caractercaracter \\

Page 5: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

5

Linguagens de Programacão [email protected] 9

Strings com [[ ]]Strings com [[ ]]

PermitePermite strings com strings com quebraquebra de de linhalinhac = [[c = [[textotextoemem duas linhasduas linhas [[[[aninhadoaninhado]] ]]]] ]]

print(c) print(c) textotextoemem duas linhasduas linhas [[[[aninhadoaninhado]]]]

Linguagens de Programacão [email protected] 10

ConcatenaçãoConcatenação de Stringsde Strings

OperadorOperador: : ....e = "e = "abcabc" .. 'def'" .. 'def'

print( e ) print( e ) abcdefabcdef

print( e .. [[print( e .. [[ghighi]] ) ]] ) abcdefghiabcdefghi

Page 6: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

6

Linguagens de Programacão [email protected] 11

Conversão ImplícitaConversão ImplícitaLua converte implicitamente números paraLua converte implicitamente números parastrings strings em concatenaçõesem concatenaçõesprint( 'string' .. 10 ) print( 'string' .. 10 ) string10string10print( 4 .. 5.6 ) print( 4 .. 5.6 ) 45.645.6

Lua tentaLua tenta converter converter automaticamenteautomaticamente strings strings para númerospara números emem operações aritméticasoperações aritméticasprint( 10 + '2' ) print( 10 + '2' ) 1212

print( 45 / 'string' )print( 45 / 'string' ) erroerro

Linguagens de Programacão [email protected] 12

UserdataUserdata

O tipo O tipo userdata userdata permite armazenar numa variável de permite armazenar numa variável de Lua um ponteiro qualquer de C.Lua um ponteiro qualquer de C.

Este tipo corresponde ao tipo Este tipo corresponde ao tipo void*void* de C e só pode de C e só pode ser atribuído ou comparado para igualdade a outro ser atribuído ou comparado para igualdade a outro valor de mesmo tipo em Lua.valor de mesmo tipo em Lua.

É útil para programadores que fazem a ligação LuaÉ útil para programadores que fazem a ligação Lua--C, mas não é manipulado por usuários que C, mas não é manipulado por usuários que programam somente em Lua, pois não é possível programam somente em Lua, pois não é possível criar dados deste tipo diretamente em Lua.criar dados deste tipo diretamente em Lua.

Page 7: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

7

Linguagens de Programacão [email protected] 13

TabelasTabelas

O O tipotipo table table ((tabelatabela) é o ) é o tipo mais expressivo da tipo mais expressivo da linguagemlinguagem LuaLua. .

Este tipo implementa os chamados vetores Este tipo implementa os chamados vetores associativosassociativos, , que permitem indexação por valoresque permitem indexação por valores de de qualquer outro tipoqualquer outro tipo, com , com exceçãoexceção do do tipotipo nilnil..

MapeamentoMapeamento de valor de valor valor (valor (domíniodomínio finitofinito).).

Campos Campos não incializados têmnão incializados têm valor valor nil.nil.

Delimitadas porDelimitadas por { }.{ }.

Linguagens de Programacão [email protected] 14

ExemplosExemplos

tabelatabela = {} = {} ---- cria uma tabelacria uma tabelatabelatabela[2] = [2] = 'abc'abc‘‘tabelatabela['string ['string qualquer'qualquer'] = 'valor‘] = 'valor‘print( print( tabelatabela[2] ) [2] ) abcabcprint( print( tabelatabela ) ) table: 10007c28table: 10007c28

array = {1, 2, 3, 4}array = {1, 2, 3, 4}

Page 8: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

8

Linguagens de Programacão [email protected] 15

InicializaçãoInicialização de de TabelasTabelasa = {}a = {}a.campo = 123a.campo = 123a.a.outrooutro = 456= 456a = { campo = 123, a = { campo = 123, outrooutro = 456 }= 456 }print( a.campo ) print( a.campo ) 123123print( a["print( a["outrooutro"] ) "] ) 456456

a = {}a = {}a[1] = ‘a[1] = ‘primeiro’primeiro’a[2] = 4 + 5.6a[2] = 4 + 5.6a = { “a = { “primeiroprimeiro”, 4 + 5.6 }”, 4 + 5.6 }print( a[1] ) print( a[1] ) primeiroprimeiroprint( a[2] ) print( a[2] ) 9.69.6

Linguagens de Programacão [email protected] 16

InicializaçãoInicialização de de TabelasTabelasb = { b = { 'primeiro''primeiro',,

'segundo''segundo';;funcaofuncao==fatorialfatorial,,tabelatabela = { 34 }}= { 34 }}

print( b[1] )print( b[1] ) primeiroprimeiroprint( b[3] )print( b[3] ) nilnilprint( b.print( b.funcaofuncao(5) )(5) ) 120120print( b.print( b.tabelatabela[1] )[1] ) 3434

Page 9: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

9

Linguagens de Programacão [email protected] 17

TabelasTabelas

Campos Campos indexados por indexados por strings strings podem podem ser ser acessados acessados de de duas formas distintasduas formas distintas::tabelatabela.campo = 123.campo = 123print( print( tabelatabela.campo ) .campo ) 123123print( print( tabelatabela['campo'] ) ['campo'] ) 123123

Qualquer tentativaQualquer tentativa de de indexarindexar um valor um valor que que não seja uma tabela geranão seja uma tabela gera um um erroerro..tabelatabela = 34.7= 34.7tabelatabela[3] = 666 [3] = 666 erroerroprint( print( tabelatabela.campo ) .campo ) erroerro

Linguagens de Programacão [email protected] 18

TabelasTabelas

Variáveis contém sempre referências Variáveis contém sempre referências para tabelaspara tabelas..b = b = tabelatabelatabelatabela[3] = 666[3] = 666print( b[3] ) print( b[3] ) 666666print( b ) print( b ) table: 34918table: 34918print( print( tabelatabela ) ) table: 34918table: 34918

Page 10: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

10

Linguagens de Programacão [email protected] 19

EstruturasEstruturas de Dadosde Dados

VetoresVetoresvet = {}vet = {}vet[1] = 2.3vet[1] = 2.3vet[2] = 3.45vet[2] = 3.45vet[3] = 5.0vet[3] = 5.0

MatrizesMatrizesvet = { {}, {}, {} }vet = { {}, {}, {} }vet[1][1] = 4vet[1][1] = 4vet[1][2] = 34.5vet[1][2] = 34.5

RecordsRecordsstrut = {}strut = {}strut.campo = valorstrut.campo = valorstrut.strut.outrooutro = 2.3= 2.3

ObjetosObjetosobjobj = {}= {}objobj.atrib1 = 4.atrib1 = 4objobj.met1 = f.met1 = f

Linguagens de Programacão [email protected] 20

BooleanosBooleanos

Introduzido apenas a partir da versão 5.0 de Introduzido apenas a partir da versão 5.0 de Lua.Lua.

Corresponde aos valores Corresponde aos valores truetrue e e false.false.

Tanto Tanto falsefalse quanto quanto nilnil tornam uma tornam uma expressão condicional falsa.expressão condicional falsa.

Qualquer outro valor torna a expressão Qualquer outro valor torna a expressão condicional verdadeira.condicional verdadeira.

Page 11: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

11

Linguagens de Programacão [email protected] 21

OperadoresOperadores

OperadoresOperadores relacionais relacionais e e lógicoslógicos::

<, >, <=, >=, ==, ~=<, >, <=, >=, ==, ~=

and, or, notand, or, not

Operadores matemáticosOperadores matemáticos

+, +, --, *, /, ^ (, *, /, ^ (exponenciaçãoexponenciação))

Linguagens de Programacão [email protected] 22

ExemplosExemplos

if not a thenif not a thenprint("print("variavelvariavel a é a é igualigual a nil")a nil")

endendif 2 ~= “2” thenif 2 ~= “2” then

print("print("nãonão fez fez conversão automáticaconversão automática")")endenda = 2a = 2b = “1” + “1”b = “1” + “1”if a == b thenif a == b then

print(“b print(“b contémcontém um um númeronúmero”)”)endend

Page 12: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

12

Linguagens de Programacão [email protected] 23

VariáveisVariáveis

Variáveis em Lua não precisam Variáveis em Lua não precisam ser ser declaradasdeclaradas. .

Um Um comando comando de de atribuição funciona como uma atribuição funciona como uma declaração implícitadeclaração implícita, e o , e o tipo da variável tipo da variável é é associado associado ao ao dado dado que ela contémque ela contém ((tipagemtipagem dinâmicadinâmica).).

Identificadores podem conter letrasIdentificadores podem conter letras, , númerosnúmeros e _ , e _ , mas não podem começarmas não podem começar com com númerosnúmeros..

Variáveis não inicializadas têmVariáveis não inicializadas têm valor valor nil:nil:

print( f ) print( f ) nilnil

Linguagens de Programacão [email protected] 24

ExpressõesExpressões

Expressões em Lua podem ter vários Expressões em Lua podem ter vários valoresvalores..

São avaliadas da esquerda paraSão avaliadas da esquerda para a a direitadireita::x, y, z = 1, 1+1, 3x, y, z = 1, 1+1, 3print(x) print(x) 11print(y) print(y) 22x, y = y, x x, y = y, x ---- swapswapprint(x) print(x) 22print(y) print(y) 11

Page 13: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

13

Linguagens de Programacão [email protected] 25

Comandos Comandos de de SeleçãoSeleçãoifif

if a ~= if a ~= 'abc''abc' thenthenprint("print("diferentediferente")")

endend

if a ~= if a ~= 'abc''abc' thenthenprint("print("diferentediferente")")

elseelseprint("print("igualigual")")

endend

if a == 1 then ...if a == 1 then ...elseifelseif a == 3 then ...a == 3 then ...elseifelseif a == a == 'abc''abc' then ...then ...endend

Linguagens de Programacão [email protected] 26

ComandosComandos de de RepetiçãoRepetiçãowhile while ee repeatrepeat

cont = 1cont = 1while cont <= 10 dowhile cont <= 10 do

print( cont )print( cont )cont = cont + 1cont = cont + 1

endend

cont = 1cont = 1repeatrepeat

print( cont )print( cont )cont = cont + 1cont = cont + 1

until cont > 10until cont > 10

Page 14: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

14

Linguagens de Programacão [email protected] 27

ComandosComandos de de RepetiçãoRepetiçãoforfor

O O comando comando for for pode pode ser ser usado da usado da forma forma tradicionaltradicional::

for cont=1,10,for cont=1,10,11 dodoprint( cont )print( cont )

endend

OuOu comocomo um um iteradoriterador::

table = {x=1, y= 3, z= 5}table = {x=1, y= 3, z= 5}for index,value in pairs(table) dofor index,value in pairs(table) do

print (index..’=‘..value)print (index..’=‘..value)endend

Define o step. Este valor éDefine o step. Este valor éopcional e o default é 1.opcional e o default é 1.

Linguagens de Programacão [email protected] 28

FunçãoFunção nextnext

UmaUma outraoutra forma de forma de percorrerpercorrer umauma tabelatabela LuaLuaé é atravésatravés da funçãoda função especial especial nextnext::

table = {x=1, y= 3, z= 5}table = {x=1, y= 3, z= 5}index,value = next(table)index,value = next(table)while index dowhile index doprint (index..’=‘..value)print (index..’=‘..value)index,value = next(table,index)index,value = next(table,index)

endend

Page 15: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

15

Linguagens de Programacão [email protected] 29

FunçõesFunçõesFunções em Lua são definidas através da declaraçãoFunções em Lua são definidas através da declaraçãofunctionfunction::function function farenheitfarenheit( ( celsiuscelsius ))

return 9/5*return 9/5*celsiuscelsius + 32+ 32endend

function function fatorialfatorial( n )( n )if n == 0 then return 1 endif n == 0 then return 1 endreturn n * return n * fatorialfatorial( n( n--1 )1 )

endend

print( print( farenheitfarenheit( 55.67 ) ) ( 55.67 ) ) 132.206132.206

print( print( fatorialfatorial( 10 ) ) ( 10 ) ) 36288003628800

Linguagens de Programacão [email protected] 30

Em Lua funções são valores Em Lua funções são valores de de primeira primeira ordemordem, , podendo podendo ser ser atribuídas atribuídas a a variáveisvariáveis, , passadas como parâmetros ou retornada por passadas como parâmetros ou retornada por funçõesfunções..

Variáveis contém referência paraVariáveis contém referência para as as funçõesfunções..

Funções podem retornar mais Funções podem retornar mais de um valor.de um valor.

Não existe qualquer restrição Não existe qualquer restrição a a recursividaderecursividade..

FunçõesFunções

Page 16: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

16

Linguagens de Programacão [email protected] 31

ExemplosExemplosa = function (x,y) return x+y enda = function (x,y) return x+y endprint(a( 5,4 )) print(a( 5,4 )) 99print(a) print(a) function: 10007618function: 10007618

show = printshow = printprint = nilprint = nilshow( soma( 5,4 ) ) show( soma( 5,4 ) ) 99

function function incrementaincrementa( a, b )( a, b )return a+1, b+1return a+1, b+1

endendx, y = x, y = incrementaincrementa( 10, 20 )( 10, 20 )show( x ) show( x ) 1111show( y ) show( y ) 2121

Linguagens de Programacão [email protected] 32

FunçõesFunções

A A passagempassagem de de parâmetrosparâmetros acontece acontece porpor valor. valor.

EntretantoEntretanto, no , no casocaso de de tabelastabelas e e funçõesfunções as as variáveis armazenam sempre referênciasvariáveis armazenam sempre referências. . Logo a Logo a passagem passagem de de parâmetros parâmetros é é equivalente equivalente a a uma passagem por referênciauma passagem por referência..

Page 17: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

17

Linguagens de Programacão [email protected] 33

function function mudamuda( x ) ( x ) x=1x=1

endenda = 2a = 2mudamuda( a )( a )print( a ) print( a ) 22

function function mudamuda( tab )( tab )tab.x = 0tab.x = 0

endendtabelatabela = {}= {}tabelatabela.x = 666.x = 666mudamuda( ( tabelatabela ))print( print( tabelatabela.x ) .x ) 00

ExemplosExemplos

Linguagens de Programacão [email protected] 34

EscopoEscopo

Lua apresenta escopo estático.Lua apresenta escopo estático.

O escopo de variáveis iniciaO escopo de variáveis inicia--se no primeiro se no primeiro comando após a sua declaração e termina no comando após a sua declaração e termina no final do bloco no qual foi declarado .final do bloco no qual foi declarado .

Variáveis locais podem ser declaradas dentro Variáveis locais podem ser declaradas dentro de qualquer bloco através da palavra de qualquer bloco através da palavra reservada reservada locallocal. .

Page 18: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

18

Linguagens de Programacão [email protected] 35

ExemploExemplox = 10 x = 10 ---- variavel globalvariavel globaldo do ---- novo bloconovo bloco

local x = x local x = x ---- novo `x'novo `x'print(x) print(x) ----> 10> 10x = x+1x = x+1do do ---- outro blocooutro bloco

local x = x+1 local x = x+1 ---- outro `x'outro `x'print(x) print(x) ----> 12> 12

endendprint(x) print(x) ----> 11> 11

endendprint(x) print(x) ----> 10 (x global)> 10 (x global)

Linguagens de Programacão [email protected] 36

Funções BásicasFunções Básicasloadfile(filename)loadfile(filename) –– carrega um arquivo como carrega um arquivo como um bloco de código Lua e, caso não existam erros, um bloco de código Lua e, caso não existam erros, retorna a função correspondente.retorna a função correspondente.

dofile(filename)dofile(filename) -- carrega um arquivo como um carrega um arquivo como um bloco de código Lua e, caso não existam erros, bloco de código Lua e, caso não existam erros, executa este bloco no escopo global.executa este bloco no escopo global.

loadstring (string)loadstring (string) –– compila compila stringstring como se como se fosse fosse um bloco de código Lua e, caso não existam um bloco de código Lua e, caso não existam erros, retorna a função correspondente.erros, retorna a função correspondente.

Page 19: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

19

Linguagens de Programacão [email protected] 37

Funções BásicasFunções Básicasprint (o1, o2, ...)print (o1, o2, ...) –– imprime os objetos imprime os objetos o1, o2o1, o2, etc, no , etc, no stdout.stdout.

type(o)type(o) –– retorna um string descrevendo o tipo de retorna um string descrevendo o tipo de oo. Os . Os resultados possíveis são resultados possíveis são "nil" , "number", "string", "boolean, "nil" , "number", "string", "boolean, "table", "function", "thread", e "userdata". "table", "function", "thread", e "userdata". tostring(o)tostring(o) –– tenta transformar um objeto tenta transformar um objeto oo qualquer em qualquer em string.string.

tonumber(o)tonumber(o) –– tenta transformar o objeto tenta transformar o objeto oo em um número.em um número.

unpack(list)unpack(list) -- retorna todos os elementos de retorna todos os elementos de listlist. É . É equivalente a: equivalente a:

return list[1], list[2], ..., list[n]return list[1], list[2], ..., list[n]

Linguagens de Programacão [email protected] 38

Funções BásicasFunções Básicastable.foreach (table, f)table.foreach (table, f)–– executa a função executa a função ffpara todos os elementos de para todos os elementos de tabletable..

table.getn (table)table.getn (table)–– retorna o tamanho da retorna o tamanho da tabela tabela tabletable se esta for um array. Caso exista um se esta for um array. Caso exista um campo com índice n, retorna o valor deste campo.campo com índice n, retorna o valor deste campo.

table.sort (table [, comp])table.sort (table [, comp])–– ordena os ordena os elementos de elementos de tabletable usando a função usando a função compcomp como como critério de comparação. Caso critério de comparação. Caso compcomp não seja não seja fornecido como parâmetro, o operador fornecido como parâmetro, o operador >> é utilizado.é utilizado.

Page 20: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

20

Linguagens de Programacão [email protected] 39

Exemplo Exemplo -- CloneClonefunction ts.clone(o)function ts.clone(o)if (type(o)~="table") thenif (type(o)~="table") then

return oreturn oelseelse

local new_o ={}local new_o ={}for i,v in pairs(o) dofor i,v in pairs(o) do

new_o[i] = ts.clone(v)new_o[i] = ts.clone(v)endendreturn new_oreturn new_o

endendendend

Linguagens de Programacão [email protected] 40

Exemplo Exemplo -- SerializaçãoSerializaçãofunction serialize (o) function serialize (o) if type(o) == "number" then if type(o) == "number" then write(o) write(o)

elseif type(o) == "string" then elseif type(o) == "string" then write(format("%q", o)) write(format("%q", o))

elseif type(o) == "table" then elseif type(o) == "table" then write("{write("{\\n") n") for k,v in pairs(o) do for k,v in pairs(o) do write(" ", k, " = ") write(" ", k, " = ") serialize(v) serialize(v) write("write("\\n") n")

end end write("}write("}\\n") n")

else else error("cannot serialize a "..type(o)) error("cannot serialize a "..type(o))

end end end end

Page 21: Lua – Parte I - PUC-Rioinf1621/lua1.pdf · 3 Linguagens de Programacão I mleal@inf.puc-rio.br 5 Lua - Introdução Um programa Lua é composto por blocos de código conhecidos

21

Linguagens de Programacão [email protected] 41

Exemplo Exemplo –– Lista (LIFO)Lista (LIFO)function insert(list,o)function insert(list,o)if not(list) thenif not(list) thenlist={}list={}

endendlocal node ={}local node ={}node.data = onode.data = oif list.last thenif list.last thenlist.last.next = nodelist.last.next = node

elseelselist.first = nodelist.first = node

endendlist.last = nodelist.last = nodereturn listreturn list

endend

function retrieve(list)function retrieve(list)if (list and list.first) thenif (list and list.first) then

local o = list.first.datalocal o = list.first.dataif (list.first==list.last) if (list.first==list.last) thenthen

list.first=nillist.first=nillist.last=nillist.last=nil

elseelselist.first = list.first.nextlist.first = list.first.next

endendreturn oreturn o

elseelsereturnreturn

endendendend