Skip to content

Laços de repetição

Leonel Sanches da Silva edited this page Jan 20, 2024 · 12 revisions

Enquanto

As declarações enquanto de Delégua operam de maneira semelhante à maioria das linguagens. O laço de repetição enquanto funciona com uma condição e um bloco de escopo, com o bloco de escopo continuando a executar enquanto a condição é avaliada como verdadeira. A verificação da verdade é feita antes da execução do bloco de escopo, o que significa que nenhuma execução do bloco de escopo é garantida.

// Laço de repetição infinito
enquanto verdadeiro {
  escreva("sim");
}

Fazer ... enquanto

Em Delégua, a instrução fazer ... enquanto atua de maneira semelhante à maioria de outras linguagens de programação: a palavra-chave fazer é declarada, seguida por um bloco de escopo com as instruções a serem repetidas, uma palavra-chave enquanto e, em seguida, uma condição entre parênteses.

Diferentemente de instruções enquanto, o teste da condição para decidir se o bloco de escopo continua a executar é feito após cada execução do bloco de escopo, o que significa que é garantido que o bloco de escopo execute pelo menos uma vez.

// 'sim' é escrito uma vez
fazer {
  escreva("sim")
} enquanto falso

// Escreve números de 0-4
var i = 0;
fazer {
  escreva(i);
  i = i + 1;
} enquanto i < 5

Para

Declarações para em Delégua usam 4 elementos: um inicializador, uma condição, um passo e um bloco de escopo. Qualquer um deles pode ficar em branco.

O inicializador é a primeira instrução executada no comando para, e normalmente é usada para definir um ponto inicial da execução, como declarar a variável a ser usada nos demais argumentos. Logo após, é executada a condição que decide se o bloco de escopo continua a executar ou não, da mesma forma que um laço de repetição enquanto, cuja condição passada como argumento decide se um bloco de escopo será executado. Por último, a etapa a ser executada após o bloco de escopo durante cada laço de repetição. Esta última etapa geralmente é um incremento, decremento ou atribuição de variável.

A instrução para obtém o inicializador, a condição de parada e a etapa entre parênteses, separados por ponto e vírgula, e, em seguida, uma instrução de bloco de escopo que contém a série de passos a serem repetidos.

// Escreva os números inteiros de 0-4
// Exemplo com inicializador, condição e etapa
para var i = 0; i < 5; i = i + 1 {
  // bloco de escopo
  escreva(i);
}

// Exemplo com inicializador e etapa após bloco omitidos.
// Executa infinitamente devido à condição ser sempre verdadeira.
// Parênteses são opcionais, e neste caso eles aumentam a legibilidade do código.
para (; verdadeiro; ) {
  escreva("sim");
}

para cada

para cada é uma variação da instrução para que visita cada elemento de um vetor e, para cada elemento visitado, executa o laço de repetição com este elemento definido em uma variável. Por exemplo:

var a = [1, 2, 3]
para cada elemento de a {
    escreva(elemento) // Saída:
                      // 1
                      // 2
                      // 3
}

Ou então:

var a = [1, 2, 3]
para cada elemento em a {
    escreva(elemento) // Saída:
                      // 1
                      // 2
                      // 3
}

Interrupção de execução em laços de repetição

sustar

Para todos os blocos de escopo de laços de repetição (ou seja, instruções enquanto, fazer e para), é possível a interrupção da execução do bloco de escopo por meio da palavra reservada sustar. Por exemplo:

var contador = 0;
enquanto verdadeiro {
    escreva(contador);
    contador += 1;
    se contador >= 10 {
        sustar;
    }
}

Por retrocompatibilidade, Delégua também aceita a palavra pausa como um sinônimo de sustar, mas isso pode mudar futuramente, conforme explicado aqui.

continua

A palavra reservada continua permite a execução parcial de um bloco de escopo de um laço de repetição. Por exemplo:

para var i = 0; i < 5; i = i + 1 {
    se i == 3 {
        continua
    }
    
    escreva(i)
}

O resultado será:

0
1
2
4