Lu-a-Bá - O bê-a-bá de Lua para a comunidade lusófona

Por que Lua?

Antes de começar a estudar Lua, é natural que você se pergunte por que motivo faria isso. Algumas vezes, o motivo é dado por força maior, ou seja, um problema envolvendo Lua aparece, e você se vê na obrigação de aprender. Outras vezes pode partir de uma curiosidade ou especulação sobre precisar disso no futuro.

Nos dois casos, você vai querer antes entender o que Lua tem de bom a oferecer, para justificar o tempo que investirá nesse estudo (ainda que Lua seja uma linguagem bastante acessível, até mesmo para quem possui pouca ou nenhuma experiência com programação).

Mas preciso fazer um alerta aos incautos: aprender a programar e aprender uma linguagem de programação (seja Lua ou qualquer outra), por mais que sejam tarefas relacionadas, não são a mesma coisa.

Inclusive, é por isso que é possível aprender Lua tendo uma base de conhecimento em programação pouco consolidada. Por outro lado, você vai tirar mais proveito da linguagem na medida que entender que tipo de problemas quer resolver, e de que maneiras pode resolvê-los com eficiência.

Dito isso, por que você poderia se beneficiar desse estudo? Não é possível prever todas as situações em que esse conhecimento vai ser benéfico, mas se você compreender as principais características de Lua, então pode pelo menos prever algumas dessas situações.

Características de Lua

Na página oficial de Lua em português, consulte a seção Por que escolher Lua? para saber mais sobre os principais motivos que poderiam pesar em favor dessa escolha.

Além do exposto nessa seção, podemos destacar as seguintes características:

Não se preocupe se não entender o que todas essas características significam, veremos tudo isso mais adiante, ao longo dos tutoriais.

Economia de conceitos

A linguagem Lua é marcada pela sua simplicidade. Existem poucos conceitos nela com os quais você precisa se familiarizar. Nesse sentido, é uma linguagem pequena e fácil de guardar na sua memória (não digo a do computador, mas a sua mesmo).

Esses poucos conceitos podem ser combinados e recombinados como peças de montar, que você usa para construir objetos maiores. Isto não é uma abordagem muito comum, então pode levar algum tempo para se acostumar, mas logo você verá que isso não é restritivo. Pelo contrário, amplia as possibilidades.

Essa economia de conceitos é, aliás, o cerne da metaprogramação em Lua. Os três pilares básicos da linguagem são as funções, as tabelas e as co-rotinas. Quando combinados, eles podem ser metaprogramados para assumir comportamentos mais específicos, alinhados à necessidade do programa.

A partir deles, podemos usar paradigmas diferentes em Lua (procedural, funcional, orientado a objetos), criar ambientes segregados para execução, criar e importar módulos e realizar o tratamento de erros.

A base de tudo isso em Lua são esses três conceitos. A partir deles, você pode definir as regras do seu ambiente de execução, no lugar de usar regras pré-determinadas, como ocorre na maior parte dos ambientes de desenvolvimento.

Como bônus, essa economia torna muito mais fácil memorizar como as coisas funcionam em Lua.

Integração com outros ambientes

Um dos pontos fortes de Lua é a possibilidade de integração de toda a sua funcionalidade com outras aplicações, usando a API1 C.

Você pode escrever alguns programas inteiramente em Lua, mas também é bastante comum combinar Lua com outros ambientes de desenvolvimento. Em muitos casos, Lua é um ambiente secundário, funcionando como um motor de extensões/configurações embutido em outra aplicação.

Não raro, um programa precisa de um mecanismo específico para ler seus arquivos de configuração, definir uma interface de depuração, possuir algum método de extensão (para criação de módulos do usuário, ou plugins, por exemplo), ou ainda possuir várias funcionalidades que já são implementadas pela biblioteca Lua.

Neste caso, em vez de reescrever toda essa funcionalidade, a biblioteca Lua pode ser embutida no programa, o que facilita esse trabalho. Por ser uma biblioteca bem pequena e enxuta, o custo desse acoplamento acaba por ser baixo em proporção ao ganho.

Outro ponto interessante sobre isto é o fato de que Lua é um ambiente escrito inteiramente em C89, que é comum a C e C++, portanto você pode compilar a biblioteca Lua do mesmo modo usando um compilador C ou C++.

Em muitos casos, quando você vier a programar em Lua, pode ser que o programa hospedeiro já exista, e a sua tarefa será criar os módulos ou configurações em Lua que serão usados pelo programa.

O próprio interpretador lua é um exemplar de programa hospedeiro (e ele será nossa principal ferramenta ao longo dos tutoriais). Ele cuida de algumas tarefas básicas como controlar a entrada e a saída do programa e tratar erros, por exemplo, mas a maior parte do trabalho é realizada pela biblioteca Lua embutida nele.

Além de poder ser embutida, a biblioteca Lua pode ser também estendida, com módulos externos, escritos em outras linguagens. Por meio da API C, você pode criar funções, tipos e módulos, e expor em Lua.

Isso é bastante útil se levarmos em conta que Lua possui uma biblioteca padrão bastante enxuta. Então, para adicionar funcionalidades que não são cobertas por ela, podemos lançar mão de módulos externos.

Também é útil como forma de integração entre aplicações. Digamos que você está trabalhando em um projeto que envolve aplicações diferentes, cada qual possui uma API própria, e você precisa expor a funcionalidade das duas em uma linguagem de alto nível.

Por meio da API C de Lua, você pode conectar essas aplicações em uma mesma interface, na qual cada aplicação externa é carregada como um módulo adicional. A partir desse ponto, elas podem ser acessadas em um mesmo programa em Lua.

Existem também situações na qual alguma operação é altamente custosa para executar em um ambiente interpretado. Nesse caso, você pode desenvolver essas partes em C ou C++, por exemplo, e em Lua apenas expor mecanismos de acesso a essas funcionalidades pré-compiladas, conseguindo um ganho no desempenho.

Segmentos de destaque

A essa altura você já deve estar imaginando em que situações Lua é um ambiente de destaque hoje. Como é de se esperar, existem alguns espaços onde o uso de Lua é mais favorável do que em outros, pelas características que possui.

E não entenda como se essa lista fosse exaustiva. Qualquer situação na qual você poderia se beneficiar de uma biblioteca acoplada com baixo custo computacional, seja para facilitar a configuração ou para prover extensões ou uma interface programável é propícia para se considerar o uso de Lua.

Igualmente, situações na qual você precisa integrar aplicações diferentes provendo uma interface de alto nível também são cenários favoráveis ao uso da linguagem.

Gostei! E agora?

Se interessou? Então agora é o momento de obter a biblioteca Lua, ou se já tiver feito isso, aprender o básico sobre a execução de código Lua.

Conteúdo relacionado


  1. API é uma abreviação para o termo Application Programming Interface (do inglês, traduzido como interface de programação de aplicações), e serve para expor a funcionalidade de uma aplicação sem que seja necessário conhecer o seu funcionamento interno.