Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''until''.



Mais opções de pesquisa

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • A Cidade OTBR
    • OTServ Brasil
    • Atendimento
    • Taverna
  • Projetos Open Source
    • Canary
    • OTServBR-Global
    • Mehah OTClient
    • MyAAC
  • OpenTibia
    • Notícias e Discussões
    • Suporte - Dúvidas, Bugs, Erros
    • Downloads
    • Tutoriais
    • Show-Off
  • Outros
    • Design

Encontrado 1 registro

  1. Controle de fluxo - condição e repetição

    Existe um mundo mágico onde todas as coisas são perfeitamente lineares e sempre acontecem de forma previsivel. Este, certamente, não é o mundo da programação. Nossos códigos eventualmente precisam saber que caminho tomar dentre múltiplas opções, ou então fazer a mesma coisa mais de uma vez. É pra isso que utilizaremos nossas estruturas de seleção e repetição! Eu recomendo que você leia sobre variáveis em Lua para entender bem como os valores se comportam. Seleção (condição) Uma instrução de seleção é uma parte do código que altera o fluxo de acordo com uma condição predefinida, ou seja, com uma expressão que seja true ou false (valor booleano). if Primeiro nós temos o if, que testa uma condição dada. Caso essa condição seja verdadeira (true), o conteúdo é executado; senão, é ignorado. Por exemplo: if not (level < 100) then minhafuncao(level) endNeste exemplo, uma função é executada caso a variável level não seja menor que 100. Preste atenção nas palavras chave then e end, elas indicam o começo e o fim de um bloco if, respectivamente. else Mas e se eu quiser fazer outra coisa caso minha condição não seja atingida? Aí, utilizamos o else. if not (level < 100) then minhafuncao(level) else minhaoutrafuncao(level) endRepare que o else não leva then, e só existe um end no final de todo o bloco. elseif Também podemos ter mais de 2 casos no nosso código, nós usamos a estrutura elseif, da seguinte forma: if not (level < 100) then minhafuncao(level) elseif vocation == 7 then autor = 'Lordfire' else minhaoutrafuncao(level) endO elseif leva then também. Você pode ter quantos elseifs quiser, mas lembre-se que apenas UM dos blocos será executado. Se o seu bloco tiver 100 ifs/elseifs, apenas o primeiro cuja condição seja verdadeira vai ser executado, e todos os outros serão ignorados. Repare que o elseif é só um atalho, seu código poderia ser assim: if not (level < 100) then minhafuncao(level) else if vocation == 7 then autor = 'Lordfire' else minhaoutrafuncao(level) end endCom exatamente a mesma lógica, mas uma linha e um nível de identação a mais. Repetição (iteração) Nós temos três tipos de repetição em Lua: for, while e repeat. Vou apresentar uma de cada vez. for O for pode ser utilizado de uma forma genérica como um loop controlado (ou seja, eu defino quando começa e termina) que permite percorrer todos os valores retornados por uma função iteradora. Neste tutorial que linkei, eu uso este for: k = {1, 2, 3, 4, 5} for i in square(k) do print(i) endPara cada vez que a função square executada na minha variável k (uma tabela) e retorne um valor diferente de nil, o meu i se torna esse valor e executa uma vez o bloco dentro do for (que vai até o end). Também existe uma segunda versão do for, exclusivamente para valores numéricos, com a seguinte sintaxe: for i = inicio, fim, aumento do (...) endOnde início é o número inicial, fim é o final, e aumento é um valor opcional da qual i aumenta a cada iteração (repetição). Por exemplo, para executar uma função em todos os números pares de 2 até 50: for i = 2, 50, 2 do (...) endEu aumento de 2 em 2, efetivamente passando apenas pelos números pares. Caso o aumento seja de 1, é só ignorar: for i = 1, 10 do print(i ^ 2) endUma coisa importante: o valor da variável de controle do for não é preservado depois do final. É como se a variável nunca tivesse existido. Você também não deve alterar o valor dessa variável dentro do for, pois os resultados são imprevisíveis. while O while, ao contrário do for, não tem um começo e um fim bem definidos. Ele leva uma condição, assim como o if, e executa o bloco enquanto essa condição for verdadeira. Um while simples, que mostra os números de 0 a 10: i = 0 while i <= 10 do print(i) i = i + 1 endNo momento em que i for 10 e eu executo a linha i = i + 1, o valor de i passa a ser 11 e o próximo passo é o teste novamente. Como a condição é falsa, o fluxo sai do loop e continua o resto do código. O while, portanto, faz o teste antes de executar o código. repeat O repeat, por sua vez, faz o teste depois de executar o bloco e repete até que dada condição seja verdadeira. Portanto, para fazer o mesmo loop, temos que inverter a condição. No mesmo exemplo: i = 0 repeat print(i) i = i + 1 until i > 10 > é logicamente inverso a <=. No caso do repeat, o bloco seria no mínimo uma vez executado mesmo que eu definisse o valor inicial de i como 100, já que ele só testa no final. Portanto, você deve evitar usar o repeat caso precise dessa consistência. Para reforçar a ideia de que essas duas estruturas são bastante diferentes, vamos mudar nossa condição: vamos executar o bloco caso x > 0 no while (e x <= 0 no repeat). O while, como nem na primeira vez vai ter a condição verdadeira, nem vai ser executado. O repeat, como vai ter após a primeira execução sua condição verdadeira, entraria em loop infinito. Tome cuidado com estes casos! Como sair de uma repetição? Haverão casos em que nós vamos querer percorrer alguns registros (com um for) ou testar alguma condição por várias vezes (com um while ou um repeat), mas ao encontrar alguma peculiaridade, vamos querer sair desse loop. Para isso, usamos a palavra break no momento em que queremos sair. k = {1, 2, 3, 4, 5} for i in square(k) do print(i) if i % 8 == 0 then break end endNesse código, eu imprimo i para todos os valores retornados por square(k), porém, ao encontrar um valor de i cuja divisão por 8 não retorne resto (que seja divisível por 8), eu executo um break e saio desse laço. Isso vai acontecer quando eu chegar em 16 (4 ^ 2) e não vai mostrar o último valor, 25. Note que não faz sentido ter código depois de um break, já que o código depois dele não seria executado de qualquer forma. Um break sai de apenas um loop de repetição, caso você tenha um loop dentro de outro, apenas o que executou o break será parado (e tudo que houver dentro dele, inclusive outros loops). Vale lembrar que todos esses conhecimentos são relacionados a linguagem Lua, e não são coisas exclusivas de OTserv.
×