Lordfire 111 #1 Posted February 5, 2014 Variáveis Uma variável é um nome que você dá para um certo valor que será armazenado. Essa variável ficará na memória e pode sempre ser acessada pelo seu nome. Por exemplo: x = 15 Eu criei uma variável chamada x que, sempre que for mencionada, significa que eu quero o valor 15. Eu posso, a qualquer momento, mudar o valor de x também: x = 15 ... x = 12 A partir da mudança, sempre que eu usar x, o valor retornado sera 12, e não mais 15. Para mudar o valor de variáveis, podemos usar expressões, também: x = 15 y = x + 7 x = (2 * x) - y Nesse exemplo, o valor de y termina como 22, já que na hora que avaliamos a expressão, x vale 15. Depois, o valor de x é alterado para 8, já que 2 * x na hora da avaliação é 30, e 30 - 22 dá o resultado. Note, porém, que o valor de y não é alterado. Lua também tem uma facilidade chamada multiple assignment (atribuição múltipla), que pode ser usada assim: x, y = 15, 7 y, x = x + 7, (2 * x) - y Na primeira linha, atribuímos os valores 15 e 7 para x e y, respectivamente. Nesse momento, não poderíamos definir y como x + 7, porque x ainda não existe nessa linha (isso é importante). Na linha de baixo, o valor de y é alterado para x (que está valendo 15) + 7, portanto, 22. No entanto, x não vai ter o mesmo valor que no exemplo anterior, pois 2 * x (que vale 30) - y (que ainda vale 7) dá 23. Entendido? As variáveis assumem o valor que tinham até aquela linha, mas as alterações só valem a partir daquela linha. Se, ao usar a atribuição múltipla, você informar mais valores do que variáveis, os valores sobrando são descartados: a, b, c = 1, 2, 3, 4, 5 Nesse caso, 4 e 5 não são atribuídos a variável nenhuma e, portanto, não são usados. Porém, se você informar menos valores do que variáveis, as variáveis sem valor terão o valor nil (nulo): a, b, c, d = 1, 2 Nesse caso, c e d valem nil. Tipagem A tipagem ou os tipos de variáveis disponíveis em Lua são: numbers, strings, boolean, tables e functions. Numbers Não existe distinção entre os números decimais e inteiros, Lua trata todos do mesmo jeito. São exemplos de numeros: x = 10 y = 7.5 z = 2.5e-4 O último exemplo usa de notação científica para atribuir o valor, que quer dizer x = 2.5 * 10 ^ 4 e é perfeitamente válido. Com números podemos operar uma série de operações matemáticas: x = 10 + 7.5 -- soma y = x * 4 -- multiplicação z = x / y -- divisão exata a = x % 2 -- resto da divisão b = a ^ 3 -- potência c = -b -- inversão do valor (implicitamente, 0 - [/code] Strings Strings são cadeias de caracteres, ou pedaços de texto. Elas são delimitadas por aspas (simples ou duplas) ou por um par de colchetes, onde um pode ser usado quando um caractere especial do outro não pode: x = 'OTserv "Brasil"' y = "A cidade dos elfos é Ab'Dendriel" z = [[O banqueiro de Ab'Dendriel se chama "Finarfin"]] Se fosse necessário usar um caractere que delimita nossa string dentro da mesma, precisaríamos escapar usando uma barra invertida: y = 'A cidade dos elfos é Ab\'Dendriel' Da mesma forma, podemos escapar caracteres especiais, como o caractere de nova linha (\n): x = 'OTserv Brasil\nO seu portal para o mundo OTserv' Isso cria a seguinte string: OTserv BrasilO seu portal para o mundo OTserv Onde você pode ler o \n como uma quebra de linha. É importante notar que os caracteres são escapados apenas em strings delimitadas por aspas. Portanto, o seguinte código: x = [[OTserv Brasil\nO seu portal para o mundo OTserv]] Cria a seguinte string: OTserv Brasil\nO seu portal para o mundo OTserv Para criar textos de múltiplas linhas usando os duplos colchetes, você não precisa usar \n; quebras de linha são interpretadas normalmente, então, para ter a string certa, faríamos: x = [[OTserv Brasil O seu portal para o mundo OTserv]] Concatenação Strings podem ser unidas, mas diferentemente dos números que podem ser somados, as strings precisam ser concatenadas. Isso significa unir uma string à outra: x = "OTserv" .. "Brasil" Assim, x vai valer OTservBrasil. Note que não é criado um espaço automaticamente entre elas. Você também pode misturar os delimitadores a vontade na concatenação: x = "OTserv" .. ' Brasil' .. [[ O seu portal]] .. " para o mundo" .. ' OTserv' Boolean Valores booleanos são aqueles que só podem ter 2 valores: true ou false. Geralmente são usados para controle. x = true y = false Com booleanos, podemos também usar o operador not, que nega o valor seguinte: x = not true y = not x Onde x valerá false e y valerá true. Nil Também existe um tipo especial, que na verdade indica algo que não existe. Quando você tentar acessar uma variável que não existe, por exemplo, vai receber o valor nil. Para destruir uma variável, você deve atribuir o valor nil: x = 10 alguma_funcao(y) -- executando uma função com y, mas y não existe, portanto, nil y, x = x, nil alguma_funcao(y) -- agora y vale 10, mas x vale nil (não existe mais) Explicações mais profundas sobre strings e também sobre functions e tables serão dadas em outros tutoriais. Coerção Coerção significa converter o tipo automaticamente quando precisamos. O seguinte código, por exemplo, transforma o número automaticamente em string: x = "Eu entendi " .. 100 .. "% deste tutorial" Isso pode ser usado para converter variáveis também: x = 9.5 y = "O Lordfire é " .. x Nomeando variáveis Isso é uma parte muito importante de um código. Use nomes explicativos para suas variáveis, nunca use abreviações ou apenas uma letra (salvo, claro, quando isso faz sentido). Por exemplo, veja este código: a = b * c + d Se você encontrar isso no meio de um código, a não ser que haja uma documentação falando o que é a, b e c, não faz sentido algum. Agora, a figura muda quando você lê esse codigo: total_level = player_resets * reset_level + player_level Viu como agora fica fácil saber o que esse codigo faz? Além disso, você deve saber que variáveis só podem ter letras, numeros e underlines, e não podem começar com números. Tente sempre fazer com que suas variáveis tenham nomes que identifiquem elas facilmente (chama-se Notação Húngara, se deseja pesquisar mais). Uma dica interessante é usar is na frente de variáveis booleanas que representem algo. Por exemplo: is_player_male = getPlayerSex(cid) Assim é fácil identificar quando a variável é apenas true ou false. Detalhes sobre tipagem Partindo para um conhecimento um pouco mais técnico, podemos entender como funciona a tipagem de Lua. A primeira observação que podemos fazer é que a tipagem de Lua é dinâmica. Isto quer dizer que, mesmo que eu queira que x valha 10, a qualquer momento eu posso mudar o valor para "Lordfire", assim: x = 10 x = "Lordfire" Perceba que quando eu quero mudar o valor, x deixa de ser um number e se torna uma string. O contrário disso (caso eu não pudesse mais mudar o tipo de x) seria a tipagem estática. Outro ponto que podemos levantar é que a tipagem de Lua é implícita. Se você já viu código C++, deve ter notado que, antes de cada variável que declaramos, precisamos informar o tipo da variável, seja ela int, char e afins, ou seja, é explícita. Em Lua, não precisamos, pois o intepretador é inteligente o suficiente para identificar o tipo de variável (como em Python). Vale lembrar que todos esses conhecimentos são relacionados a linguagem Lua, e não são coisas exclusivas de OTserv. 1 Frosh reacted to this Share this post Link to post
Guest Avuenja #2 Posted February 5, 2014 Simplesmente excelente LF, parabéns pra ti! Ótima aula de Lua! Share this post Link to post
Manoel R 1 #3 Posted February 5, 2014 Uhh, simplesmente perfeito! Ouso dizer que é a melhor explicação sobre variáveis em Lua disponível na internet. Rep+ mais que merecido... Abraços mano. Share this post Link to post
Markin Aqui 0 #4 Posted February 5, 2014 Bem interessante e bem explicado gatão, parabéns. Share this post Link to post
Elver Maguh 93 #6 Posted February 6, 2014 Ótima explicação, sem dúvida um dos melhores tutoriais sobre o assunto, senão o melhor. Mas fiquei curioso pra saber o fim que levou o projeto de Open Tibia em Python, ao que me parece seria muito viável. Share this post Link to post
Manoel R 1 #7 Posted February 6, 2014 Se está se referindo ao PyOt, ele tá lançado, e sinceramente, na minha opinião, da uma surra no TFS, acontece que vai ser praticamente impossível que faça sucesso já que a maioria dos scripters só sabem Lua e alguns C++ e não migrariam pra Python, só se eles gostarem muito de programar, eu atualmente ando aprendendo Python também, e gosto bem mais do que Lua, e acho que os códigos até para Otserver ficam mais bonitos, se rolasse um incentivo maior por parte dos fóruns talvez mais pessoas se interessassem no Pyot, o que seria bem legal. Share this post Link to post