diff options
author | Florian Merz <me@fiji-flo.de> | 2021-02-11 14:49:58 +0100 |
---|---|---|
committer | Florian Merz <me@fiji-flo.de> | 2021-02-11 14:49:58 +0100 |
commit | 68fc8e96a9629e73469ed457abd955e548ec670c (patch) | |
tree | 8529ab9fe63d011f23c7f22ab5a4a1c5563fcaa4 /files/pt-br/web/javascript/guide/loops_and_iteration/index.html | |
parent | 8260a606c143e6b55a467edf017a56bdcd6cba7e (diff) | |
download | translated-content-68fc8e96a9629e73469ed457abd955e548ec670c.tar.gz translated-content-68fc8e96a9629e73469ed457abd955e548ec670c.tar.bz2 translated-content-68fc8e96a9629e73469ed457abd955e548ec670c.zip |
unslug pt-br: move
Diffstat (limited to 'files/pt-br/web/javascript/guide/loops_and_iteration/index.html')
-rw-r--r-- | files/pt-br/web/javascript/guide/loops_and_iteration/index.html | 333 |
1 files changed, 333 insertions, 0 deletions
diff --git a/files/pt-br/web/javascript/guide/loops_and_iteration/index.html b/files/pt-br/web/javascript/guide/loops_and_iteration/index.html new file mode 100644 index 0000000000..fcf7437612 --- /dev/null +++ b/files/pt-br/web/javascript/guide/loops_and_iteration/index.html @@ -0,0 +1,333 @@ +--- +title: Laços e iterações +slug: Web/JavaScript/Guide/Lacos_e_iteracoes +translation_of: Web/JavaScript/Guide/Loops_and_iteration +--- +<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Control_flow_and_error_handling", "Web/JavaScript/Guide/Functions")}}</div> + +<div class="summary"> +<p>Laços oferecem um jeito fácil e rápido de executar uma ação repetidas vezes. Este capítulo do <a href="/en-US/docs/Web/JavaScript/Guide">guia do JavaScript</a> abordará diferentes formas de iterações existentes no JavaScript.</p> +</div> + +<p>Você pode pensar em um laço de repetição como um jogo onde você manda o seu personagem andar X passos em uma direção e Y passos em outra; por exemplo, a ideia "vá 5 passos para leste" pode ser expressa em um laço desta forma:</p> + +<pre class="brush: js">var passo; +for (passo = 0; passo < 5; passo++) { + // Executa 5 vezes, com os valores de passos de 0 a 4. + console.log('Ande um passo para o leste'); +} +</pre> + +<p>Existem várias formas diferentes de laços, mas eles essencialmente fazem a mesma coisa: repetir uma ação múltiplas vezes ( inclusive você poderá repetir 0 vezes). Os vários mecanismos diferentes de laços oferecem diferentes formas de determinar quando este irá começar ou terminar. Há várias situações em que é mais fácil resolver um problema utilizando um determinado tipo de laço do que outros.</p> + +<p>Os possíveis laços de repetição em JavaScript:</p> + +<ul> + <li>{{anch("for_statement")}}</li> + <li>{{anch("do...while_statement")}}</li> + <li>{{anch("while_statement")}}</li> + <li>{{anch("label_statement")}}</li> + <li>{{anch("break_statement")}}</li> + <li>{{anch("continue_statement")}}</li> + <li>{{anch("for...in_statement")}}</li> + <li>{{anch("for...of_statement")}}</li> +</ul> + +<h2 id="for_statement" name="for_statement"><code>Declaração for</code></h2> + +<p>Um laço <a href="/en-US/docs/Web/JavaScript/Reference/Statements/for">for</a> é repetido até que a condição especificada seja falsa. O laço for no JavaScript é similar ao Java e C. Uma declaração for é feita da seguinte maneira:</p> + +<pre class="syntaxbox">for ([expressaoInicial]; [condicao]; [incremento]) + declaracao +</pre> + +<p>Quando um for é executado, ocorre o seguinte:</p> + +<ol> + <li>A expressão <code>expressao Inicial</code> é inicializada e, caso possível, é executada. Normalmente essa expressão inicializa um ou mais contadores, mas a sintaxe permite expressões de qualquer grau de complexidade. Podendo conter também declaração de variáveis.</li> + <li>A expressão <code>condicao</code> é avaliada. caso o resultado de <code>condicao</code> seja verdadeiro, o laço é executado. Se o valor de <code>condicao</code> é falso, então o laço terminará. Se a expressão <code>condicao</code> é omitida, a <code>condicao</code> é assumida como verdadeira.</li> + <li> A instrução é executada. Para executar múltiplas declarações, use uma declaração em bloco ({ ... }) para agrupá-las.</li> + <li>A atualização da expressão <code>incremento</code>, se houver, executa, e retorna o controle para o passo 2.</li> +</ol> + +<h3 id="Exemplo"><strong>Exemplo</strong></h3> + +<p>A função a seguir contém uma declaração <code>for</code> que contará o número de opções selecionadas em uma lista (um elemento {{HTMLElement("select")}} permite várias seleções). Dentro do <code>for</code> é declarado uma váriavel <code>i</code> inicializada com zero. A declaração <code>for</code> verifica se <code>i</code> é menor que o número de opções no elemento <code><select></code>, executa sucessivas declaração <code>if</code>, e incrementa <code>i</code> de um em um a cada passagem pelo laço.</p> + +<pre class="brush: html"><form name="selectForm"> + <p> + <label for="tipoMusica">Escolha alguns tipos de música, em seguida, clique no botão abaixo:</label> + <select id="tipoMusica" name="tipoMusica" multiple="multiple"> + <option selected="selected">R&B</option> + <option>Jazz</option> + <option>Blues</option> + <option>New Age</option> + <option>Classico</option> + <option>Ópera</option> + </select> + </p> + <p><input id="btn" type="button" value="Quantos foram selecionados?" /></p> +</form> + +<script> +function howMany(selectObject) { + var numeroSelecionadas = 0; + for (var i = 0; i < selectObject.options.length; i++) { + if (selectObject.options[i].selected) { + numeroSelecionadas++; + } + } + return numeroSelecionadas; +} + +var btn = document.getElementById("btn"); +btn.addEventListener("click", function(){ + alert('Total de opções selecionadas: ' + howMany(document.selectForm.tipoMusica)) +}); +</script> + +</pre> + +<h2 id="do...while_statement" name="do...while_statement"><code>Declaração do...while</code></h2> + +<p>A instrução <a href="/en-US/docs/Web/JavaScript/Reference/Statements/do...while">do...while</a> repetirá até que a condição especificada seja falsa.</p> + +<pre class="syntaxbox">do + declaracao +while (condicao); +</pre> + +<p>A instrução será executada uma vez antes da condição ser verificada. Para executar multiplas instruções utilize uma declaração de bloco ({ ... }) para agrupá-las. Caso a <code>condicao</code> seja verdadeira, então o laço será executado novamente. Ao final de cada execução, a <code>condicao</code> é verificada. Quando a condição contida no while for falsa a execução do laço é terminada e o controle é passado para a instrução seguinte a <code>do...while</code>.</p> + +<h3 id="Exemplo_2"><strong>Exemplo</strong></h3> + +<p>No exemplo a seguir, o laço é executado pelo menos uma vez e irá executar até que <code>i</code> seja menor que 5.</p> + +<pre class="brush: js">do { + i += 1; + console.log(i); +} while (i < 5);</pre> + +<h2 id="while_statement" name="while_statement"><code>Declaração while</code></h2> + +<p>Uma declaração <a href="/pt-BR/docs/Web/JavaScript/Reference/Statements/while">while</a> executa suas instruções, desde que uma condição especificada seja avaliada como verdadeira. Segue uma declaração <code>while</code>: </p> + +<pre class="syntaxbox">while (condicao) + declaracao +</pre> + +<p>Se a condição se tornar falsa, a declaração dentro do laço para a execução e o controle é passado para a instrução após o laço.</p> + +<p>O teste da condição ocorre antes que o laço seja executado. Desta forma se a condição for verdadeira o laço executará e testará a condição novamente. Se a condição for falsa o laço termina e passa o controle para as instruções após o laço.</p> + +<p>Para executar múltiplas declarações, use uma declaração em bloco ({ ... }) para agrupar essas declarações.</p> + +<h3 id="Exemplo_1"><strong>Exemplo 1</strong></h3> + +<p>O <code>while</code> a seguir executará enquanto <code>n</code> for menor que três:</p> + +<pre class="brush: js">n = 0; +x = 0; +while (n < 3) { + n++; + x += n; +} +</pre> + +<p>A cada iteração, o laço incrementa <code>n</code> e adiciona este valor para <code>x</code>. Portanto, <code>x</code> e <code>n</code> recebem os seguintes valores:</p> + +<ul> + <li>Depois de executar pela primeira vez: <code>n</code> = 1 e <code>x</code> = 1</li> + <li>Depois da segunda vez: <code>n</code> = 2 e <code>x</code> = 3</li> + <li>Depois da terceira vez: <code>n</code> = 3 e <code>x</code> = 6</li> +</ul> + +<p>Depois de executar pela terceira vez, a condição <code>n < 3</code> não será mais verdadeira, então o laço encerrará.</p> + +<h3 id="Exemplo_2_2"><strong>Exemplo 2</strong></h3> + +<p>Evite laços infinitos. Tenha certeza que a condição do laço eventualmente será falsa; caso contrário, o laço nunca terminará. O while a seguir executará para sempre pois sua condição nunca será falsa:</p> + +<pre class="brush: js">while (true) { + console.log("Olá, mundo"); +}</pre> + +<h2 id="Declaração_label"><code>Declaração label</code></h2> + +<p>Um <a href="/pt-BR/docs/Web/JavaScript/Reference/Statements/label">label</a> provê um identificador que permite que este seja referenciado em outro lugar no seu programa. Por exemplo, você pode usar uma label para identificar um laço, e então usar <code>break</code> ou <code>continue</code> para indicar quando o programa deverá interromper o laço ou continuar sua execução.</p> + +<p>Segue a sintaxe da instrução label:</p> + +<pre class="syntaxbox">label : declaracao +</pre> + +<p>Um label pode usar qualquer idenficador que não seja uma palavra reservada do JavaScript. Você pode identificar qualquer instrução com um label.</p> + +<h3 id="Exemplo_3"><strong>Exemplo</strong></h3> + +<p>Neste exemplo, o label <code>markLoop</code> idenfica um laço <code>while</code>.</p> + +<pre class="brush: js">markLoop: +while (theMark == true) { + facaAlgo(); +}</pre> + +<h2 id="break_statement" name="break_statement"><code>Declaração break</code></h2> + +<p>Use <a href="/en-US/docs/Web/JavaScript/Reference/Statements/break">break</a> para terminar laços, <code>switch</code>, ou um conjunto que utiliza label.</p> + +<ul> + <li>Quando você utiliza <code>break</code> sem um label, ele encerrará imediatamente o laço mais interno <code>while</code>, <code>do-while</code>, <code>for</code>, ou <code>switch</code> e transferirá o controle para a próxima instrução.</li> + <li>Quando você utiliza <code>break</code> com um label, ele encerrará o label específico.</li> +</ul> + +<p>Segue a sintaxe do break:</p> + +<ol> + <li><code>break;</code></li> + <li><code>break <em>label</em>;</code></li> +</ol> + +<p>Na primeira opção será encerrado o laço de repetição mais interno ou <code>switch</code>. Já na segunda opção será encerrada o bloco de código referente a label.</p> + +<h3 id="Exemplo_1_2"><strong>Exemplo</strong> <strong>1</strong></h3> + +<p>O exemplo a seguir percorre os elementos de um array até que ele encontre o índice do elemento que possui o valor contido em <code>theValue</code>:</p> + +<pre class="brush: js">for (i = 0; i < a.length; i++) { + if (a[i] == theValue) { + break; + } +}</pre> + +<h3 id="Exemplo_2_Utilizando_break_em_label"><strong>Exemplo 2: </strong>Utilizando break em label</h3> + +<pre class="brush: js">var x = 0; +var z = 0 +labelCancelaLaco: while (true) { + console.log("Laço exterior: " + x); + x += 1; + z = 1; + while (true) { + console.log("Laço interior: " + z); + z += 1; + if (z === 10 && x === 10) { + break labelCancelaLaco; + } else if (z === 10) { + break; + } + } +} +</pre> + +<h2 id="continue_statement" name="continue_statement"><code>Declaração continue</code></h2> + +<p>A declaração <a href="/pt-BR/docs/Web/JavaScript/Reference/Statements/continue">continue</a> pode ser usada para reiniciar uma instrução <code>while</code>, <code>do-while</code>, <code>for</code>, ou <code>label</code>.</p> + +<ul> + <li>Quando você utiliza <code>continue</code> sem uma label, ele encerrará a iteração atual mais interna de uma instrução <code>while</code>, <code>do-while</code>, ou <code>for</code> e continuará a execução do laço a partir da próxima iteração. Ao contrário da instrução <code>break</code>, <code>continue</code> não encerra a execução completa do laço. Em um laço <code>while</code>, ele voltará para a condição. Em um laço <code>for</code>, ele pulará para a expressão de incrementação.</li> + <li>Quando você utiliza <code>continue</code> com uma label, o <code>continue</code> será aplicado ao laço identificado por esta label. </li> +</ul> + +<p>Segue a sintaxe do <code>continue</code>:</p> + +<ol> + <li><code>continue;</code></li> + <li><code>continue </code><em><code>label;</code></em></li> +</ol> + +<h3 id="Exemplo_1_3"><strong>Exemplo 1</strong></h3> + +<p>O exemplo a seguir mostra um laço <code>while</code> utlizando <code>continue</code> que executará quando o valor de <code>i</code> for igual a 3. Desta forma, <code>n</code> recebe os valores um, três, sete, e doze.</p> + +<pre class="brush: js">i = 0; +n = 0; +while (i < 5) { + i++; + if (i == 3) { + continue; + } + n += i; +} +</pre> + +<h3 id="Exemplo_2_3"><strong>Exemplo 2</strong></h3> + +<p>Uma instrução label <code>checkiandj</code> contém uma instrução label c<code>heckj</code>. Se o <code>continue</code> for executado, o programa terminará a iteração atual de <code>checkj</code> e começará a próxima iteração. Toda vez que o <code>continue</code> for executado, <code>checkj</code> recomeçará até que a condição do <code>while</code> for falsa. Quando isto ocorrer <code>checkiandj</code> executará até que sua condição seja falsa.</p> + +<p>Se o <code>continue</code> estivesse referenciando <code>checkiandj</code>, o programa deveria continuar do topo de <code>checkiandj</code>.</p> + +<pre class="brush: js">checkiandj: + while (i < 4) { + console.log(i); + i += 1; + checkj: + while (j > 4) { + console.log(j); + j -= 1; + if ((j % 2) == 0) { + continue checkj; + } + console.log(j + " é estranho."); + } + console.log("i = " + i); + console.log("j = " + j); + }</pre> + +<h2 id="for...in_statement" name="for...in_statement"><code>Declaração for...in</code></h2> + +<p>A declaração <a href="/pt-BR/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a> executa iterações a partir de uma variável específica, percorrendo todas as propriedades de um objeto.<br> + Para cada propriedade distinta, o JavaScript executará uma iteração. Segue a sintaxe:</p> + +<pre class="syntaxbox">for (variavel in objeto) { + declaracoes +} +</pre> + +<h3 id="Exemplo_4"><strong>Exemplo</strong></h3> + +<p>A função a seguir recebe em seu argumento um objeto e o nome deste objeto. Então executará uma iteração para cada elemento e retornará uma lista de string, que irá conter o nome da propriedade e seu valor.</p> + +<pre class="brush: js">function dump_props(obj, obj_name) { + var result = ""; + for (var i in obj) { + result += obj_name + "." + i + " = " + obj[i] + "<br>"; + } + result += "<hr>"; + return result; +} +</pre> + +<p>Para um objeto chamado <code>car</code> com propriedades <code>make</code> e <code>model</code>, o resultado será:</p> + +<pre class="brush: js">car.make = Ford +car.model = Mustang +</pre> + +<h3 id="Arrays"><strong>Arrays</strong></h3> + +<p>Embora seja tentador usar esta forma para interagir com os elementos de um Array, a declaração <strong>for...in</strong> irá retornar o nome pré-definido da propriedade ao invés do seu index numérico. Assim é melhor usar o tradicional <a href="/pt-BR/docs/Web/JavaScript/Reference/Statements/for">for</a> com index numérico quando interagir com arrays, pois o <strong>for...in</strong> interage com as propriedades definidas pelo programador ao invés dos elementos do array.</p> + +<h2 id="for...of_statement" name="for...of_statement">Declaração <code>for...of</code></h2> + +<p> A declaração for...of cria uma laço com objetos interativos ((incluindo, {{jsxref("Array")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, assim por conseguinte ), executando uma iteração para o valor de cada propriedade distinta.</p> + +<pre class="syntaxbox">for (<em>variavel</em> of <em>objeto</em>) { + <em>declaracoes +</em>}</pre> + +<p>O exemplo a seguir mostra a diferença entre o <code>for...of</code> e o <code><a href="/pt-BR/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a></code>. Enquanto o <code>for...in</code> interage com o nome das propriedades, o <code>for...of</code> interage com o valor das propriedades.</p> + +<pre class="brush:js">let arr = [3, 5, 7]; +arr.foo = "hello"; + +for (let i in arr) { + console.log(i); // logs "0", "1", "2", "foo" +} + +for (let i of arr) { + console.log(i); // logs "3", "5", "7" +} +</pre> + +<p>{{PreviousNext("Web/JavaScript/Guide/Control_flow_and_error_handling", "Web/JavaScript/Guide/Functions")}}</p> |