Pular para o conteúdo principal

10 Dicas para aumentar sua produtividade com C#

10 Dicas para aumentar sua produtividade com C#


Junta uma dica daqui, outra dali, e voilá, seguem 10 dicas para aumentar sua produtividade enquanto programa usando a linguagem C#. Obviamente não estou falando de atalhos, que também são muito úteis, mas apenas de práticas muitas vezes pouco conhecidas para aumento de produtividade, redução de código e por aí vai. Muitas só funcionam a partir do Framework 3.5, mas acredito que nesta altura do campeonato ninguém deveria estar programando em 2.0 ou frameworks inferiores...
1. Operador Ternário '?'
Use-o com moderação ou ele prejudicará a legibilidade de seu código. Basicamente o operador ternário substitui um bloco if tradicional em uma única linha de código. Novidade? NOT! Operadores ternários existem na linguagem C desde a década de 70. Na prática funciona assim, imagine o seguinte bloco de código:
1int x = 10;
2int y = 20;
3int max;
4 
5if(x > y)
6   max = x;
7else
8   max = y;
Você pode substituí-lo usando o operador ternário que funciona da seguinte forma (Questão) ? (Ação Positiva) : (Ação Negativa). Vamos ver o exemplo anterior usando operador ternário:
1int x = 10;
2int y = 20;
3int max = (x > y) ? x : y;
2. Operador Null-coalesce '??' Quantas vezes você tem de testar se objetos são nulos em seu código? O operador null-coalesce pode vir a ser útil a você então. Considere o seguinte código:
1object cache = null;
2object d = new object();
3object e = (c != null) ? c : d;
Obviamente poderíamos reescrever usando o operador ternário:
1object cache = null;
2object d = new object();
3object e = (c != null) ? c : d;
Porém, usando o operador null-coalesce, conseguimos encurtar ainda mais o código (se o objeto do lado esquerdo é null, então ele retornará o valor do lado direito):
1object cache = null;
2object d = new object();
3object e = c ?? d;
3. Inicializadores de Objetos
Cansado de perder várias linhas de código para ficar setando valores de propriedades? Ou então cansado de ficar escrevendo dezenas de sobrecargas de construtores? Os construtores auto-implementados que surgiram na versão 3.0 do C# resolvem seu problema e de quebra ainda melhoram a legibilidade de seu código. Primeiro vamos ver o jeito tradicional de inicializar um objeto:
1Cliente c = new Cliente();
2c.Nome = "João";
3 
4c.Endereco = "Rua Lima 204";
E agora usando os inicializadores de objeto:
1Cliente c = new Cliente { Nome="João", Endereco = "Rua Lima 204" };
4. A diretiva 'using' Uma vez que você precisa alocar um objeto em memória um pouco mais pesado que o normal, como streams e arquivos de mídia, é importante que seja feito um controle mais rigoroso na hora de liberar a memória novamente, evitando problemas futuros. Ou seja, sempre temos de fazer três etapas: criamos o objeto, usamos ele e o descartamos. Isso pode ser ilustrado com o trecho de código abaixo:
01// 1. Alocando o objeto
02Font font1 = new Font("Arial", 10.0f);
03try
04{
05 // 2. Usando o recurso
06}
07finally
08{
09// 3.Descartando o objeto
10if (font1 != null)
11((IDisposable)font1).Dispose();
12}
A diretiva using permite comprimir o código anterior em:
1// alocando o recurso
2using (Font font1 = new Font("Arial", 10.0f))
3{
4    // Usando o recurso
5}
6// Descarte automático
A diretiva using somente pode ser utilizada em objetos que implementem a interface IDisposable. 5. Apelidos para nomes de classes e namespaces muito grandes
Nomes em C# podem se tornar muito longos. Se você está desenvolvendo algo para , pode estar querendo abrir um processo do Word para criar um documento, o que cria objetos com namespaces enormes. O código abaixo, usando a diretiva using para criar um apelido de namespace ilustra outro uso deste suíço da programação C#:
1using Word = Microsoft.<span id="span_dynabox" style="display:inline; background:transparent; padding:0pt; border:0px none transparent; color:transparent; margin:0px; visibility:visible;"><label class="adz" style="color:#003399;cursor:pointer;border-bottom:1px dashed #FF0000;text-decoration:underline;color:#FF0000;display:inline;margin:0px;" idu="0" termo="office">Office</label></span>.Interop.Word;
2...
3Word.Application = new Word.Application() { Visible = True; }
6. Objetos Nullables
Algumas vezes é necessário que suas variáveis possam conter valores nulos, mesmo quando é um simples inteiro. Isto ocorre com mais frequência quanto trabalhos com mapeamento objeto-relacional, pois na maioria dos bancos de dados sempre teremos tabelas com colunas que podem conter valores nulos. Para tornar um variável comum em uma variável que aceita null, basta adicionar um '?' ao final do tipo e pronto!
1Nullable x = null;
2int? x = null;
Os nullable-types surgiram na versão 2.0 do framework e podem ser invocados das duas formas exibidas anteriormente.
7. Propriedades Automáticas
No C# 3.0 ganhamos as propriedades automáticas. Geralmente a maioria das propriedades das classes são apenas exposições de atributos privados ao restante do sistema. Dificilmente elas possuem alguma lógica ou verificação que realmente exija a criação de um atributo privado e de uma propriedade pública. Desta forma, para que ficar repetindo gets e sets sempre iguais, retornando o valor de um atributo privado? Desta forma, as propriedades automáticas vieram para agilizar a tarefa de criação de propriedades que nada mais fazem do que retornar ou receber valores. Vale salientar que em de compilação vão ser gerados atributos privados para onde os valores dessas propriedades ficarão armazenados. Ous eja, não muda nada para o sistema, apenas para o programador.
1public class Pessoa{
2 private string _primeiroNome;
3 public string PrimeiroNome
4 {
5    get { return _primeiroNome; }
6    set { _primeiroNome= value; }
7 }
8}
O bloco de código anterior mostra o jeito antigo de fazer as coisas. O bloco seguinte mostra as propriedades automáticas:
1public class Pessoa
2{
3 public string PrimeiroNome { get; set; }
4}
Para quem acha que criar propriedades automáticas públicas é a mesma coisa que criar atributos públicos, está redondamente enganado. O método DataBind presente na maioria dos controles de exibição de dados somente efetua o Bind sobre propriedades públicas e nunca sobre atributos de classe. Desta forma, se pretende que sua classe possa ser exibida em controles deste tipo, é bom usar as propriedades corretamente. 8. Inferência de Tipos
Esta é outra dica que deve ser usada com cuidado. Eu particularmente uso apenas quando estou trabalhando com namespaces desconhecidos ou com LINQ e Lambda Expressions. Sendo o C# uma linguagem fortemente tipada, é natural que aja toda uma preocupação com escolher o melhor tipo para as variáveis e objetos que serão utilizadas. Da mesma forma, é importante conhecer os diversos tipos existentes quando se está manipulando métodos de terceiros. A inferência de tipos permite que você deixe de escrever o tradicional código:
1string MyString = “Hello World”;
Desta forma:
1var MyString = “Hello World”;
Peraí, igual no Javascript? NOT! Mesmo com a inferência de tipos C# ainda é uma linguagem fortemente tipada e uma vez que a inferência esteja concluída (i.e. a variável recebeu um valor) o tipo de seu conteúdo jamais poderá ser alterado. Novamente, isto é apenas a nível de programação. Quando o compilador entra em ação, ele atribui os tipos corretos conforme a necessidade, nos poupando do trabalho de decorar os mais variados tipos e retornos de chamadas de métodos. O objeto do tipo inferido pode perfeitamente ser utilizado como um objeto normal, como o código a seguir nos mostra:
1var elencoSenior = Empregados.Where(s => s.Idade > 35);
2foreach(var membro in elencoSenior)
3           Console.WriteLine("Nome: {0} Idade: {1}",membro.Nome, membro.Idade);
Mas então, qual o tipo de elencoSenior? ((System.Linq.Enumerable.Iterator<<>f__AnonymousType0>)(SeniorStaff))
Bizarro não? Já imaginou ter de trabalhar com este tipo maluco? Muito mais fácil com inferência de tipos.
9. Expressões Lambda
Expressões Lambda são expressões de consulta feitas sobre coleções de dados de forma extremamente otimizada e simples, criando um poderosa de produtividade. Por exemplo, se tivéssemos uma lista de 30 funcionários e quiséssemos saber todos os funcionários que possuem mais de 35 anos? Tradicionalmente teríamos de fazer um laço para percorrer todos os elementos dalista comparando a idade de cada elemento e adicionandoos em uma outra fila à medida em que forem encontrados os funcionários mais velhos. Com Lambda, tal tarefa se restringe somente a:
1var elencoSenior = Empregados.Where(s => s.Idade > 35);
10. string.IsNullOrEmpty()
Não necessariamente uma feature da linguagem, mas um método estático muito útil da classe string. Me impressiono como existem pessoas que não conhecem esta poderosa ferramenta para testar se strings estão nulas (null) ou vazias (""). Segue exemplo de código;
1if (String.IsNullOrEmpty(s) == true)
2    return "é nula ou vazia";
3else
4     return String.Format("(\"{0}\") é nula ou vazia.", s);
Créditos originais: http://www.dijksterhuis.org/10-c-coding-shorthands-that-improve-productivity/#more-897

Comentários

Postagens mais visitadas deste blog

Visual C# 2010 Express Download

  Visual C# 2010 Express    Construa aplicativos personalizados em Visual C#, uma linguagem simples, poderosa, segura e orientada a objetos que permite rápido desenvolvimento de aplicativos com a expressividade e elegância das linguagens estilo C. Depois da instalação, você pode experimentar o produto por até 30 dias. Você precisa se registrar para obter a chave gratuita para continuar usando depois desses 30 dias. Download

Sistema de Controle de estoque

A partir desta da estarei fazendo uma vídeo aulas conde irei construir juntamente com vocês um  sistema de controle de estoque. conforme descrição a baixo:  Escolha do Banco de Dados A escolha do banco de dados e muito importante para um sistema, para este projeto iremos escolher um banco no qual tenha uma boa iteração com a linguagem escolhida que é o Csharp. Tipo de Banco Access SqlServer Tabelas do banco de dados: Usuário  Para ter controle do acesso ao sistema e também limitações como nível de acesso e auditoria.  Cliente  Este cadastro é muito importante para sabemos para quem vendemos e quais suas preferências. Fornecedor  Para temos controle de quem nos fornece as mercadorias. Produto  Esta é umas das parte mais importante do sistema onde teremos cadastrado todos os produtos que temos. Categoria  Aqui onde será feira a separação dos produtos por categorias para uma melhor organização. ...

Login e nível de acesso aula 03

Construindo um login com nível de acesso Para controle de estoque