[Tutorial] Navegando pelos elementos de uma tabela [MTA]

Neste tutorial irei explicar sobre o conhecido (e comumente usado) in ipairs(), um "loop" que percorre todos os ítens de uma tabela (vetor).

1 - Iniciando - Conhecendo as tabelas
As tabelas (ou vetores, assim conhecido em outras linguagens) é uma variável que armazena um conjunto de valores que podem ser acessados através de um índice. Suponhamos que temos em um quarto um armário com 3 gavetas, onde cada gaveta possui um nome:
 gaveta_1 = "cuecas"
• gaveta_2 = "meias"
• gaveta_3 = "camisas"


Para evitar criar uma variável para cada gaveta, poderíamos simplesmente criar uma tabela:

  1.  gavetas = {}

Para atribuirmos valores a tabela, adicionamos cada valor separado por vírgula:

  1. gavetas = { "cuecas""meias""camisas" }

Sendo assim, temos uma tabela com três índices: índice 1 (cuecas), índice 2 (meias), índice 3 (camisas). Para acessarmos cada índice, usamos o nome da variável seguido do valor respectivo ao índice entre colchetes(variavel[n_indice]):
  1. gavetas = { "cuecas""meias""camisas" }
  2. outputChatBox("Item 1: " .. gavetas[1] .. " | Item 2: " .. gavetas[2] .. " | Item 3: " .. gavetas[3])

O resultado seria:

  1. Item 1: cuecas | Item 2: meias | Item 3: camisas

2 - Percorrendo os valores da tabela utilizando in ipairs()
O exemplo anterior poderia ter sido exemplificado. Imaginamos agora uma tabela com 50 índices. Se quiséssemos escrever TODOS os valores (do índice 1 ao índice 50), necessitaríamos de uma boa parte do tempo para escrever tudo (gavetas[1], gavetas[2], gavetas[3], gavetas[4], gavetas[5], etc).

Para facilitar, poderíamos usar o in ipairs(). Este tem como finalidade percorrer, automaticamente, cada ítem da tabela jogando-a a uma variável (definida por você). Ou seja: ela percorre o primeiro ítem da tabela, joga na variável que você definiu e executa um bloco de instruções (no exemplo, escrever o valor no chat). Após isto, volta a realizar a mesma tarefa, porém percorrendo o segundo ítem e assim por diante. 

Escrevendo o exemplo acima usando in ipairs(), seria: 

  1.  
  2. gavetas = { "cuecas""meias""camisas" }
  3.  
  4. -- Sintaxe: for i, v in ipairs(nome_tabela) do {}
  5. for i, dentro_gaveta in ipairs(gavetas) do
  6.       outputChatBox("Item "..i..": " .. dentro_gaveta)
  7. end
  8.  
  9.  

Resultado:
  1. Item 1: cuecas | Item 2: meias | Item 3: camisas

Assim, no primeiro loop, "i" assumiria o valor "1" (número do índice em que está posicionado o in ipairs()); "dentro_gaveta" assumiria o valor "cuecas", que é o valor definido para o primeiro item da tabela; dentro do bloco temos a função outputChatBox(), responsável por escrever os valores na tela (chat).

Após executar o bloco de instruções, o in ipairs() passa a apontar então para o próximo ítem (no caso, o segundo ítem), efetuando a mesma tarefa.


3 - Exercícios resolvidos
1) Crie uma tabela com 5 índices e atribua à cada índice o nome de uma fruta. Em seguida, apresente na tela o nome dessas frutas.

Resolução) 

  1. local frutas = { "maca""laranja""banana""melancia""ameixa" }
  2.  
  3. for i, nome_fruta in ipairs(frutas) do
  4.       outputChatBox(nome_fruta)
  5. end
  6.  

4 - Exercícios para praticar
1) Crie uma tabela com 8 índices e atribua a cada índice o nome de uma pessoa. Em seguida, apresente na tela o nome de cada um deles.

2) Crie duas tabelas com 5 índices. Na primeira tabela, insira uma idade qualquer (número inteiro) para cada ítem. Em seguida, passe o valor do primeiro índice da primeira tabela para o primeiro índice da segunda tabela e assim por diante. Utilize in ipairs() para isso.

5 - Conclusão
Bom pessoal, podemos ver que este é um tutorial básico, apresentando um conceito básico de programação em Lua. O objetivo deste é auxiliar os iniciantes que não conseguem entender ou manusear o recurso, a fim de aprimorá-los.

Caso queiram praticar, podem resolver os dois exercícios propostos além claro de desenvolver o seu próprio desafio. O intuito é realmente aprender, compartilhar. :)

Creditos: Stanley Sathler.

0 comentários:

Postar um comentário

 
▲ Subir