Primeiras aulas do curso Certificação C# Programming parte 4: Fluxo de programa e exceções

Certificação C# Programming parte 4: Fluxo de programa e exceções

Fluxo de Programa If, Else, Switch - Introdução

Olá, eu sou o Marcelo Oliveira, bem vindos a mais um curso aqui na Alura, o curso de certificação 70-483 da Microsoft, sobre programação em C#.

Nós vamos ver nessa parte 4 do curso mais alguns itens que são necessários para fazer a prova de certificação, mas primeiro a gente vai dar uma repassada naquilo que já foi visto nas partes 1, 2 e 3.

Na parte 1 nós aprendemos a criar os tipos do C#. Na parte 2, a gente aprendeu a consumir os tipos do C# e na parte 3, a gente aprendeu a aplicar encapsulamento e também a criar e implementar uma hierarquia de classes. E na parte 4, a gente vai ver a partir de agora a como implementar um fluxo de programa e também implementar manipulação de exceções.

A aula 1 vai começar aí com algumas instruções para o fluxo de programa. As instruções if, else e else if. A gente também vai ver como utilizar técnicas para aninhar condições, para colocar uma condição dentro da outra.

A gente também vai aprender a montar expressões cada vez mais complexas para a gente poder fazer a avaliação dessas expressões. E também vamos aprender a trabalhar com seletores com a instrução switch.

Na aula 2 a gente vai ver a compilação condicional utilizando as diretivas de compilação e os símbolos de compilação. E a gente também vai aprender a definir os nossos próprios símbolos de compilação, customizados.

Na aula três, a gente vai aprender a utilizar o fluxo de programa, com as instruções While e Do. A gente vai aprender a varrer coleções com o While, a gente vai mostrar como exemplo um cálculo de fatorial, e também vamos inverter o momento em que a gente faz a avaliação de uma condição com a instrução do While.

Na aula 4, a gente vai trabalhar com iteração, que é a varredura de alguma coleção. A gente vai fazer essa interação utilizando inicialmente o laço While, depois a gente vai trocar essa instrução While por uma instrução For. Depois nós vamos aplicar o que a gente aprendeu para utilizar uma outra instrução que é Foreach, e depois vamos trabalhar com laços Foreach aninhados.

E na aula 5, vamos trabalhar somente com exceções, lançando e relançando uma exceção, capturando exceção, tanto a exceção base quanto exceção derivada. Vamos trabalhar com exceções customizadas, aquelas exceções que a gente vai criar para o nosso próprio controle. E também vamos ver como trabalhar com exceções do tipo SQL, ou de rede, que são geradas por componentes de banco de dados.

E também vamos aprender a fazer uma limpeza depois que uma exceção é gerada, para a gente desalocar objetos em memória.

E para os próximos cursos a gente vai abordar um item que não foi visto nessa parte 4, que são as exceções agregadas, que é um tópico um pouco mais complexo, que depende de ensinar primeiro a trabalhar com paralelismo.

Então, é isso, espero que vocês gostem dessa parte 4 do curso. Muito obrigado e até logo.

Fluxo de Programa If, Else, Switch - If e Else

Estamos começando mais um curso aqui na Alura e vamos começar abrindo aqui o projeto que foi disponibilizado na primeira aula. O projeto ByteBank. O ByteBank que é uma empresa, é um banco digital fictício, que criamos para poder dar essas aulas sobre a certificação C#.

Começamos aqui abrindo o programa, a classe Program, que está no “Program.cs” do nosso projeto, e vamos começar a trabalhar com código para ensinar o conteúdo da primeira aula, que é o if else, as condições com C#.

Vamos começar trabalhando com algumas classes do ByteBank, por exemplo, a classe “ContaBancaria”, vamos trabalhar com a “ContaBancaria” para poder mostrar as condições do C#. Em primeiro lugar vamos declarar uma variável “ContaBancaria”. E eu vou dar o nome dessa variável de conta, que vai ser uma nova instância de “ContaBancaria”.

E para eu instanciar a “ContaBancaria” eu tenho que passar o saldo inicial, que nesse caso vai ser 100 reais. Então, agora vamos rodar a aplicação para ver o que o console vai exibir. Que informações vamos ter aqui na tela quando eu vou rodar essa aplicação?

[01: 34] Rodando eu tenho aqui um saldo inicial de 100 reais. E agora vamos começar a fazer operações com essa conta. Como por exemplo, vamos sacar dinheiro. Vou colocar aqui o nome da variável conta ponto, e eu vou chamar o método pra sacar dinheiro. A nossa classe “ContaBancaria” já tem alguns métodos que vamos ver daqui a pouco, entre eles nós temos aqui o “SacarDinheiro”.

Então, eu vou passar aqui nesse método a quantia que eu quero sacar. Por exemplo, 35 reais. E agora vamos rodar a aplicação. Ctrl+F5. Nós tínhamos o saldo inicial de 100 reais e nós sacamos 35 reais. Em seguida o saldo foi para 65 reais. Então, ele abateu do saldo inicial e em seguida ele imprimiu o comprovante.

Agora vamos dar uma olhada no que acontece quando sacarmos um valor maior do que o saldo dessa conta. Nós tínhamos de saldo 65 reais, depois do primeiro saque. Agora eu vou fazer um saque de um valor maior, como por exemplo 150 reais. Agora vou rodar a aplicação. Ctrl+F5, e nós vamos ver que depois do primeiro saque nós começamos a sacar 150 reais, e o saldo foi para 85 reais negativo.

Em seguida ele imprimiu o comprovante, como se estivesse imprimindo no papel o comprovante. Então, nós vemos aqui que o saldo passou a ser negativo. Essa é uma situação que não pode acontecer em uma conta bancária, a não ser que você tenha algum privilégio, algum cheque especial, alguma coisa do tipo, mas no nosso caso ninguém pode sacar um valor maior do que o seu saldo bancário.

Então, que vamos fazer é ajustar o método “SacarDinheiro”, para impedir esse saque maior do que o valor do saldo. Vamos abrir aqui a classe “ContaBancaria” e vamos navegar aqui para o método “SacarDinheiro”. Então, o que está acontecendo aqui nesse método?

Nós estamos chamando o método “Sacar” que é o que vai fazer o abatimento do saldo a partir dessa quantia que foi solicitada, depois ele imprime o comprovante. Nós vemos que o fluxo desse método é direto, ele é um fluxo contínuo e chamamos isso de caminho feliz. Esse fluxo direto, que é o fluxo padrão de uma aplicação, de um método, chamamos isso de caminho feliz.

Temos esse fluxo como um diagrama da seguinte forma, nós temos aqui o início do método, depois nós temos a chamada para o método sacar e depois é impresso o comprovante desse saque. O que precisamos fazer é avaliar se essa conta bancária tem um saldo maior ou igual à quantia que está sendo solicitada para poder fazer esse saque. Caso contrário, eu tenho que impedir esse saque.

Então, como que podemos fazer para desviar o fluxo dessa aplicação, desviar do caminho feliz e fazer um caminho alternativo dependendo de uma condição. Então, no C #nós temos a estrutura que é o If Else. Nós vamos colocar aqui o If, tab, tab. Então, automaticamente veio aqui dentro dos parentes a expressão true, verdadeiro, indicando que nesse lugar eu tenho que colocar a condição para que eu tome uma ação, para que eu faça um desvio, aqui no meu programa, para tratar de uma situação excepcional.

O o que eu quero testar aqui? Eu quero testar se a minha conta tem saldo, como eu calculo se uma conta tem saldo? Eu vou colocar aqui, if saldo, o saldo ele tem que ser maior ou igual a quantia que está sendo sacada, “saldo >= quantia”. Nesse caso, vamos fazer o saque, vamos mover esses dois métodos, “Sacar” e “ImprimirComprovantes”. Essas duas chamadas vamos mover aqui para dentro desse bloco do if.

Vamos intentar. Agora temos esse desvio que é feito para poder verificar se a nossa conta tem saldo, e só então fazer o saque. Agora vamos rodar a aplicação com Ctrl+F5, e vamos ver que o primeiro saque de 35 reais foi feito, então ele imprimiu o saldo e ele está dizendo que o comprovante também saiu no papel.

Só que o segundo saque não foi realizado, mas ele também não tomou nenhuma ação, como por exemplo, exibir pra nós o problema do saldo insuficiente. O que temos que fazer nesse caso é criar um outro bloco pra indicar que estamos tomando uma decisão diferente, no caso do saldo não atender a quantia que está sendo sacada.

[0.7:49] Vamos mostrar aqui como está hoje, como que está agora o nosso diagrama de acordo com o código do método “SacarDinheiro”. Agora temos uma condição aqui no meio para verificar se ele tem saldo suficiente ou não. Se tiver saldo ele vai progredir aqui pra dentro do “Sacar” e o “ImprimirComprovante”.

Agora, e se ele não tiver saldo? Eu vou ter que programar essa outra perna aqui da minha condição. Essa outra perna chamamos de Else. O “senão” do C.

Pra programar o senão, vamos colocar aqui um outro diagrama pra mostrar pra vocês. Se não temos saldo suficiente, eu vou entrar em um outro bloco de código pra poder exibir uma mensagem de erro. Pra isso eu tenho que colocar aqui depois do If um Else. E dentro do Else eu vou imprimir a mensagem de erro, indicando saldo insuficiente. Agora vamos rodar a aplicação de novo, com Ctrl+F5.

Depois do primeiro saque que foi feito aqui em cima, ele tenta fazer o saque e ele está exibindo aqui a mensagem "saldo insuficiente". Agora percebemos que o programa tomou um fluxo diferente. Ele entrou aqui nesse outro braço da minha condição, que equivale a esse braço desse diagrama aqui embaixo. Ou ele entra aqui, ou ele entra aqui, ele não pode entrar nos dois numa mesma passagem.

Então, o que estamos vendo aqui é a estrutura do If e Else. E vamos ver que lá na certificação, programação em C#, vamos ter situações mais complexas do que essa. Então, estamos montando aqui os bloquinhos pra poder exemplificar, para deixar mais ou menos vocês preparados para a prova de certificação.

Lembra que eu falei que estávamos fazendo aqui o caminho feliz? No primeiro código era o caminho feliz. O que estamos vendo aqui é que eu inverti a ordem. O que eu estou testando primeiro, testando se tenho o saldo, eu estou entrando aqui pra fazer o saque e imprimir o comprovante. E a situação excepcional a situação, que seria situação de erro, ela está vindo aqui embaixo, mas isso não é uma boa prática de programação.

O que acontece muitas vezes é que você testa as situações de erro no início do seu método. Isso é chamado de condição de guarda. As cláusulas de guarda são condições que impedem que você faça alguma operação com valores inválidos. Então, o que podemos fazer aqui é inverter a ordem da nossa condição, do nosso If para poder deixar o nosso código melhor.

Como que eu faria isso? Eu tenho que inverter esses dois blocos do If e do Else. E também tenho que inverter aqui o nosso If, a nossa expressão que retorna um valor booleano. Em primeiro lugar vamos inverter essa condição aqui no If, onde eu tenho maior ou igual. Como eu inverto isso? Eu coloco simplesmente o menor.

Então, se o saldo for menor do que a quantia, nesse caso eu vou ter que exibir "saldo insuficiente". Vamos pegar esse bloco aqui, recortar e colar aqui em cima. E o bloco que estava lá em cima eu vou recortar e mover aqui para baixo. Então agora sim, eu tenho se o saldo for menor do que a quantia que está sendo solicitada, o meu saldo é insuficiente. E eu passei aqui pra baixo a situação do caminho feliz.

Agora eu vou rodar a aplicação de novo com Ctrl+F5, e vamos ver que ele sacou, fez o primeiro saque aqui, e depois vimos que o saldo é insuficiente para o segundo saque. Podemos continuar aqui, por exemplo, eu posso numa situação dessa eu posso fazer um tipo de retorno aqui nessa cláusula de guarda, pra que eu saia do método sacar dinheiro sem precisar passar pelos outros passos aqui embaixo, porque eu já verifiquei que não tem saldo. O que eu faço aqui é simplesmente retornar com a instrução return. Rodo a aplicação de novo e eu vou ver exatamente o mesmo resultado aqui. Mesmo resultado de antes.

E aí pra completar, olha só, como eu estou retornando no caso do saldo insuficiente, eu posso remover essa condição, esse outro braço da condição que é o Else. Vou remover o Else, vou remover essa chave aqui também. Vou voltar aqui o nível do “Sacar” e “ImprimirComprovante”.

Então, o nosso código ficou mais limpo e eu tenho exatamente a mesma funcionalidade com o If sem o Else. Eu fiz o primeiro saque, imprimi o comprovante e no segundo saque ele deu o saldo insuficiente.

Fluxo de Programa If, Else, Switch - Combinando expressões booleanas

Agora vamos começar a ver situações que podem acontecer, que podem aparecer na prova de certificação envolvendo condições. Para isso nós temos aqui uma classe chamada “Emprestimo” e vamos criar uma nova instância desse “Emprestimo” declarando uma variável.

Então, “Emprestimo”, variável “emprestimo” mesmo, vai ser uma nova instância de “Emprestimo”. Só que aqui nesse lugar eu tenho que colocar o código do contrato desse empréstimo. Então, pra isso vamos colocar um código por exemplo, xyz. E vamos rodar a aplicação para ver o que acontece.

Quando eu rodo a aplicação o programa vai mostrar uma mensagem dizendo que foi criado um novo empréstimo com um código xyz, mas aqui dentro do empréstimo vamos navegar para o construtor do empréstimo, com a tecla F12, e aqui nós temos o código.

O que ele faz? Ele simplesmente pega o parâmetro do construtor e atribui no campo privado, que é o código do contrato. O que temos aqui é um caminho feliz. Nós temos um código que é executado sequencialmente sem nenhum desvio. Mas aqui o código do contrato ele precisa seguir algumas regras.

Então, o que precisamos fazer é verificar se esse código de contrato ele é válido antes de poder criar uma instância do empréstimo. O que vamos fazer aqui? Vamos fazer a validação do código de contrato colocando uma condição If. Então, If, tab, tab, e aqui dentro vai aparecer a expressão true, verdadeiro. Nesse lugar tem que colocar a minha condição para testar, para ver se o código de contrato é válido ou não.

Felizmente nessa classe de empréstimo eu já tenho um método chamado “ValidarCodigo”, que vai fazer o trabalho de validação pra mim. Então, vou simplesmente colocar aqui “ValidarCodigo” e passando como argumento, o “codigoContrato” que está sendo recebido aqui pelo construtor da classe “Emprestimo”.

[02:33]Por que que eu posso chamar o método validar o código dentro da minha condição if? Dentro da expressão do if? Eu posso chamar porque o “ValidarCodigo” ele retorna um booleano, como podemos ver aqui. Se ele retorna verdadeiro ou falso eu posso usar a chamada desse método aqui dentro da instrução If.

Agora tenho que mover esse código aqui para cima pra dentro do bloco If. Ele só vai executar esse código, ele só vai atribuir o valor do campo local, do campo privado, se o meu código estiver válido. Vamos rodar a aplicação com Ctrl+F5. Rodando, agora estamos vendo que ele não mostrou mensagem indicando que um novo empréstimo foi criado.

Por que isso? Porque o nosso código não está válido de acordo com o programa. Então, o que vamos fazer aqui é visualizar o método validar código para ver o que ele está fazendo. Vamos aqui para cima, onde nós temos o validar código e nós estamos vendo que ele declara uma variável local “codigoContratoValido”. E ele vai fazer um laço, ele vai fazer uma repetição para cada um dos caracteres da string código de contrato.

Nós não vimos ainda sobre os laços de repetição, as estruturas de repetição, mas nós vamos ver mais para frente neste curso. Por enquanto vamos focar somente nas condições com If. O que me interessa aqui dentro desse método? O que me interessa é essa variável aqui que vai dizer se cada caractere é válido ou não no código do contrato.

Essa variável ela está recebendo sempre um valor falso, indicando que não é válido, o carácter não é válido. Então, o que eu preciso fazer aqui? Eu preciso implementar aqui uma expressão que vai implementar a regra de negócios que está definida nessa linha aqui de cima, nesse comentário.

Só deve ser válido se for numérico ou letra maiúscula. Então, o que eu tenho aqui? Eu tenho uma expressão aqui em português, que eu preciso traduzi para código C#. Isso vai ser exigido várias vezes durante a certificação. Então, você tem que interpretar isso como um código C#.

Em primeiro lugar, como que eu sei se o caractere é numérico ou não? Vamos colocar aqui uma variável nova, bool, booleana. Vamos colocar “numérico =”, e para saber se o caractere é numérico eu posso utilizar um método da estrutura, struct Char.

Então, vou colocar Char, em seguida eu coloco o método IsDigit, para saber se ele é numérico ou não. E aqui eu vou colocar o caractere. Vamos colocar o caractere para fazer essa validação. Então, essa variável “numerico” já faz uma parte dessa verificação.

A outra parte da verificação é saber se é maiúscula ou não. Para saber se é maiúsculo, eu vou declarar uma outra variável, booleana, que eu vou chamar de “maiuscula”, que vai ser o que? Eu vou pegar de novo a estrutura Char e vou acessar um outro método que vai indicar se essa letra é maiúscula. Esse método é IsUpper.

E aqui dentro eu passo como argumento, o caractere que é a minha variável que está sendo criado aqui durante o laço. Então, agora que eu tenho essas duas variáveis, o que eu vou fazer é verificar se o meu caractere é válido. Então, eu vou ter que combinar o resultado dessas duas expressões.

Se ele é numérico, vamos colocar aqui no lugar do false, “numerico”. Só que além de ele ser numérico, ele também pode ser maiúsculo, mas não necessariamente os dois juntos. Pode ser que ele seja um, mas não seja o outro. Então, essa palavra "ou" ela indica o que? Ela indica um operador lógico.

Então, como traduzimos o "ou", essa alternativa pra dentro do código C#? Utilizamos o operador lógico que é o pipe. Nós colocamos aqui o caractere pipe, que são esses dois traços verticais, para indicar um ou outro. Um ou outro podem ser verdadeiras, e o valor do “valido” vai ser verdadeiro. Então, eu coloco “numerico || maiuscula”.

Agora vamos rodar a aplicação com Ctrl+F5. E ele não está validando, ele está dizendo que o meu código está inválido porque lembramos que o código que foi passado foi "xyz" em minúsculo. Vamos passar aqui um código válido, vamos colocar letra maiúscula "A", seguido de alguns caracteres que são números, 1, 2, 3, 4. Vou rodar de novo a aplicação com Ctrl+F5. Agora sim, um novo empréstimo com código A1234.

Sobre o curso Certificação C# Programming parte 4: Fluxo de programa e exceções

O curso Certificação C# Programming parte 4: Fluxo de programa e exceções possui 209 minutos de vídeos, em um total de 69 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda .NET acessando integralmente esse e outros cursos, comece hoje!

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Procurando planos para empresas?
Acesso por 1 ano
Estude 24h/dia onde e quando quiser
Novos cursos toda semana