A Linguagem de Programação Lua - Parte 2

Lua é uma linguagem de programação interpretada, imperativa, de script, procedural, pequena, reflexiva e leve, projetada para expandir aplicações em geral, por ser uma linguagem extensível (que une partes de um programa feitas em mais de uma linguagem), para prototipagem e para ser embarcada em softwares complexos, como jogos. Assemelha-se com Python, Ruby e Icon, entre outras.

Por | @oficinadanet Programação

Lua é uma linguagem de programação interpretada, imperativa, de script, procedural, pequena, reflexiva e leve, projetada para expandir aplicações em geral, por ser uma linguagem extensível (que une partes de um programa feitas em mais de uma linguagem), para prototipagem e para ser embarcada em softwares complexos, como jogos. Assemelha-se com Python, Ruby e Icon, entre outras.

Lua foi criada por um time de desenvolvedores do Tecgraf da PUC-Rio, a princípio, para ser usada em um projeto da Petrobras. Devido à sua eficiência, clareza e facilidade de aprendizado, passou a ser usada em diversos ramos da programação, como no desenvolvimento de jogos (a LucasArts, por exemplo, usou a linguagem no jogo Escape from Monkey Island), controle de robôs, processamento de texto, etc. Também é freqüentemente usada como uma linguagem de propósito geral.

Lua combina programação procedural com poderosas construções para descrição de dados, baseadas em tabelas associativas e semântica extensível. É tipada dinamicamente, interpretada a partir de bytecodes, e tem gerenciamento automático de memória com coleta de lixo. Essas características fazem de Lua uma linguagem ideal para configuração, automação (scripting) e prototipagem rápida.

História


Lua foi criada em 1993 por Roberto Ierusalimschy, Luiz Henrique de Figueiredo e Waldemar Celes, membros da Computer Graphics Technology Group na PUC-Rio, a Pontifícia Universidade Católica do Rio de Janeiro, no Brasil. Versões da Lua antes da versão 5.0 foram liberadas sob uma licença similar à licença BSD. A partir da versão 5.0, Lua foi licenciada sob a licença MIT.

Alguns de seus parentes mais próximos são o Icon para sua concepção e Python para a sua facilidade de utilização por não-programadores. Em um artigo publicado no Dr. Dobb's Journal, os criadores da Lua também afirmam que Lisp e Scheme foram uma grande influência na decisão de desenvolver o quadro como a principal estrutura de dados de Lua. Lua tem sido usada em várias aplicações, tanto comerciais como não-comerciais.

Características


Lua é normalmente descrito como uma linguagem de múltiplos paradigmas, oferecendo um pequeno conjunto de características gerais que podem ser estendidas para encaixar diferentes tipos de problemas, em vez de fornecer uma especificação mais complexa e rígida para combinar com um único paradigma. Lua, por exemplo, não contém apoio explícito à herança, mas permite que ela seja executada com relativa facilidade com metatables. Do mesmo modo, Lua permite que programadores quando implementam nomes, classes, e outras funções, o emprego de poderosas técnicas de programação funcional e completos escopos lexicais.

Lua é uma linguagem que suporta apenas um pequeno número de estruturas, tais como dados atômicos, valores booleanos, números (dupla precisão em ponto flutuante por padrão), e strings. As estruturas de dados comuns, tais como matrizes, conjuntos, tabelas, listas, e registros podem ser representados por meio da Lua. Lua não foi construída com suporte para programação orientada a objeto.

Exemplos


O Programa Olá Mundo pode ser escrito da seguinte forma:
print "Olá Mundo!"

A função fatorial recursiva:
function fact(n)
   if n == 0 then
      return 1
   else
      return n * fact(n - 1)
   end
end

O cálculo dos n primeiros números perfeitos:
function perfeitos(n)
    cont=0
    x=0
    print('Os numeros perfeitos sao ')
    repeat
    x=x 1
    soma=0
    for i=1,(x-1) do
        if math.mod(x,i)==0 then soma=soma i;
        end
    end
    if soma == x then
        print(x)
        cont = cont 1
    end
    until cont==n
        print('Pressione qualquer tecla para finalizar...')
end

O tratamento das funções como variáveis de primeira classe é mostrado no exemplo a seguir, onde o comportamento da função ?print? é modificado:
do
   local oldprint = print -- Grava a variável ?print? em ?oldprint?
   print = function(s)    -- Redefine a função ?print?
      if s == "foo" then
         oldprint("bar")
      else
         oldprint(s)
      end
   end
end

Qualquer chamada da função ?print? agora será executada através da nova função, e graças ao escopo léxico de Lua, a função ?print? antiga só será acessível pelo nova.

Lua também suporta funções closure, como demonstrado abaixo:
function makeaddfunc(x) -- Retorna uma nova função que adiciona x ao argumento
   return function(y)
      return x   y
   end
end
plustwo = makeaddfunc(2)
print(plustwo(5)) -- Prints 7

Um novo ?closure? é criado para a variável x cada vez que a função ?makeaddfunc? é chamada, de modo que a função anônima a ser retornada sempre irá acessar seu próprio parâmetro x. O ?closure? é gerenciado pelo coletor de lixo (garbage collector) da linguagem, tal como qualquer outro objeto.

Uma característica essencial de Lua é a semântica Extensível, e o conceito de ?metatables? permite que as tabelas Lua sejam personalizadas em poderosas e exclusivas formas. O exemplo a seguir mostra uma tabela ?infinita?. Para qualquer valor ?n?, ?fibs [n]? dará o enésimo número Fibonacci usando programação dinâmica.
fibs = { 1, 1 } -- Valores iniciais de fibs[1] e fibs[2].
setmetatable(fibs, {
  __index = function(name, n) -- Função chamada se fibs[n] não existir
    name[n] = name[n - 1]   name[n - 2] -- Calcula e grava fibs[n].
    return name[n]
  end
})


Fonte: Wikipédia

Mais sobre: lua, programação
Share Tweet
DESTAQUESRecomendado
Mais compartilhados
Comentários