[Aula 9] Tabelas

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[Aula 9] Tabelas

Mensagem  caiohu123 em Sex Nov 26, 2010 6:06 pm

Tabelas
Aula 9
#Introdução
Olá, nessa aula vamos conhecer um elemento que facilita muito a vida de programadores, principalmente quando se trata de um código com muitas variaveis e operações, as tabelas!
Imagine uma tabela como se fosse uma estante com várias gavetas, quantas você desejar, dentro de cada gaveta tem um objeto, temos a gaveta um, a gaveta dois, e assim em diante ... podemos guardar objetos dentro de cada gaveta, tirar objetos delas e também saber o que tem dentro de cada uma, nessa analogia uma tabela é basicamente como se fosse essa estante.
Uma tabela é uma variável estruturada que pode conter vários valores dispostos "dentro" de si (vide analogia), seu inicio é indicado por uma abertura de chave, ela pode conter inúmeros valores, de todos os tipos exceto nulo(nil), desde variáveis até strings, e dentro dela esses valores são separados por vírgulas (,), seu fim é indicado por um fechamento de chave.
Essa definição pode ficar meio confusa aqui, mas garanto que ao longo da aula tudo vai se explicar.

Exemplo:
Lua:
tb = {1, 2, 3, 4, 5} --> inteiros em uma tabela
tb = {"hello", "world"} --> strings em uma tabela
tb = {a = 2, b = 3} --> variáveis em uma tabela
Como você pode perceber nos exemplos acima a declaração (criação) de uma tabela é semelhante a de uma variável comum, mas perceba que a estrutura é diferente, eu abri uma chave `{´ e dentro dessa chave comecei a colocar os valores que eu quero para cada posição na tabela, como se eu estivesse distribuindo-os nas "gavetinhas" 1, 2, etc, separados por vírgulas, é como se cada virgula indicasse que acaba uma gavetinha e começa outra, mas lembre-se só é permitido um valor em cada "gavetinha" e uma gavetinha não pode não ter valor ou ser nula, e no final ocorre um fechamento da chave `}´ que indica o fechamento/final da tabela.

Através desses exemplos e definições percebemos uma coisa, uma tabela é uma variável comum, mas é como se pudessemos guardar vários valores dentro de uma variável só, dentro da tabela, ao invés de criarmos duas variáveis, porque não criamos uma tabela contendo os valores dessas duas variáveis.

#Mas e então, qual é a vantagem de se usar tabelas?
Além da organização e estruturação veremos mais pra frente jeitos de se manipular tabelas que farão com que seu código fique muito menor e mais prático com o uso delas, acompanhe ...

#Agora vamos pra uma parte um pouco mais chatinha, preste atenção
Tabelas contém indexes, o que é um index? Os indexes são chaves "primárias" às quais os valores da tabela são associados, todo valor em uma tabela exceto variáveis tem um index, o index se não definido por você é definido pela posição do valor na tabela, e eles tem a simples função de organização e identificação dos valores na tabela:
Lua:
tb = {2, 5, 4, 6}
Sobre a tabela acima podemos afirmar que o valor 2 tem o index 1, mas porque? Pois como eu já falei o index é definido pela posição do valor na tabela, começando sempre do 1, então ele é o primeiro valor da tabela, tem a posição 1
E assim em diante, o valor 5 tem index 2, o 4 tem index 3, o 6 tem index 6 e sempre em diante ...
Há também a opção de definir o index de um valor manualmente ao invés de simplesmente identifica-los pela posição na tabela, o que pode facilitar a associação de valores:
Lua:
--> [index] = valor
tb = {2, 5, [15] = 30}

Neste caso foi criada uma tabela, e para um de seus valores foi definido o index 15 manualmente, ou seja, o index do valor 2 é 1, e o do valor 5 é 2 (atribuidos pela posição), já para o valor 30 foi definido o index 15 manualmente, então o index do valor 30 é 15, e não 3 como seria normalmente ...

#E como se pega os valores de uma tabela?
Há dois meios de se pegar valores de dentro de uma tabela: Através do index do valor ou se a tabela contiver variáveis, atraves dos nomes das variaveis:
Lua:
t = {21, 23, 43, 54}
t[2] --> esta sintaxe retornará o valor na tabela 't' no index 2, ou seja, 23
t[3] --> 43
t[4] --> 54 e assim por diante ...


Para se obter valores de uma tabela atraves de variaveis inseridas nela é muito mais facil:
Lua:
t = {level = 20, nome = "dragon"}
t.level --> 20, 't' é a tabela e 'level' o nome da variavel inserida nela
t.nome --> "dragon"


#A biblioteca 'table'
Existem muitas funções dentro da biblioteca 'table', que são usadas para manipulação de tabelas, aqui vão elas e suas respectivas utilidades:
Lua:
table.concat (table [, sep [, i [, j]]]) --> Dada uma tabela onde todos os elementos são strings ou números retorna os elementos de i ou o inicio e j ou o fim concatenados em sequencia intercalados por 'sep', separador
table.insert (table, [pos,] value) --> Insere o valor 'value' na 'pos' (index) na tabela 'table'
table.remove (table [, pos]) --> Remove o valor associado ao index 'pos' da tabela 'table'
table.sort (table [, comp]) --> Ordena os elementos da tabela 'table' em dada ordem, se comp é fornecido então ele deve ser uma função que recebe dois elementos da tabela e retorna true quando o primeiro é menor do que o segundo



#E como uma tabela pode ser util no meu script?
Pode ser util na associação de valores, observe este script de troca de sexo, ao inves de dois ifs checando o sexo, como o sexo só pode ser 0 ou 1, voce usa uma tabela:
Lua:
function onUse(cid)
local sex = {
[0]=1,
[1]=0,
}
doPlayerSetSex(cid, sex[getPlayerSex(cid)])
return true
end

Se o sexo do jogador for 0, atraves do valor no index 0 na tabela, o sexo é trocado para 1, e vice-versa ..

Como também pode ser útil para armazenar configurações ou variáveis:
Lua:
local config = {
effect = 1,
removeRune = true,
combat = 2
}
config.effect --> 1
config.removerune --> true
config.combat --> 2



#Utilidades
Citação:
1. O operador # é utilizado em tabelas para retornar o tamanho de uma tabela (referente aos seus elementos, exceto variáveis), exemplo:
Lua:
t = {2, 3, 4, 5, 6}
print(#t) --> 5, elementos reconheciveis

2. Tabelas multi-dimensionais, tabelas podem ser colocadas dentro de tabelas e assim por diante, exemplo:
Lua:
tabela = {tabela2 = {tabela3 = {20}}}
print(tabela.tabela2.tabela3[1]) --> 20

#Curiosidades
Tabelas são o único mecanismo de estruturação de dados em Lua;
Tabelas podem ser heterogêneas; isto é, elas podem conter valores de todos os tipos (exceto nil).
Existem várias maneiras convenientes de se criar tabelas em Lua
Campos de tabela podem conter funções
*nil = tipo de valor nulo, vazio



exercicio:


Crie uma tabela, contendo 2 valores inteiros, 2 strings e 2 variaveis.
Printe os elementos semelhantes da tabela separadamente.
OBS: Os valores podem ser aleatórios








respostas:

Lua:
t = {4, 10, "oi", "tchau", a = 9, b = 5}
print(t[1], t[2])
print(t[3], t[4])
print(t.a, t.b)

credito: caiohu123

caiohu123
Membro
Membro

Mensagens : 32
Data de inscrição : 25/11/2010

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum