Utilizando While em Tabelas.

caotic
Por caotic
em Tutoriais de Scripting

caotic

Afinal de contas,sou um mordomo e tanto
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 04/03/11Posts: 1599Char no Tibia: No Have

Ola galerinha xtibiana!

Hoje vou mostrar um tutorial sobre a utilização de while em tabela.

Bem tabelas conseguem guardar múltiplos valores de forma fácil e pratica.

O while não e muito utilizado para manipular tabelas mais e possível fazer de forma rápida e funcional.

 

A utilização de um while e UM dos meios de "procurar" os valores em uma tabela.

O while perde a sua popularidade em tabelas por causa do for.

O while torna - se um pouco mais pesado do que o for além de que a quantidade de linhas gastas no for e bem menor.

 

Neste tutorial explicarei a utilização de while em tabelas:

Toda tabela apresenta os números de cada coluna.

Exemplo:

 

 

local tab = {
{coluna = "Esta coluna representa a 1"},
{coluna = "Esta coluna representa a 2"},
{coluna = "Esta coluna representa a 3"}
}

 

Você deve ter percebido que as colunas são em ordem numéricas crescente e começa na primeira coluna.

E importante aprender esta parte para entender o funcionamento da repetição.

 

Para acessar o valor de acordo com a tabela e só colocarmos de tal maneira:

tab[Numero da Coluna]

 

Se colocarmos assim:

 

tab[1] sera acessada a seguinte coluna = {coluna = "Esta coluna representa a 1"},
tab[2] sera acessada a seguinte coluna = {coluna = "Esta coluna representa a 2"},
tab[3] sera acessada a seguinte coluna = {coluna = "Esta coluna representa a 3"}

 

 

Para acessar um valor da tabela basta colocar de tal maneira:

tab[Numero da Coluna].value

 

Se colocarmos assim:

 

tab[1].coluna == sera acessado seguinte valor = "Esta coluna representa a 1"
tab[2].coluna == sera acessado seguinte valor  = "Esta coluna representa a 2"
tab[3].coluna == sera acessado seguinte valor  = "Esta coluna representa a 3"

 

Se usáramos # em uma tabela.

Ela verifica a quantidade de colunas dela.

Pronto.

 

Concluímos o básico de tabela agora vamos a utilização do while.

Temos que repetir cada coluna e verificar o valor que queremos.

local str = {
{msg = "Esta na 1 missão", value = 1},
{msg = "Esta na 2 missão", value = 2},
{msg = "Esta na 3 missão", value = 3}
}


k = 0  ---- Cria um nova variável com o valor de 0
while #str > k do -- Verifica se a variável k e maior que o tamanho de str
k = k+1 --- Adiciona o valor +1 a k
if str[k].value == 2 then --- Verifica se value e 2
print(str[k].msg) ---- Se o value for 2 ele manda uma print com a mensagem da coluna.
break
end
end

 

Pode parecer complicado mais vamos por parte.

Eu declarei k para eu guardar um valor.

k = 0

 

Quando o while repetir ele vai adicionar mais um:

k = k+1

 

Assim toda vez que o while repetir sera uma coluna:

str[k]

 

Para sabermos se encontramos o value == 2 fizemos uma verificação

if str[k].value == 2 then --- Verifica se value e 2

 

Se a verificação for verdadeira ele manda uma mensagem da coluna de k

print(str[k].msg) ---- Se o value for 2 ele manda uma print com a mensagem da coluna.

 

Terminado o script se a verificação for verdadeira ele para o while

break

 

Viu como e simples?

Agora basta explorar e procurar novas formas de "procurar" valores na tabela.

Espero que nos mostre a sua maneira de manipular tabelas.

Até a proxima pessoal!

 

21nl25z.png

iunix

Daora a vida
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 09/07/07Posts: 77

While + tabelas é algo inviavel, qualquer erro zuaria o servidor inteiro. Mil vezes mais aconselhavel usar for. E faltou explicar algumas coisas, como funciona o break e eu acho errado explicar while sem explicar repeat.

iunix.jpg

caotic

Afinal de contas,sou um mordomo e tanto
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 04/03/11Posts: 1599Char no Tibia: No Have

Repeat e bem menos usado.

O tutorial e só para explicar que e possível manipular uma tabela com while.

iunix

Daora a vida
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 09/07/07Posts: 77

Repeat e bem menos usado.

O tutorial e só para explicar que e possível manipular uma tabela com while.

 

O problema é você explicar o que é fruta citrica, sem explicar o que é limão, só pq o limão é mais azedo. Acho que se explicar o while, tem que explicar o repeat que são praticamente a mesma coisa, mudando apenas a verificação.

iunix.jpg

Oneshot

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 05/07/09Posts: 1347

While é um loop, Repeat também é. Se um faz uma coisa, o outro também faz.

 

 

local tabela = {1, 2, 3, 4}
local n = 1
while n <= #tabela do
print(tabela[n])
  n = n + 1
end

 

local n = 1
repeat
  print(tabela[n])
  n = n + 1
until n > #tabela

DinoAdmin

Ex Estagiário de Scripting
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 27/07/12Posts: 757Char no Tibia: [ADM] Bhoris

dalvorsn

õ/
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 21/12/11Posts: 750Gênero: Masculino

Cara, é viável apenas se for trabalhar com index numericos, se tiver index como string fica tenso de fazer no while.

Um simples for index, value in pairs(table) do end usando while seria um horror.

Pra tabela ele não é muito bom, tanto porque existe pairs e ipairs que faria praticamente todo o serviço numa tabela, Porem a titulo de estudo e viavel que se saiba de varias maneiras, então é valido o tutorial, continue assim.

"A covardia coloca a questão: É seguro? O comodismo coloca a questão: É popular? A etiqueta coloca a questão: é elegante? Mas a consciência coloca a questão, É correto? E chega uma altura em que temos de tomar uma posição que não é segura, não é elegante, não é popular, mas o temos de fazer porque a nossa consciência nos diz que é essa a atitude correta."

(Martin Luther King)

caotic

Afinal de contas,sou um mordomo e tanto
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 04/03/11Posts: 1599Char no Tibia: No Have

Cara, é viável apenas se for trabalhar com index numericos, se tiver index como string fica tenso de fazer no while.

Um simples for index, value in pairs(table) do end usando while seria um horror.

Pra tabela ele não é muito bom, tanto porque existe pairs e ipairs que faria praticamente todo o serviço numa tabela, Porem a titulo de estudo e viavel que se saiba de varias maneiras, então é valido o tutorial, continue assim.

 

Exatamente.

O while e um modo mais "grosso" de repetir valores.

Então não deixa de ser uma opção.

Akatsukyi

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 06/09/11Posts: 307

Otimo caotic , eu tava meio confuso com essas colunas mesmo.

esperamos novos tutoriais.

Clique

Aqui e descubra onde postar suas dúvidas e tutoriais.

 

R9He.png

Skymagnum

Hamburguer
avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 02/08/12Posts: 1025Char no Tibia: Maurolkit

Cara while em tabela é meio zuado/podre for é bem mais fácil/limpo de trabalhar em tabelas.

jeoz.png

caotic

Afinal de contas,sou um mordomo e tanto
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 04/03/11Posts: 1599Char no Tibia: No Have

Não gosto de aprovar meus proprios tutoriais.

Mais.....

Tutorial Aprovado

fokus090

~ Mapper and Scripting ~
avatar
Cavaleiro
Cavaleiro

INFOS

Grupo: CavaleiroRegistrado: 19/11/10Posts: 190Char no Tibia: Frenesy

for é bem mais simples de trabalhar. Sempre utilizo ele. Mas foi um bom Tutor.

Parabéns!

Última Atualização no Website: Sábado, 22 de Dezembro de 2012.

 

befunkysinxbanner.jpg

 

frenesyfanbar.png

Demonbholder

avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 13/10/08Posts: 1551Char no Tibia: Demonbholder

Ta bom o tutorial, apesar das limitações do while na utilização com tabelas.

 

Podia ter ensinado o repeat, mas não que seja necessário, só se quisesse, não é um pre requisito para entender o while.

Oie :D

SmiX

SlashX
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 25/01/12Posts: 963

Se colocarmos assim:

tab[1] sera acessada a seguinte coluna = {coluna = "Esta coluna representa a 1"},

tab[2] sera acessada a seguinte coluna = {coluna = "Esta coluna representa a 2"},

tab[2] sera acessada a seguinte coluna = {coluna = "Esta coluna representa a 3"}

 

Corrigi ai:

Se colocarmos assim:
tab[1] sera acessada a seguinte coluna = {coluna = "Esta coluna representa a 1"},
tab[2] sera acessada a seguinte coluna = {coluna = "Esta coluna representa a 2"},
tab[3] sera acessada a seguinte coluna = {coluna = "Esta coluna representa a 3"}

dalvorsn

õ/
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 21/12/11Posts: 750Gênero: Masculino

While é um loop, Repeat também é. Se um faz uma coisa, o outro também faz.

 

 

local tabela = {1, 2, 3, 4}
local n = 1
while n <= #tabela do
print(tabela[n])
  n = n + 1
end

 

local n = 1
repeat
  print(tabela[n])
  n = n + 1
until n > #tabela

 

Aproveitando que falou sobre, apenas para completar, a diferença é basicamente essa:

Repeat: Executa o bloco, verifica a condição, se verdadeira executa novamente ate que seja falsa, ou que encontre um return ou break..

While: Verifica a condição, se verdadeira executa e torna o ciclo, ate que seja falsa, ou que encontre um return ou break.

 

Não foi citado no tópico, mas acho importante então aproveitarei o post e falarei, quando se usa loops concatenados dentro de loops, o break para o loops mais interno apenas.

 

local var = 0
while var < 50 do
var = var + 1
while true do
	 if var > 40 then
		  break
	 end
	 var = var+ 1
end
end

como podem ver, ao atingir o valor 41 (var > 40), ele para de executar o segundo loop, mas o primeiro continua.

porém se fosse dado um return, ele pararia tudo ali, e retornaria algo pra função a que o bloco pertence

"A covardia coloca a questão: É seguro? O comodismo coloca a questão: É popular? A etiqueta coloca a questão: é elegante? Mas a consciência coloca a questão, É correto? E chega uma altura em que temos de tomar uma posição que não é segura, não é elegante, não é popular, mas o temos de fazer porque a nossa consciência nos diz que é essa a atitude correta."

(Martin Luther King)