Postado Novembro 5, 2012 12 anos 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; god.marinii [email protected]
Postado Novembro 5, 2012 12 anos 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. Clique na imagem e veja nosso TOPICO OFFICIAL
Postado Novembro 5, 2012 12 anos 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 -
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.