Programe melhor em C# — 4 dicas rápidas e úteis
Já faz alguns anos que C# é minha linguagem de programação preferida. Talvez seja pelo fato de eu ter que conviver com ela profissionalmente há uma década, mas prefiro pensar que minha preferência tenha a ver com suas características.
C# é poderosa, e a cada nova versão recebe um upgrade de recursos consideráveis. Ela pode sofrer um certo preconceito pelo antigo posicionamento centralizador da Microsoft, mas temos que admitir que ultimamente a mesma vem se esforçando para mudar: abraçou o mundo open source e se tornou, na prática, multiplataforma.
A intenção deste artigo não é lhe introduzir a classes do .NET que não conheça, mas reforçar comportamentos que irão lhe tornar um programador melhor.
Vamos às dicas.
1 — Encapsule mais
Os livros de .NET (e outras linguagens orientadas a objeto em geral) adoram definir OO por meio de características como encapsulamento, herança e polimorfismo. Mais que um conjunto de palavras bonitas, a orientação a objetos é um forma de se pensar a construção de algoritmos. Particularmente, quase nunca utilizo herança (acho as interfaces mais concisas e elegantes), e considero polimorfismo um truque bastante útil (mas não um pilar da OO).
Já o encapsulamento, este sim é a grande estrela da OO: ele permite que você oculte comportamentos e características internamente nos objetos, e exponha apenas os pontos de interação com o usuário ou outros objetos.
Frente à clássica programação estruturada, o encapsulamento foi um grande avanço: ele permite resolver grandes problemas utilizando pequenas peças, que podem ser construídas de forma isolada e unidas ao final.
No exemplo hipotético acima, estou implementando dois carros utilizando programação estruturada. Utilizei apenas características superficiais, que se vê a olho nu em um objeto do mundo real.
Agora imagine que precisemos implementar um motor completo para cada carro. Não vou nem tentar descrever um código para isso: você precisaria escrever métodos e variáveis para cara peça interna do motor. Com o encapsulamento, você pode simplesmente fazer assim…
…e só depois se preocupar em implementar a classe motor (ou delegar a outro programador da equipe).
O encapsulamento é a chave da produtividade na OO: ela permite que você se concentre na lógica da programação, e não na burocracia do código.
Faça sempre o melhor proveito possível do encapsulamento: tem algum método com mais de 50 linhas? Talvez ele esteja fazendo coisas demais, e seja interessante extrair um trecho de seu código para um novo método ou classe.
Utilizou control+C, control+V em um bloco de código, e mudou apenas alguns trechos? Extraia o mesmo em um novo método, e trate as diferenças via parâmetros e condicionais internas (if, switch).
2 — Explore o melhor da orientação a objetos com Generics
Eu não sei como o C# pôde existir sem os Generics. É o tipo de coisa que quando é lançada muda tudo.
Um dos princípios da orientação a objeto é a que se escreve uma classe uma vez, e se instancia a mesma em quantos objetos forem necessários. Mas no início não havia uma forma prática de se manipular estes objetos.
Imagine que você está criando um sistema de estoque para uma concessionária de automóveis. Você cria a classe Carro, como no exemplo mais acima, porém precisa instanciar um objeto para cada carro no pátio.
Na primeira versão do C# você armazenava os objetos em um ArrayList, que nada mais é que um array comum com alguns métodos auxiliares. Ótimo para se trabalhar com tipos simples, mas péssimo com objetos.
No C# 2.0 a Microsoft introduziu um conjunto de classes para se trabalhar com listas de objetos, os Generics. Generics são listas fortemente tipadas. Você declara uma lista de carros, e ele só pode receber novos carros.
Qual a vantagem disso? Muitas! A partir do momento em que o C# sabe qual o conteúdo de uma lista, ela ganha em performance (menor uso de boxing-unboxing), facilita a navegabilidade e permite métodos de pesquisa, ordenação etc.
Se ainda não utiliza Generics, recomendo este artigo sobre o assunto.
Se já utiliza Generics, recomendo estudar mais a fundo sobre LINQ e expressões lambdas, que são as melhores formas de se manipular listas.
3 — Estude mais
Esta não é uma dica técnica, mas pode ser que a dica que melhor lhe ajude: simplesmente estude mais.
Não coloquei esta dica à toa: 100% das pessoas sabem que precisam estudar mais, mas nem todas se conhecem o suficiente para fazer isso com eficiência. Tenho colegas que compram livros, assinam cursos online, mas não conseguem dedicar 5 minutos por dia aos estudos.
O ponto chave de uma aprendizagem eficiente e constante é se conhecer. O melhor programador com quem já trabalhei sofria de insônia e déficit de atenção. Ele gostava de aprender por livros, que começava a ler geralmente às duas da manhã. Como ele possuia problema de concentração, lia 4 vezes cada livro.
No meu caso, sofro com problema de falta de tempo livre e perco interesse lendo livros muito grandes. Contorno isso preenchendo meus pequenos tempos livres com estudo fragmentados. Sempre que estou no carro, ouço podcasts sobre programação. Depois do almoço, costumo ler umas 10 páginas de algum livro técnico. Antes de dormir, assisto a 30 minutos de vídeos sobre o tema e contribuo em repositórios do Github.
E já que citei podcasts, deixo três dicas para você ouvir no trânsito:
Lambda3 — .NET e assuntos gerais
Grok — Infelizmente foi desativado há algum tempo, mas mesmo assim possui ótimas pautas
Hipsters.tech — Podcast sobre frontend
4 — Diversifique
Um especialista sabe muita coisa sobre muito pouco. Um super-especialista sabe praticamente tudo sobre praticamente nada.
Não limite seu potencial a apenas uma tecnologia. Explore outras plataformas, outras áreas. Desenvolva um hobbie.
Já estudou bastante C#? Aprenda Python. Já tá craque em OO? Aprenda programação funcional. Acha que o mundo é só programação? Aprenda front-end.
Estudar outras áreas estimula seu cérebro a pensar fora da caixa, e isso lhe dará visão para que seus códigos resolvam problemas do mundo real.
Se não quiser ir muito longe, estude tecnologias que lhe ajudarão no dia-a-dia: Javascript, JQuery, React, banco de dados relacional, orientado a documentos… há também padrões de projetos, git, frameworks de testes, e uma infinidade de tecnologias relacionadas.
That’s all folks! Este artigo foi baseado em coisas simples que mudaram minha forma de programar, mas incrivelmente nenhuma apostila me ensinou. Espero que lhe tenha sido útil.
Um abraço!
Sou especialista Microsoft, fã da Apple e entusiasta multiplataforma. Desenvolvedor apaixonado na Salescope, fã de tecnologias e todas outras nerdices.