terça-feira, 13 de novembro de 2012

C# - Estruturas de Repetição


Linguagem C# - Estruturas de Repetição

Neste segundo artigo veremos as estruturas de repetição, os denominados laços ou loop. As estruturas de repetição são usadas para controlar a execução de códigos repetidamente até que uma condição seja verdadeira. Falarei também um pouco dos controles de fluxos como o: Break e o Continue.
Inicie um novo projeto do Visual Studio 2010 e crie uma aplicação “Windows Forms”. Trabalharemos também neste artigo com o controle ListBox para armazenar os dados obtidos das rotinas de repetições, para isto coloque 6 botões e um ListBox em nosso formulário encontrado na palheta “Common Controls”. Este componente é o mesmo utilizado no Delphi, tendo suas propriedades e métodos bem parecidos. A Imagem 01 ilustra a estrutura do formulário.

Figura 01: Estrutura Inicial do Formulário.

Sendo que cada botão é responsável por uma rotina, neste caso iremos mostrar o resultado no ListBox ao Lado.

Utilizando o #Region

Antes de iniciarmos nossa codificação darei uma dica interessante, o uso de um recurso chamado “Region”. Para quem não sabe, o Microsoft Visual Studio implementa este recurso para facilitar a vida de nós programadores. O mesmo visa diminuir visualmente o código e deixá-lo agrupado por tipos de utilização.
Exemplo: Códigos para Insersão, Exclusão, Alteração, etc...
No caso específico deste artigo agruparemos por tipos de Estrutura de Repetição.

Sintaxe:

#region "Comando While"      
      <Bloco de Comandos>
      <Bloco de Comandos>
#endregion

#region "Comando Do/While"      
      <Bloco de Comandos>
      <Bloco de Comandos>
#endregion


Após a implementação acima o Visual Studio insere um sinal de menos "-" ou um de mais "+" para poder minimizar ou maximizar esta região do código.

Os blocos ficariam da seguinte maneira:


Comando While

O comando While é geralmente utilizado quando não sabemos quantas vezes é necessário repetir um bloco de comandos para que obtenhamos uma condição verdadeira. Esta condição de retorno deve ser booleana.
Sintaxe:

while (teste condicional)
{

//Comandos
}



Exemplo:

#region While

        private void button1_Click(object sender, EventArgs e)
        {
            int numero = 1;
 listBox1.Items.Clear();
 listBox1.Items.Add("Comando While");

            while (numero <= 20)
            {
                listBox1.Items.Add(numero.ToString());
                numero += 1;
            }

        }

#endregion


Figura 02: Resultado do Comando While.

Comando Do/While

O Do/While tem quase a mesma funcionalidade do While, a única diferença é que com o uso dele teremos os comandos executados ao menos uma única vez.

Sintaxe:

Do
{

//Comandos

} While(condição)



Exemplo:

#region Do/While

        private void button2_Click(object sender, EventArgs e)
        {
            int numero = 20;
            listBox1.Items.Clear();
            listBox1.Items.Add("Comando Do/While");

            do
            {
                listBox1.Items.Add(numero.ToString());
                numero -= 1;
            } while (numero >= 1);

        }

#endregion
Figura 03: Resultado do Comando Do/While.

A diferença do Resultado dos comandos citados acima é que no segundo estamos decrementando o valor. Notem que no 

C# temos a facilidade para fazer esta tarefa, sendo que:

“+=“ Incrementa um valor
“-=” Decrementa um valor

Comando For

O famoso comando “For” possui exatamente a mesma funcionalidade do comando While. Ele trabalha checando uma condição para executar um bloco de comandos até que esta condição seja verdadeira.

Sintaxe:

for (int i =0; i <= 20; i++)
{
      //Comandos
}
 

A primeira parte (int i= 0) temos uma variável inteira inicializada com o valor 0, na segunda (i <= 20) uma condição para executar o bloco de comandos, neste caso específico executaremos 20 vezes. O terceiro argumento (i++) indica o incremento automático desta variável. Poderíamos também decremntar um valor (i--)

Exemplo:

#region For

        private void button3_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            listBox1.Items.Add("Comando For");

            for (int i = 1  ; i <=20; i++)
            {
                listBox1.Items.Add(i.ToString());
            }
        }

#endregion



Figura 04: Resultado do Comando For.

Comando Foreach

Quando descobri este comando fiquei surpreso com sua utilidade. O laço “Foreach” é utilizado quando desejamos percorrer todos os elementos de um array ou de coleções de dados, como por exemplo um ArrayList. Podemos também usar um “For” rodando enquanto uma determinada variável for menor que a largura de um array (geralmente é usado a propriedade Length).
O Laço Foreach é uma boa ideia quando se trata na leitura e apresentação dos dados, sendo de uma implementação muito rápida.

Sintaxe:

foreach (var item in collection)
{
     //Comandos          
}


O var pode ser do tipo int, float, string, etc... seria o tipo da variável. O item será o nome do elemento atual do array e collection o array a ser manipulado. Veja exemplo a seguir:

#region Foreach

        private void button4_Click(object sender, EventArgs e)
        {
            ArrayList lista = new ArrayList();

            for (int i = 1; i <= 20; i++)
            {
                lista.Add("Número_"+i.ToString());
               
            }

            foreach (var item in lista)
            {
                listBox1.Items.Add(item);
               
            }
        }

#endregion

Neste exemplo, no primeiro momento utilizamos um tipo de variável “ArrayList” , sendo necessário importar o seguinte namespace:


using System.Collections;


Foi criado um “For” para alimentar nosso Array e logo em seguida um “Foreach” para percorrê-lo e mostrar o resultado no Listbox. Ver Figura 05.

Figura 05: Resultado do Comando Foreach.


Controles de fluxo

Utilizamos dois controles de fluxo em estruturas de repetição: o Break e o Continue. O primeiro é utilizado para saída de laços e o segundo quando deverá mover a execução para a próxima iteração no laço.

Comando Break

Sintaxe:


for (int i = 1  ; i <=20; i++)
{
     //Comandos
     If (condição1 == condição2)
        Break; 
 
}


Ressalto que neste exemplo utilizei o Operador “For”, O Break pode ser usado tanto em While, Foreach, Do/While, vejamos o código a seguir.


 #region Break

        private void button5_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            listBox1.Items.Add("Comando Break");

            for (int i = 1; i <= 20; i++)
            {
                listBox1.Items.Add(i.ToString());

                if (i == 15)
                {
             break;
                    MessageBox.Show("Comando Break, nº" + i.ToString());
                   
                }

            }

        }

#endregion


No código criado anteriormente usei um “If” para verificar se o número de repetição é igual a 15 e logo em seguida interrompi o laço mostrando ao usuário uma mensagem, ou seja, interrompemos nosso laço e tudo o que vier após o comando Break. Ver Imagem 06.

Figura 06: Comando Break.        

Comando Continue

Sintaxe:


for (int i = 1  ; i <=20; i++)
{
     //Comandos

     If (condição1 == condição2)
        Continue; 
 
     //Comandos
}


Veja o exemplo a seguir:

#region Continue
        private void button6_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            listBox1.Items.Add("Comando Continue");
       
            for (int i = 1; i <= 20; i++)
            {
                if ((i == 10) || (i == 11) || (i == 12))
                  continue;
              
                listBox1.Items.Add(i.ToString());

            }
        }
#endregion

No código utilizei um “If” para verificar se o número de repetição é igual a 10,11 ou 12, caso a condição seja verdadeira utilzei o continue. Notem que estes números não foram adicionados no Listbox pelo fato de pularmos e irmos para a próxima iteração do laço. Ver Imagem 07.

Figura 07: Comando Continue.

Conclusão

Pudemos aprender neste artigo as denominadas estruturas de repetição com exemplos práticos e fáceis. Continuaremos nossa caminhada no aprendizado desta linguagem de programação. Abraço e até o mês que vem!

Nenhum comentário:

Postar um comentário