Skip to content

[Lua] Quando usar . ou :

by em 26/03/2012

Dentre as linguagens de script famosas no mundo dos games existe uma brazuca de grande utilização: Lua. Usado por exemplo no CoronaSDK, Love2D, Shiva e CryEngine.

Bom digamos que você gostou da idéia e está usando Lua do nada você se depara com uma armadilha o uso do . ou do : para chamada de métodos.

Pode parecer simples mas existe uma importante diferença entre usar um ou outro. Digamos que dentro do nosso player.lua temos:

 local jogador = criarJogador()
 jogador.pocoes = 2
 function pegarPocao(pocoes)
  jogador.pocoes = jogador.pocoes+pocoes
 end

Para usar essa função tipicamente fariamos jogador.pegarPocao(1). O que acontece se usarmos jogador:pegarPocao(1)?
Bom seu jogador não terá novas poções e em algum momento você acabará com um erro pois a variável que estará em jogador.poções é jogador e não o número 1.
Hein?? Mas como?
De forma simples o que acontece é que o Lua entende : como uma chamada onde o primeiro parâmetro é o objeto que chama a função. Veja:

 --Esse
 function pegarPocao(pocoes)
  jogador.pocoes = jogador.pocoes+pocoes
 end
--É igual à esse
 function pegarPocao(self,pocoes)
  self.pocoes = self.pocoes+pocoes
 end

Ótimo e como eu defino um método sem utilizar explicitamente o primeiro parâmetro? Basta remover o primeiro parâmetro e usar o self no lugar da variável.

 function pegarPocao(self,pocoes)
  self.pocoes = self.pocoes+pocoes
 end

E para usar o método agora temos duas opções:

jogador:pegarPocao(1)
--ou
jogador.pegarPocao(jogador,1)

Pronto agora você já ganhou mais um item e pode acessar uma nova caverna do mundo Lua. Boa fase pra você!

PS: Deixem dúvidas, sugestões e comentários sem noções. Obrigado!

From → Programação

Deixe um comentário

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: