Ir para conteúdo
Entre para seguir isso  
Lordfire

Variáveis em Lua

Recommended Posts

Lordfire    110
Lordfire

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 - B)[/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 Brasil

O 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.

Compartilhar este post


Link para o post
Convidado Avuenja   
Convidado Avuenja

Simplesmente excelente LF, parabéns pra ti! Ótima aula de Lua! :D

Compartilhar este post


Link para o post
Manoel R    1
Manoel R

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.

Compartilhar este post


Link para o post
Markin Aqui    0
Markin Aqui

Bem interessante e bem explicado gatão, parabéns.

Compartilhar este post


Link para o post
Oneshot    24
Oneshot

Ótimo tutorial, Lordfire.

Compartilhar este post


Link para o post
Elver Maguh    92
Elver Maguh

Ó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.

Compartilhar este post


Link para o post
Manoel R    1
Manoel R

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.

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×