Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Muita gente andou me pedindo para que eu desse algumas dicas com Lua. Então, resolvi por meio dessa aula, dar dicas gerais de toda a linguagem.

Esse tutorial tem como objetivo apenas salientar alguns macetes e dicas legais para Lua tendo em vista que exista um mínimo conhecimento do assunto. Não responderei perguntas que julgo idiotas, portanto, nem tentem poluir esse tópico, se não sabe o que é Lua, procure no Google que é o melhor que você pode fazer. Desde já, desculpo me por minha antipatia por parte dos ignorantes.

Comentários

Além dos conhecidos comentários de linhas únicas iniciados por "-- comments go here" existem comentários de bloco, isto é, de multi linhas, representados por "--[[ comments go here]]".

Variáveis

  • Variáveis como o próprio nome já diz não são constantes, ou seja, o programador pode livremente mudar seus valores
  • Variáveis naturalmente são globais, mas podem se tornar locais colocando se antes do início da declaração "local"
  • O escopo de uma variável é limitada para o escopo atual e seus escopos-filhos
  • Não é recomendado debugar códigos usando variáveis locais pois estas são guardadas no stack e por isso é necessário funções como "assert" e outras
  • Uma variável local com mesmo nome de uma variável global apenas substitui o valor da global temporariamente (geralmente no tempo de sua execução, o que não chega a ser problema na maioria dos casos)

Tipos

Nil

Um valor especial que tem valor vazio e significa nulo (NULL)

  • Variáveis que são declaradas sem valor possuem valor igual a "nil" e podem ser modificadas livremente
  • Na maioria dos casos "nil" é retornado quando uma função falha
  • É possível usar uma alternativa ao "nil" usando "or" já que "nil" leva ao booleano "false": print(tonumber("a"), tonumber("a") or 1) -> prints "nil 1"

Boolean

Pode ter dois valores, true ou false. "Nil" funciona como false mas o número 0 funciona como true. Isso é bastante confundido por muitos

Number

Todos os números em Lua são valores "double float"

  • Variáveis podem ser convertidas em números pela função tonumber(var) que retorna "nil" caso falhe
  • Funções de manipulação de números são encontradas na biblioteca de matemática do Lua (math)

Strings

Strings podem receber os mesmos escapes da linguagem C (\n, \t, \0, etc)

  • Strings são internamente encriptadas pelo Lua, isso quer dizer que existe apenas uma única cópia de uma string em particular não importa quantas variáveis referem a essa string
  • Declarações que contam espaços em branco ou mesmo indicações de pular de linha e uso de tabulação podem ser pegos de forma mais dinâmica usando: string = [[Aqui eu escrevo sem me preocupar com nada e nem mesmo aspas, veja só: ' ""'"''" "]]
  • Strings podem ser concadenadas usando o operador ".."
  • Se existem muitas strings para serem concadenadas, o melhor jeito é inserir estas em uma tabela (usando table.insert()) e concadená-las (usando table.concat())
  • Variáveis podem ser convertidas em strings usando tostring(var) que retorna "nil" caso falhe

Tables

Tabelas podem ser indexadas por números, variáveis, funções, outras tabelas, funções, entre outros

  • Atribuindo um valor a um campo da tabela que não existe automaticamente cria esse campo
  • Ao invés de se usar a função table.getn(table) é possível pegar o número de elementos de uma tabela usando #table onde table é o nume da tabela
  • Não confunda table.getn(table) com table.maxn(table). Enquanto a primeira função retorna o número de elementos contido na tabela, o segundo retorna o maior valor numérico contido na tabela e retorna "nil" caso seja uma tabela formada por strings apenas
  • Ao contrário de outras linguagens, o número correspondente ao primeiro valor não é 0 e sim o valor 1
  • É possível remover valores e elementos de uma função atribuindo-lhes o valor "nil"
  • A tabela global se chama "_G" e você pode vê-la assim como as demais tabelas usando (k = key, v = value): for k, v in pairs(_G) do print(k, v) end

Userdatas

Userdatas são ponteiros do C/C++ que indicam objetos que não podem ser utilizados em Lua

  • Uma "metatable" pode ser um "userdata" para funcionar como uma tabela ou ser chamada como função, operadores próprios, entre outros

Functions

Uma função pode retornar múltiplos valores e podem ser atribuídas a várias variáveis

  • Funções podem ser colocadas em tabelas
  • Valores passados por funções são locais a não ser que sejam tabelas ou userdatas. Isso dá a oportunidade de modificar tabelas dentro de funções
  • Funções auxiliares (ou temporárias) podem ser criadas dentro de funções como locais

Switch

Muita gente me pergunta se existe uma função "switch" para case statements em Lua, a resposta é não. Mas, o uso de tabelas em funções podem simular esse efeito, veja:

Código:

switch = {}

switch[1] = function() print("Olá a todos") end

switch[2] = function() print("Meu nome é Yuji") end

-- ...

if (switch[1]) then

switch[1]() -- executa a função que diz "Olá a todos"

end

Loops

  • No loop "repeat .. until (bool)" não existe o "continue" pois o Lua automaticamente cuida disso. Apesar disso, existe o "break".
  • No loop "for ... do" existe um atribuito após o último valor para poder incrementar a variável assim como no PHP e C++

Mais dicas ainda estão por vir.

Contato;

6yonKDJ.png god.marinii

TaxNfhb.png

Postado

Véélhoo du cééu , q perfeiçao *--*

Nossa man , curti d++ !!

isso ai pode se chamar de uma "Mini Aula de Lua Pura \o/"

REP+ concerteza véi.

sign1z.png

Clique na imagem e veja nosso TOPICO OFFICIAL

Postado

Bacana essas dicas cara, muito legais mesmo, é sempre bom ter um conhecimento a mais sobre a linguagem, quanto mais você domina a linguagem, melhor você pode construir os códigos, fazer eles mais cleans. Obrigado pelo conteúdo!

-"Supra Omnes Lux Lucis"

- Acima de todos brilha a Luz -

5VGnDyBz.png

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo