390 likes | 524 Views
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:
E N D
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: • Programação orientada a objetos • Programação funcional • Programação orientada a dados • Planejada para ser usada como uma linguagem de script leve e poderosa
O que é Lua? • Implementada como uma biblioteca • Escrita 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 Lua • Escrever e ler variáveis Lua • Registrar funções C para serem chamadas pelo código Lua
O que é Lua? • Através de uso de funções C, Lua pode ser estendida • Criaçã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ável • biblioteca, com API bem definida e simples para C • bibliotecas básicas implementadas em C através da API • Acoplada a diversas linguagens: • C/C++, Java, Fortran, Ruby, OPL (linguagem do EPOC), etc. • Simples e flexível • Linguagem pequena, com poucos (mas poderosos) mecanismos. • Poucos casos especiais
A Linguagem • Convencional • Os indentificadores podem ser qualquer cadeia de letras e dígitos. • As palavras reservadas são:
A Linguagem • É case sensitive • Os 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 tipada • Variáveis não possuem tipos, valores possuem tipos. • Os valores são de primeira classe • Não existe definição de tipos • Existem 8 tipos básicos:
Tipos • Nil • Ausência de valor útil • Boolean • True ou False (ou nil) • String • Cadeias de caracteres • Number • Ponto flutuante de precisão dupla
Tipos • Userdata • Permite que dados C arbitrários possam ser armazenados em variáveis Lua • Thread • Usado para implementar co-rotinas • Table • Arrays 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ção • Qualquer 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 tabelas • Os 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 local • Variá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: • If • Repeat • While • For (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 falsos • Todos os outros valores são considerados verdadeiros
For • Possui duas variações: • Numérica • Gené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: • And • Not • Or • 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
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 Digital • NCLua • Outros Usos • Conectiva: APT-RPM (padrão para distribuições RPM) • Intel: ferramenta interna para layout de chips • tomsrtbt: “The most Linux on one floppy disk” • . . .
Conclusões • Linguagem pequena • Capacidade de estender sua biblioteca (especializar) • Leve • Embutível • Ótima opção para uma linguagem hóspede
Exercícios • Acesse: http://www.lua.org/cgi-bin/demo • Exercício 1 • Implemente a função de Fibonacci. • Exercício 2 • Implemente 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!