Laço For
Um loop permite executar um trecho de código quantas vezes quisermos. Existem diferentes tipos de loops. Em C#, se quisermos executar um trecho de código um número específico de vezes, usamos o for loop
.
O modelo (sintaxe) de um for loop é o seguinte:
for(initiation; condition; operation) {
// code to execute
}
Vamos considerar um exemplo onde utilizamos essa sintaxe:
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // Output "Hello World" ten times. for(int i = 0; i < 10; i++) { Console.WriteLine("Hello World"); } } } }
Nota
i++
é o mesmo quei = i + 1
. Incrementa o valor da variável em1
. Da mesma forma,i--
decrementa o valor em1
.
int i = 0
é a parte de inicialização. A inicialização ocorre quando o loop começa. No início do loop, uma nova variável temporária chamadai
é criada e inicializada com o valor0
.i < 10
é a condição. A condição é verificada a cada iteração (repetição) do loop. O loop continua executando o bloco de código enquanto a condição for verdadeira.i++
é a operação a ser realizada após cada iteração. A operação geralmente é um incremento ou decremento. Como o valor dei
é incrementado após cada iteração, a condiçãoi < 10
se torna falsa após 10 iterações e o loop é interrompido.
É importante entender que todos os três componentes do laço for
— initialization
, condition
e operation
— são opcionais. Você pode omitir qualquer um deles, mas isso pode alterar o comportamento do laço.
Embora não seja recomendado, é possível declarar a variável do laço fora do laço e deixar a parte de initialization
vazia. Isso significa que o laço ainda funcionará, mas é necessário ter cuidado, pois pode levar a resultados inesperados se não for tratado corretamente.
main.cs
12345678910111213141516using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10; i++) { Console.WriteLine("Hello World"); } } } }
Também é possível remover a parte de operation
e colocá-la ao final do bloco de código do laço. O laço se comportará da mesma forma que antes, pois a variável i
ainda está sendo incrementada após cada iteração.
main.cs
1234567891011121314151617using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10;) { Console.WriteLine("Hello World"); i++; } } } }
Observe que, no código acima, ainda colocamos um ponto e vírgula (;
) na sintaxe do loop onde era esperado o int i = 0
. Esse ponto e vírgula deve sempre estar presente, independentemente de criarmos ou não uma variável de loop.
Também é possível remover a condição do loop, mas isso faz com que o loop seja executado indefinidamente caso não seja finalizado manualmente (o que será abordado em capítulos posteriores).
main.cs
1234567891011121314151617using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // In this case the variable `i` is useless so we don't create it. // The loop never ends for(;;) { Console.WriteLine("Hello World"); } } } }
Nota
Ainda incluímos ambos os pontos e vírgula na sintaxe do loop
for(;;)
, pois são essenciais, caso contrário o compilador apresentará erros.
Como o valor de i
muda a cada iteração, podemos usar isso a nosso favor. Para entender melhor, vejamos um programa simples que exibe o valor de i
a cada iteração:
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 0; i < 10; i++) { Console.WriteLine(i); } } } }
Observe que termina em 9
porque começa com o dígito 0
. O número total de iterações foi dez. Podemos modificar a inicialização, a condição e a operação para exibir os dez números pares de 2 a 20.
Nota
Números pares são aqueles divisíveis por
2
. Por exemplo: 2, 4, 6, 8, 10, etc. Números pares também incluem o número0
, mas nestes exemplos lidaremos apenas com números pares acima de0
.
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 2; i <= 20; i += 2) { Console.WriteLine(i); } } } }
Nota
i += 2
é uma forma abreviada de escreveri = i + 2
. Essa sintaxe também é válida para outros operadores, por exemplo:i -= 2
,i *= 2
,i /= 2
,i %= 2
etc.
O loop começa com 0
e aumenta o valor de i
em 2
a cada iteração. Alteramos a condição para i <= 20
para que o loop pare em 20
.
A lógica acima foi apresentada para facilitar o entendimento do funcionamento do for-loop. Podemos usar uma lógica muito mais simples para exibir os dez primeiros números pares:
main.cs
1234567891011121314using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 10; i++) { Console.WriteLine(i * 2); } } } }
Neste caso, a condição é muito mais simples. Por exemplo, se quisermos os primeiros 27 números pares, teremos que saber qual é o 27º número par para poder formar a condição para o método anterior, porém, neste caso, simplesmente precisamos modificar a condição para i <= 27
:
main.cs
1234567891011121314using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 27; i++) { Console.WriteLine(i * 2); } } } }
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Can you explain more about the different types of loops in C#?
What happens if I omit all three components in the for loop?
Can you show an example of a for loop that runs infinitely?
Awesome!
Completion rate improved to 1.59
Laço For
Deslize para mostrar o menu
Um loop permite executar um trecho de código quantas vezes quisermos. Existem diferentes tipos de loops. Em C#, se quisermos executar um trecho de código um número específico de vezes, usamos o for loop
.
O modelo (sintaxe) de um for loop é o seguinte:
for(initiation; condition; operation) {
// code to execute
}
Vamos considerar um exemplo onde utilizamos essa sintaxe:
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // Output "Hello World" ten times. for(int i = 0; i < 10; i++) { Console.WriteLine("Hello World"); } } } }
Nota
i++
é o mesmo quei = i + 1
. Incrementa o valor da variável em1
. Da mesma forma,i--
decrementa o valor em1
.
int i = 0
é a parte de inicialização. A inicialização ocorre quando o loop começa. No início do loop, uma nova variável temporária chamadai
é criada e inicializada com o valor0
.i < 10
é a condição. A condição é verificada a cada iteração (repetição) do loop. O loop continua executando o bloco de código enquanto a condição for verdadeira.i++
é a operação a ser realizada após cada iteração. A operação geralmente é um incremento ou decremento. Como o valor dei
é incrementado após cada iteração, a condiçãoi < 10
se torna falsa após 10 iterações e o loop é interrompido.
É importante entender que todos os três componentes do laço for
— initialization
, condition
e operation
— são opcionais. Você pode omitir qualquer um deles, mas isso pode alterar o comportamento do laço.
Embora não seja recomendado, é possível declarar a variável do laço fora do laço e deixar a parte de initialization
vazia. Isso significa que o laço ainda funcionará, mas é necessário ter cuidado, pois pode levar a resultados inesperados se não for tratado corretamente.
main.cs
12345678910111213141516using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10; i++) { Console.WriteLine("Hello World"); } } } }
Também é possível remover a parte de operation
e colocá-la ao final do bloco de código do laço. O laço se comportará da mesma forma que antes, pois a variável i
ainda está sendo incrementada após cada iteração.
main.cs
1234567891011121314151617using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { int i = 0; for(; i < 10;) { Console.WriteLine("Hello World"); i++; } } } }
Observe que, no código acima, ainda colocamos um ponto e vírgula (;
) na sintaxe do loop onde era esperado o int i = 0
. Esse ponto e vírgula deve sempre estar presente, independentemente de criarmos ou não uma variável de loop.
Também é possível remover a condição do loop, mas isso faz com que o loop seja executado indefinidamente caso não seja finalizado manualmente (o que será abordado em capítulos posteriores).
main.cs
1234567891011121314151617using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { // In this case the variable `i` is useless so we don't create it. // The loop never ends for(;;) { Console.WriteLine("Hello World"); } } } }
Nota
Ainda incluímos ambos os pontos e vírgula na sintaxe do loop
for(;;)
, pois são essenciais, caso contrário o compilador apresentará erros.
Como o valor de i
muda a cada iteração, podemos usar isso a nosso favor. Para entender melhor, vejamos um programa simples que exibe o valor de i
a cada iteração:
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 0; i < 10; i++) { Console.WriteLine(i); } } } }
Observe que termina em 9
porque começa com o dígito 0
. O número total de iterações foi dez. Podemos modificar a inicialização, a condição e a operação para exibir os dez números pares de 2 a 20.
Nota
Números pares são aqueles divisíveis por
2
. Por exemplo: 2, 4, 6, 8, 10, etc. Números pares também incluem o número0
, mas nestes exemplos lidaremos apenas com números pares acima de0
.
main.cs
123456789101112131415using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 2; i <= 20; i += 2) { Console.WriteLine(i); } } } }
Nota
i += 2
é uma forma abreviada de escreveri = i + 2
. Essa sintaxe também é válida para outros operadores, por exemplo:i -= 2
,i *= 2
,i /= 2
,i %= 2
etc.
O loop começa com 0
e aumenta o valor de i
em 2
a cada iteração. Alteramos a condição para i <= 20
para que o loop pare em 20
.
A lógica acima foi apresentada para facilitar o entendimento do funcionamento do for-loop. Podemos usar uma lógica muito mais simples para exibir os dez primeiros números pares:
main.cs
1234567891011121314using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 10; i++) { Console.WriteLine(i * 2); } } } }
Neste caso, a condição é muito mais simples. Por exemplo, se quisermos os primeiros 27 números pares, teremos que saber qual é o 27º número par para poder formar a condição para o método anterior, porém, neste caso, simplesmente precisamos modificar a condição para i <= 27
:
main.cs
1234567891011121314using System; namespace ConsoleApp { internal class Program { static void Main(string[] args) { for(int i = 1; i <= 27; i++) { Console.WriteLine(i * 2); } } } }
Obrigado pelo seu feedback!