Caio Neves Leila Soriano

39
Caio Neves Leila Soriano

description

Caio Neves Leila Soriano. Roteiro. O que é Lua? Origem Por que usar Lua? Aspectos da linguagem Exemplos Onde é usada? Exercícios. O que é Lua?. Linguagem de programação de extensão projetada para dar suporte à programação procedimental; Oferece suporte também para: - PowerPoint PPT Presentation

Transcript of Caio Neves Leila Soriano

Caio NevesLeila Soriano

Roteiro

O que é Lua?OrigemPor que usar Lua?Aspectos da linguagemExemplosOnde é usada?Exercícios

O que é Lua?

Linguagem de programação de extensão projetada para dar suporte à programação procedimental;

Oferece suporte também para:Programação orientada a objetosProgramação funcionalProgramação orientada a dados

Planejada para ser usada como uma linguagem de script leve e poderosa

O que é Lua?

Implementada como uma bibliotecaEscrita em C limpo

Por ser de extensão funciona somente embarcada num programa hospedeiro.

O programa hospedeiro pode:Invocar funções para executar um pedaço de

código LuaEscrever e ler variáveis LuaRegistrar funções C para serem chamadas pelo

código Lua

O que é Lua?

Através de uso de funções C, Lua pode ser estendidaCriação de linguagens especializadas

Lua é um software livre

Origem

Totalmente Brasileira (projeto, implementação e desenvolvimento).Única linguagem produzida fora do primeiro

mundo a ter aceitação mundial

PUC-Rio, Departamento de Informática (Pontifícia Universidade Católica do Rio de Janeiro).

Nasceu e cresceu no Tecgraf e é desenvolvida no Lablua.

Por que usar Lua?

Pequena interpretador completo mais bibliotecas

básicas tem 140K Portátil

escrita em ANSI C, compila o mesmo código em todas as plataformas Unix, Windows (incluindo CE), Playstation II,

OS/390, XBox, BeOS, DOS,Palm OS, EPOC, sistemas embutidos, etc.

Eficiente

Por que usar Lua?

Acoplávelbiblioteca, com API bem definida e simples para

Cbibliotecas básicas implementadas em C através

da APIAcoplada a diversas linguagens:

C/C++, Java, Fortran, Ruby, OPL (linguagem do EPOC), etc.

Simples e flexívelLinguagem pequena, com poucos (mas

poderosos) mecanismos.Poucos casos especiais

A Linguagem

ConvencionalOs indentificadores podem ser qualquer

cadeia de letras e dígitos.As palavras reservadas são:

A Linguagem

É case sensitiveOs nomes que começam com sublinhado

seguido por letra maiúscula são reservados para variáveis globais internas

Denotam itens léxicos:

Valores e Tipos

Dinamicamente tipadaVariáveis não possuem tipos, valores possuem

tipos.

Os valores são de primeira classe Não existe definição de tiposExistem 8 tipos básicos:

Tipos

NilAusência de valor útil

BooleanTrue ou False (ou nil)

StringCadeias de caracteres

NumberPonto flutuante de precisão dupla

Tipos

Userdata Permite que dados C arbitrários possam ser

armazenados em variáveis Lua

ThreadUsado para implementar co-rotinas

TableArrays associativos

Valores do tipo table, function, thread e userdata (completo) são objetos:Contêm referências para os valores

Coerção

Lua provê coerção automática de string para number em tempo de execuçãoQualquer operação aritmética aplicada a

uma cadeia de caracteres tenta converter essa cadeia em um número

Um número ao ser usado onde uma cadeia de caracteres é esperada é convertido para string

Variáveis

Três tipos:Globais, locais e campos de tabelasOs parâmetros de funções são um caso especial

de variáveis locais

Toda variável é global ao menos que ela seja declarada como localVariáveis locais possuem escopo léxico

Variáveis

Colchetes são usados para indexar uma tabela

Comandos

Podem ser opcionalmente seguidos por“;”Não é permitida a construção

“;;”(comando vazio)Blocos podem ser delimitador para um

único comando

Comandos

Lua permite atribuições múltiplas

Estruturas de controle

Uso de sintaxe familiar:IfRepeatWhileFor (com 2 variações)

A expressão de condição de uma estrutura de controle pode retornar qualquer valor:false ou nil são considerados valores falsosTodos os outros valores são considerados

verdadeiros

Estruturas de controle

For

Possui duas variações:NuméricaGenérica

O laço for numérico repete um bloco de código enquanto uma variável de controle varia de acordo com uma progressão aritmética

For

O comando for genérico funciona utilizando funções, chamadas de iteradoras. A cada iteração, a função iteradora é chamada

para produzir um novo valor, parando quando este novo valor é nil.

Comandos Return e Break

Return é usado para retornar valores de um trecho ou de uma função

Break é usado para terminar a execução de um laço while, repeat ou for, pulando para o próximo comando depois do laço.Termina a execução do laço mais interno

Operadores

Iguais a C, Java… exceto:Diferença: ~=Adição do operador tamanho: #Operadores lógicos denotados por:

AndNotOr

Concatenão: ..

Precedência: comum a C

Operadores

Precedência:

or and < > <= >= ~= == .. + - * / % not # - (unary) ^

Funções

Definições:

Regras de Visibilidade

Lua é uma linguagem com escopo léxico.

Começa no primeiro comando até o fim do bloco mais interno.

Coletor de Lixo

Lua realiza gerenciamento automático da memória

tabelas, userdata, funções, fluxos de execução, cadeias de caracteres, etc.

Lua implementa um coletor de lixo marca-e-limpa (mark-and-sweep) incremental.

Controle do garbagecollector através de Lua

Co-Rotinas

Lua oferece suporte a co-rotinas (threads)

Uma co-rotina em Lua representa um fluxo de execução independente

É possível criar uma co-rotina com uma chamada à coroutine.create

A co-rotina inicia sua execussao atraves a camada da funcao coroutine.resume

Finalmente…

Hello World

Outros códigos…

Usando tabelas:

Onde é usada?

Muito utilizada em jogos:LucasArts: Grim Fandango, Escape From Monkey

Island BioWare: Baldur’s Gate, MDK2 Microsoft games: Mythica freeware: Angband (RPG)Blizzard: Word of Worcraft

Onde é usada?

Aplicações para TV DigitalNCLua

Outros UsosConectiva: APT-RPM (padrão para distribuições

RPM)Intel: ferramenta interna para layout de chipstomsrtbt: “The most Linux on one floppy disk” . . .

Onde é usada?

Conclusões

Linguagem pequenaCapacidade de estender sua

biblioteca (especializar)LeveEmbutívelÓtima opção para uma linguagem

hóspede

Exercícios

Acesse: http://www.lua.org/cgi-bin/demoExercício 1

Implemente a função de Fibonacci.

Exercício 2Implemente o quicksort, utilizando tabelas.

Referências

http://www.lua.org/manual/5.1/pt/manual.html#2

http://www.telemidia.puc-rio.br/~francisco/nclua/tutorial/index.html

Dúvidas?

Obrigado pela atenção!