Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
RENATO HADDAD
Microsoft Most Valuable Professional MVP, MCT, MCPD e MCTS
TECNOLOGIAS
Visual Studio .NET 2010, C#
INTRODUO
Neste artigo irei abordar alguns tpicos bsicos que todo desenvolvedor deve saber. A pedidos,
os tpicos sero bsicos porque este artigo faz parte do programa Microsoft Academy Awards,
Mdulo Estruturas de deciso e repetio e Programao Orientada a Objeto OOP.
Decidi usar a linguagem Visual C# simplesmente porque a maioria dos exemplos encontrados
na web usam C#. Neste artigo abordarei as estruturas de decises e repeties, programao
orientada a objetos, como criar uma classe, adicionar propriedades, mtodos e um construtor.
Para finalizar, como herdar uma classe e as vantagens.
Estruturas de decises
Toda aplicao que precise de um direcionamento do fluxo de execuo dos cdigos, utiliza os
comandos de condies, os quais tm como objetivo avaliar uma condio e conforme o
resultado, direcionar o fluxo para uma operao, seja ela um bloco de cdigos, uma funo,
etc.
Basicamente a condio pode ser uma expresso lgica ou relacional. No exemplo a seguir
definida a varivel idade com valor 12 e o if avalia se a idade maior ou igual a 18. Caso seja
verdadeiro, ento ser mostrada a mensagem "Maior de idade". Neste caso, h apenas uma
instruo a ser executada.
Aprimorando um pouco o uso do if, veja no exemplo a seguir que h trs situaes possveis
de resultado. A idade inicial 13, e a primeira expresso avalia se a idade igual (==) a 10.
Caso verdadeiro, mostra a mensagem "igual a 10". Caso contrrio, avaliada a segunda
expresso, pois o uso do else if (seno se) avalia se a idade maior ou igual a 12 E (&&)
menor ou igual a 16. Veja que neste caso a mesma coisa que dizer entre 12 e 16, inclusive.
Observe o uso do && o qual significa o E de forma que ambas as expresses devem ser
verdadeiras. Caso seja, ser mostrada a mensagem "Adolescente". Neste exemplo se
nenhuma das duas expresses anteriores for verdadeira, ento o fluxo cair no else e mostrar
"maior que 16". Detalhe: quantos else if posso ter? Quantos forem necessrios, no h limites.
idade = 13;
if (idade == 10)
Console.WriteLine("igual a 10");
else if (idade >= 12 && idade <=16)
Console.WriteLine("Adolescente");
else
Console.WriteLine("maior que 16");
Assim com temos o E (&&), o uso do OU (||) muito comum. Neste exemplo a seguir a
mensagem "condio OU satisfeita" ser exibida somente se a idade for igual a 1 OU igual a
10. Caso contrrio, jamais este cdigo ser executado.
J pensou em escrever um cdigo com muitos IFs? No faz muito sentido isto. Em minha
opinio fica um cdigo que chamamos de sujo, de difcil manuteno, ento se faz uso do
comando swtich. Veja o exemplo a seguir: a varivel linguagem contm o texto "cs".
O swtich avalia exatamente esta expresso swtich (linguagem). Dentro do bloco voc deve
colocar o case para cada condio a ser avaliada, e de acordo com o resultado, executa-se o
cdigo. Neste caso, dependendo das condies (vb ou cs) ser mostrada a respectiva
mensagem. Note que se nenhuma acima for atendida, ento o fluxo cai no default. Observe
que h a palavra chave break, que tem a finalidade de encerrar o swtich e seguir a execuo
dos cdigos abaixo do fechamento do bloco do swtich. O break no obrigatrio mas se voc
no colocar, a cada case ser realizado o questionamento da expresso.
switch (linguagem)
{
case "vb":
Console.WriteLine("vb.net");
break;
case "cs":
Console.WriteLine("c sharp");
break;
default:
Console.WriteLine("outra linguagem");
break;
}
Agora vamos ao uso de loopings. Como o prprio nome diz, looping um lao o qual pode ser
finito ou infinito, depende como programar. O while um tipo de looping bastante usado o qual
tem como finalidade realizar a execuo do bloco de cdigo de acordo com a expresso
definida no escopo do while. Veja que defini duas variveis, uma boleana (lgica)
chamada cond com o valor true; e a contador do tipo int com valor 50. Veja a sintaxe
do while (cond), ou seja, enquanto verdadeiro. Neste caso, enquanto a varivel cond for
verdadeira o looping ser executado. Por segurana, dentro do bloco do looping, a cada
iterao eu fiz uma condio if que avalia se o contador igual a 60. Caso seja verdadeiro, a
varivel cond passa a ser false e no prxima execuo da iterao, o looping ser finalizado.
Vale dizer que a cada iterao mostrado o valor do contador, e tambm adicionado um
(contador++) varivel.
Console.WriteLine(contador++);
}
Outro tipo de looping muito usado o foreach (para cada item), o qual voc no precisa dizer
quantas iteraes tero. Neste exemplo, defini um array de string[] chamado reas contendo
quatro siglas de departamentos. J no foreach veja que a sintaxe simples e intuitiva, ou seja,
para cada item contido em reas (coleo de itens) execute o bloco de cdigo.
O foreach extensamente utilizado em colees de dados, leitura de dados em banco de
dados, enfim, voc no precisa controlar o final pois est encapsulado no foreach, ele que
controla o trmino.
Outro tipo de looping muito difundido em todas as linguagens o for. A sintaxe simples, mas
vamos entend-la. O int i = 0 inicializa a varivel i do tipo int com valor 0 (zero). A seguir
definido o limite da execuo, neste caso a expresso i < 100(enquanto i for menor que 100).
Para finalizar, o ltimo parmetro o contador a cada iterao, neste caso somado 1 a
varivel i.
Tratamento de Erros
Tratar erros uma das coisas mais importantes nas aplicaes. Infelizmente nem todo
desenvolvedor faz isto e acaba se perdendo completamente, tornando a aplicao no
confivel. A estrutura do tratamento simples, use o try ... catch ... finally.
Tenha em mente o seguinte: tudo que for cdigo passvel de erro coloque no bloco do try. No
importa o que seja, se der erro cair no catch, e aqui que voc deve tratar o erro.
O catch pode ser customizado para tipos definidos de erros, por exemplo, erro de abertura de
conexo com banco de dados, diviso por zero, enfim, se voc pesquisar pela
expresso Exception no help do VS ver quais existem.
No cdigo a seguir, dentro do try forcei um erro de diviso por zero, e como coloquei
umcatch para capturar este tipo de erro (DivideByZeroException), bvio que ser mostrada
a mensagem deste catch. Observe que o catch genrico sempre dever ser usado por ltimo,
ou seja, se no cair em nenhum customizado, sobra para o ltimo. A vantagem que voc
pode usar uma varivel (neste caso ex) para ter acesso s propriedades do erro. Eu usei
o ex.Message para mostrar a mensagem de erro do framework.
E o finally, para que serve? Entend o finally da seguinte forma: dando ou no erro, o
finally ser executado. Um exemplo simples de uso nas conexes com banco de dados,
dando ou no erro, feche a conexo.
try
{
// bloco de codigos
int valor = 10;
int zero = 0;
Console.WriteLine(valor / zero);
}
catch (DivideByZeroException)
{
Console.WriteLine("Vc nao pode dividir nada por zero");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
//throw;
}
finally
{
Console.WriteLine("mostra o finally");
}
// mtodos
public void Salvar() { }
Console.WriteLine(obj.nome);
Construtor da classe
Quando voc precisar instanciar uma classe, mas alguma informao deve ser passada logo
no incio, voc pode inserir o campo no construtor da classe. Exemplificando, veja a mesma
classe Jogador contendo a propriedade idade. Observe que logo aps a declarao da classe
definido o campo idade e no construtor public Jogador (int idade) j esperado o valor da
idade. Neste caso
// propriedades
public int id { get; set; }
public string nome { get; set; }
public string modalidade { get; set; }
// mtodos
public void Salvar() { }
Neste caso, quando instanciar a classe Jogador, a idade dever ser declarada imediatamente
entre parnteses.
var obj = new Jogador(25)
{
id = 10,
nome = "Paulo",
modalidade = "xadrez"
};
Console.WriteLine(obj.nome);
Herana de Classe
Um dos melhores conceitos que existem no OOP a herana. Isto permite criar uma classe
base e herda-la quando necessrio. Na classe base normalmente colocamos propriedades e
mtodos bsicos, genricos e nas classes que herdam esta, colocamos as particularidades.
Veja que criei a classe Xadrez e herdei de Jogador. No C# para herdar uma classe use o:.
Neste caso, a classe Xadrez tem as propriedades nvel e rating. No entanto, veja que o
construtor tambm usa o idade, pois na classe base Jogador, a idade deve ser declarada
quando instnciada.
Agora veja como instanciar a classe Xadrez. Observe que as propriedades id, nome e
modalidade no existem em Xadrez. Porm, como Xadrez herda de Jogador, voc tem acesso
a todas estas propriedades de forma transparente. Isto fantstico, otimiza cdigo, facilita a
manuteno e voc consegue estender vrias funcionalidades.
Vale dizer que todas as propriedades e mtodos vistos aqui so pblicos (public). Caso queira
que uma propriedade seja vista apenas de dentro da classe, use private ouprotected. Isto vale
para mtodos tambm.
Sobre o Autor
Renato Haddad (rehaddad@msn.com www.renatohaddad.com ) MVP, MCT, MCPD e
MCTS, palestrante em eventos da Microsoft em diversos pases, ministra treinamentos focados
em produtividade com o VS.NET 2010, ASP.NET 4, Entity Framework, Reporting Services e
Windows Phone. Visite o blog http://weblogs.asp.net/renatohaddad.