Jump to content

Loopings


Recommended Posts

Faaaaala galerinha do éks! Tudo bem? Bom, eu sei que existem vários tutoriais no éks de loopings em lua, porém, nenhum esclarecedor ou completo. Enfim, a proposta deste tutorial é explicar todos os loopings de lua, sendo eles: for e seus subtipos, repeat e while. Espero que vocês gostem e espero críticas construtivas abaixo.

 

 

Introdução

 

 

Bom, os loopings são extremamente úteis em lua, e são usados em quase todos scripts mais avançados. Eles servem para executar uma cadeia quantas vezes desejados. Um looping, definido como repetição em português, pode ser infinito, ou finito.

 

Looping Infinito: No caso, uma repitação que nunca acaba, executará a cadeia infinitamente, a menos que seja quebrada.

 

Looping Finito: Executa uma cadeia até que algo aconteça, tal como chegar ao limite dado, ou cumpra ou descumpra uma condição. Também pode ser quebrado antes de seu fim.

 

Podemos usa-los para checar todos valores de uma tabela, para checar todos os caracteres de uma string, entre outras funções.

 

 

Looping For

 

 

Sem dúvida o looping mais utilizado de todos e talvez o mais importante a ser aprendido. O for tem dois subtipos:

 

For número: Este looping executa uma cadeia tantas vezes. Podemos ditar a ordem em que o bloco será repetido, vamos aos exemplos e as explicações.

 

O for número, assim como o for genérico e o while requer o end para delimitar a extensão da cadeia que vai ser repetida.

 

A sintaxe do for é a seguinte:

 

for variável = 1ºn, 2ºn, 3ºn do
bloco
end

 

Variável: O for número exige a variável para guardar o número de repetições e a ordem dela.

Número 1: O primeiro número deve ser, obrigatoriamente, menor que o segundo. Será o primeiro número que a variável assumirá.

Número 2: Deve ser maior que o primeiro número, será o último número que a variável assumirá.

 

No caso, a variável assumirá primeiro o valor do primeiro número e irá executar o bloco tantas vezes até chegar ao segundo número.

 

Exemplo: for i = 5, 20 do bloco end

 

No caso, a variável é i e ela começara tendo o valor 5 e por último terá o valor 20. Ele executará o bloco 15 vezes, pois 20-5=15.

 

Exemplo2: for i = 5, 20, 5 do bloco end

 

Agora temos o primeiro exemplo do terceiro número, que será a ordem que o looping se repetirá. A variável vai começar 5, depois pula para 10, pois 5+5=10, depois pula para 15, pois 10+5=15 e por último pula para 20, pois 15+5=20. No caso, repetirá 4 vezes, pois a variável assumirá 4 números: 5, 10, 15 e 20.

 

Vou mostrar um exemplo:

 

for i = 0, 10, 2 do
print(i)
end

 

Vai executar assim:

 

>> 0

>> 2

>> 4

>> 6

>> 8

>> 10

 

Para fazermos um for numérico infinito, usamos o seguinte exemplo:

 

for i = 1, math.huge do
bloco
end

 

math.huge é infinito e por isso o looping se torna infinito, pois nunca chegara ao seu final.

 

For genérico: Este for server para executar funções iteradores, sendo as mais usadas a pairs e ipairs, as quais serão explicadas a seguir.

 

Pairs: A função pairs chama os valores da tabela em duas variáveis, a primeira é o index e a segunda é o valor. Se o index não existir, o padrão é um número que aumenta a cada vez que não houver index. A vantagem dessa função é que pode-se usar os index fora de ordem numérica, ao contrário do ipairs.

 

Ipairs: A função ipairs chama os valores da tabela, também, em duas variáveis, assim como a função pairs. A diferença é que, assim que ele acha um valor de index fora da ordem numérica, ele para de chamar os valores da tabela. A vantagem dessa função é que retorna os valores em ordem.

 

As funções pairs e ipairs apenas podem ser usadas em tabelas.

 

Vamos aos exemplos:

 

t = {
[1] = 20,
[2] = 40,
[3] = 50,
["teste"] = 60,
[5] = 80,
[7] = 90,
[4] = 100
}

for index, valor in pairs(t) do
print(index .. " : " .. valor)
end

for index, valor in ipairs(t) do
print(index .. " : " .. valor)
end

 

O seguinte bloco produzirá isso graças a função pairs:

 

>> 2 : 40

>> 7 : 90

>> 3 : 50

>> 1 : 20

>> 4 : 100

>> teste : 60

>> 5 : 80

 

Pode-se perceber que a função pairs não é em ordem e aceita qualquer valor como index.

 

Graças a função ipairs, ela produzirá isso:

 

>> 1 : 20

>> 2 : 40

>> 3 : 50

>> 4 : 100

>> 5 : 80

 

Pode-se perceber que o ipairs não aceita valor de string como index e os números precisam seguir uma ordem numérica correta.

 

Enfim, creio que o pairs e o ipairs tenham sidos explicados, e assim encerramos o for.

 

 

While

 

 

O While, assim como o for requer um end para delimitar a extensão do bloco a ser repetido.

 

Este looping repete o bloco enquanto a condição dada for verdadeira. Se você precisar usar uma variável, é necessário apresenta-la antes do looping. Vamos aos exemplos:

 

i = 0
while i ~= 100 do
print(i)
i = i + 1
end

 

Nesse caso ele irá repetir 100 vezes, ou seja, o último valor que i irá assumir será 99 e o primeiro é 0. Claro que não é necessário declarar e usar variáveis, assim como no seguinte exemplo:

 

while getPlayerMana(cid) < 100 do
doPlayerAddMana(cid, 20)
end

 

Nesse caso, adicionará 20 de mana até que a mana do jogador seja, no mínimo, 100.

 

Para gerar um while infinito, usamos qualquer valor que seja diferente de FALSE e diferente de nil, assim:

 

while true do
print("OK")
end

while 1 do
print("OK")
end

 

Esses são dois exemplos de loopings infinitos.

 

 

Repeat

 

 

Ao contrário dos outros loopings, o repeat não exige um end, mas sim um until. Until é outra palavra reservada da linguagem lua. O repeat em português seria:

 

repita bloco
until condição

 

Ele repete o bloco até que a condição seja verdadeira, ao contrário do while que repete o bloco enquanto a condição for verdadeira.

 

Vamos a outros exemplos:

 

i = 1
repeat
i = i + 1 
print("OK")
until i == 100

 

No caso ele printa OK 100 vezes, ou seja, até que a condição i == 100 retornar TRUE (verdadeira).

 

Para fazermos um repeat infinito, usamos:

 

repeat
bloco
until nil

 

Como nil nunca vai ser TRUE, o looping é infinito.

 

 

break

 

 

A palavra break é outra das palavras reservadas de lua, e serve para parar uma repetição.

 

O break literalmente quebra o laço de repetição, vamos a um exemplo:

 

i = 0
while true do
print("OK")
i = i + 1
if i == 100 then
break
end
end

 

Normalmente, usando while true criamos o looping infinito, mas como temos a checagem do valor de i com o if e usamos o break para quebrar o laço, o looping irá parar de se repetir quando i for igual 100.

 

O break pode ser usado em qualquer looping.

 

 

Fonte

 

Manual de Referência de Lua 5.1

 

 

É isso então galera, espero que gostem e comentem, abraços.

Edited by Demonbholder
Link to comment
Share on other sites

  • 5 months later...
×
×
  • Create New...