C# - Os erros mais comuns cometidos pelos iniciantes - II
Hoje veremos alguns dos erros mais comuns cometidos pelos iniciantes e não iniciantes na linguagem C#. |
Continuando a primeira parte do artigo continuo apresentando alguns dos erros mais comuns cometidos por iniciantes na linguagem C#.
Recursos usados:
4 - Iterando através de uma coleção ao invés de usar a LINQ
A LINQ foi introduzia na versão 3.0 da linguagem C# mudando para sempre a forma como consultar e manipular coleções.
Então se você ainda usa instruções iterativas, como um laço foreach para manipular coleções, pode estar gerando um código ineficiente.
Imagine ter uma coleção com 100.000 clientes e percorrer cada um deles para encontrar um conjunto de dados específicos. Isso não é eficiente.
Assim, ao invés de usar laços para iterar sobre a coleção, use os recursos da LINQ (Language-Integrated Query), que é um recurso da plataforma .NET integrado e projetado para facilitar a consulta de objetos, como coleções e listas.
Veja este exemplo:
Usando laço foreach |
using System; namespace CSharp_Erros1 { class Program { static void Main(string[] args) { var listaClientes = ClienteService.GetClientes(); decimal? taxa = null; foreach (Cliente cliente in listaClientes) { if (cliente.Estado == "SP") { taxa += cliente.Saldo; } } Console.ReadLine(); } } } |
Usando LINQ |
using System;
namespace CSharp_Erros1
{
class Program
{
static void Main(string[] args)
{
var listaClientes = ClienteService.GetClientes();
var clientes = (from cliente in listaClientes
where cliente.Estado == "SP"
select cliente.Saldo).Sum();
Console.ReadLine();
}
}
}
|
Com uma única linha de código LINQ você retorna os clientes desejados sem ter que percorrer a coleção inteira para fazer isso.
Você só tem que ter cautela para cenários onde o desempenho é crítico e, neste caso , comparar o desempenho da consulta LINQ para ver se ela não impacta demais o desempenho.
5 - Usando variáveis de classe pública ao invés de propriedades
Propriedades são um lugar comum para a programação orientada a objetos (OOP),
mas por que usá-las quando você pode apenas tornar públicas todas as suas
variáveis de classe ?
Resposta: Você pode controlar quem pode definir uma propriedade com
propriedades da OOP, mas não pode fazer isso com uma variável pública.
static void Main(string[] args)
{
Teste teste = new Teste();
//Temos acesso a variável publica e podemos atribuir qualquer valor a ela
teste.numeroConta = "ZZZZZZZZZ";
Console.ReadKey();
}
public class Teste
{
public string numeroConta;
public Teste()
{
numeroConta = "XXXXX";
}
}
|
Observe que foi definida uma variável pública(numeroConta) que é usada no construtor da classe Teste().
Esse descuido fere o encapsulamento visto que qualquer pode criar uma instância da classe e acessar a variável publica alterando o seu valor.
O correto é usar uma propriedade para definir a variável pública numeroConta conforme o código a seguir:
public class Teste()
{
private string _numeroConta;
public string NumeroConta
{
get { return _numeroConta} ;
}
public Teste()
{
_numeroConta = "XXXXX";
}
}
|
Agora temos uma propriedade NumeroConta() que permite somente acessar o valor da variável, alterações não são permitidas.
A classe Teste agora tem controle sobre NumeroConta.
Quando precisar de uma variável global faça isso usando uma propriedade.
Sentiu o drama ???
6 - Não liberar os objetos usados
Vazamentos de memória (também chamados vazamentos de recursos) são um
problema real para qualquer aplicativo.
A linguagem C# fornece uma maneira conveniente de chamar o método
Dispose depois que você terminar de usar um objeto.
Assim, você nem precisa se lembrar de usá-lo.
A
instrução "using" eliminará um objeto e evitará
vazamentos de memória problemáticos.
Veja esse código ineficiente :
arquivo.Read (buffer, 0, 100); |
No código acima, se você não descartar o objeto arquivo,
viar criar um vazamento de memória no aplicativo. Você pode evitar essa situação
com a instrução using.
Este código é mais eficiente :
using (FileStream arquivo
= File.OpenRead ("numeros.txt")) { arquivo.Read (buffer, 0, 100); } |
Agora o aplicativo lê um arquivo e descarta o objeto quando ele for concluído.
A instrução using chama o método Dispose no objeto da maneira correta, e também faz com que o próprio objeto saia do escopo assim que Dispose for chamado.
Dentro do
bloco using, o objeto é somente leitura e não
pode ser modificado ou reatribuído.
A instrução using garante que Dispose seja
chamado mesmo se ocorrer uma exceção enquanto você estiver chamando
métodos no objeto.
Na terceira parte do artigo vou continuar a falar sobre os erros mais comuns.
Aguarde...
'Agora é o juízo deste mundo; agora será
expulso o príncipe deste mundo.
E eu, quando for levantado da terra, todos atrairei a mim.
E dizia isto, significando de que morte havia de morrer.'
João 12:31-33
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
https://msdn.microsoft.com/pt-br/library/84787k22(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/858x0yyx(v=vs.110).aspx
https://www.toptal.com/c-sharp/top-10-mistakes-that-c-sharp-programmers-make