13 dicas e truques da linguagem C#

Junta uma dica daqui, outra dali, e voilá, seguem 12 dicas para aumentar sua produtividade enquanto programa usando a linguagem C#. Nada milagroso, mas apenas 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…

Neste artigo você vai ver:

  1. Operador ternário
  2. Operador Null-coalesce
  3. Inicializadores de objetos
  4. A diretiva using
  5. Apelidos para nomes de classe e namespaces muito grandes
  6. Tipos nullables
  7. Propriedades automáticas
  8. Inferência de tipos
  9. Expressões Lambda
  10. string.IsNullOrEmpty()
  11. Use os atalhos do Visual Studio
  12. Use os snippets de código
  13. Estude essa lista do StackOverflow

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:

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:

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:

Obviamente poderíamos reescrever usando o operador ternário:

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):

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:

E agora usando os inicializadores de objeto:

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:

A diretiva using permite comprimir o código anterior em:

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 Microsoft Office, 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 canivete suíço da programação C#:

6. Tipos 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!

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?

Sendo assim, 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 tempo de compilação vão ser gerados atributos privados para onde os valores dessas propriedades ficarão armazenados. Ou seja, não muda nada para o sistema, apenas para o programador.

O bloco de código anterior mostra o jeito antigo de fazer as coisas. O bloco seguinte mostra as propriedades automáticas:

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:

Desta forma:

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:

Mas então, qual o tipo de elencoSenior?

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 ferramenta 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 da lista comparando a idade de cada elemento e adicionando-os em uma outra fila à medida em que forem encontrados os funcionários mais velhos. Com Lambda, tal tarefa se restringe somente a:

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;

11. Use os atalhos do Visual Studio

Sim, nada é mais produtivo do que saber usar sua IDE ao máximo e atalhos são uma boa parte disso. Seguem os que mais utilizo:

  • Ctrl + K + D: identa todo o seu código automaticamente;
  • Ctrl + K + C: comenta um bloco de linhas;
  • Ctrl + K + U: descomenta um bloco de linhas;
  • Ctrl + Shift + Arrow Up: durante a programação, volta um método que você estava navegando;
  • Ctrl + Shift + Arrow Down: durante a programação, avança um método que você estava navegando;
  • Ctrl + .: implementa o método/classe inexistente que você acabou de escrever;
  • Ctrl + M + O: esconde todas as regions da classe atual;
  • Ctrl + Shift + B: compila todos os projetos;
  • F5: manda depurar um projeto;
  • Ctrl + F5: manda executar um projeto;
  • F10: durante a depuração, avança uma linha;
  • F11: durante a depuração, avança uma linha entrando nos detalhes da mesma;

12. Use os snippets de código

Snippets são palavras encurtadas que quando usamos no Visual Studio (e outras IDEs), seguidas de um TAB, elas se transformam em estruturas de código completas. Experimente digitar os seguintes snippets seguido de TAB:

  • for: monta um laço for padrão;
  • if: monta uma estrutura if padrão;
  • ctor: monta um construtor vazio para a classe atual;
  • cw: chama um Console.WriteLine();
  • do: cria um bloco do/while;
  • equals: sobrescreve o método equals de Object;
  • foreach: monta um laço foreach padrão;
  • try: cria um bloco try/catch padrão;
  • while: cria um bloco while padrão;

13. Estude essa lista do StackOverflow

Sinceramente, uma hora que eu estiver com mais paciência eu dou um resumida nos principais pontos que tem lá no StackOverflow para aumentar sua produtividade com C#. Por enquanto dá uma olhada nesta lista completíssima que o pessoal reuniu por lá, tem muita coisa boa: http://stackoverflow.com/questions/9033/hidden-features-of-c

E aí, tem alguma dica que eu não cobri aqui no post?

Como aprender C# e entrar no mercado de desenvolvimento

csh

Hoje eu não tenho nenhum tutorial para passar ao leitor. Hoje eu tenho algumas dicas para compartilhar de como se tornar um desenvolvedor  (dá uma olhada nesse post do link também) C# e ingressar no mercado de trabalho rapidamente.

Entenda rapidamente como estudando cerca de oito horas por semana durante um a três meses. Tenha em mente que levo em consideração que o leitor já esteja cursando no mínimo o segundo semestre de um curso técnico ou graduação e já conheça pelo menos uma linguagem de programação.

Se tem uma coisa que aprendi durante os cinco anos que cursei Ciência da Computação foi que não podemos esperar apenas pelos nossos professores. Temos de correr atrás de conhecimento e as dicas abaixo só funcionarão com pessoas que possuem esta disciplina e aptidão para o auto-didatismo.

Todos os semestres se formam dezenas de novos técnicos em informática, bacharéis em Ciência da Computação e analistas de sistemas. Porque mesmo assim ainda existem milhares de vagas disponíveis no mercado de trabalho?

A resposta é simples: os estudantes esperam que o diploma lhe traga os empregos, quando na verdade é o conhecimento que o trará.

Neste post você vai ver:

O Mercado de Trabalho Atual

Segundo diversas pesquisas internacionais (que eu perdi as fontes), existe uma demanda muito maior no mercado de software do que no de hardware. Isso não sou eu quem estou falando, são especialistas pelo mundo inteiro. Desta forma, já vemos que o mercado é mais favorável aos programadores no que tange ao número de vagas disponíveis.

Dentre os desenvolvedores, existem diversas pesquisas (também) que enumeram as linguagens de programação mais utilizadas no mundo em diversos segmentos, e se tem duas que aparecem independente da plataforma escolhida (web, desktop, mobile, etc) são Java e C#. Não obstante, Java e C# são as linguagens que possuem as melhores médias salariais do mercado de trabalho (olhe no Glassdoor). Mas já que é muito difícil e demorado ficar bom nas duas, você terá que optar por uma se quiser ingressar no mercado o mais rápido possível e começar a disputar vagas de verdade e largar a vida de micreiro ou “fazedor de sites”.

Desta forma, com um rápido e lógico raciocínio, porque não voltar seu tempo livre ao estudo de uma dessas linguagens que possuem o maior número de vagas e maiores salários?

Já programei as duas linguagens e embora cada uma tenha seus pontos fortes optei pela linguagem C#, que me deu um retorno financeiro mais rápido e hoje possuo uma segurança enquanto profissional de saber que com meus conhecimentos nesta linguagem só fico desempregado se eu quiser (como quando decidi largar tudo para empreender). Mas como aprender C# para ingressar no mercado de desenvolvimento de software?

O que vou precisar?

Não, este post não vai te ensinar a programar em C#.

Isso porque a Microsoft já se encarrega de te fornecer tudo que você precisa para aprender, como os softwares, os treinamentos e a base de conhecimento. Basta ter a disciplina e vontade de aprender. C# é uma linguagem de programação com uma curva de aprendizagem baixa. O C# básico é claro. Mas vamos ao que interessa: o que eu preciso para programar em C# além de disciplina e vontade?

Primeiro de tudo: você precisa de um Ambiente Integrado de Desenvolvimento (IDE). A recomendação é que utilize o Microsoft Visual Studio mais recente que você encontrar no site da Microsoft. Uma vez que você esteja aprendendo, existem duas formas de obter esta ferramenta gratuitamente sem apelar para a pirataria. A primeira e mais fácil, é baixar a versão Community do Visual Studio, disponível no link: Visual Studio 2017

A versão Community possui tudo que um iniciante precisa. Se for muito pesada para a sua máquina, de repente o Visual Studio Code é mais indicado pra você.

A outra opção, é a de obter uma licença de estudante através do Microsoft Dream Spark. O Dream Spark é um programa da Microsoft onde estudantes de todo o mundo, devidamente matriculados, podem baixar a versão full de seus softwares de desenvolvimento e infraestrutura gratuitamente. Basta se cadastrar no site e comprovar sua situação de estudante (de alguma faculdade conveniada) para fazer download. Segue o link do Dream Spark: https://www.dreamspark.com

Mais tarde você irá precisar de um servidor de banco de dados também. Ok, você não precisa baixar e instalar isso agora, mas já deixo a dica para utilizar o fantástico Microsoft SQL Server Express, que é gratuito. Segue o link para download do dito-cujo: https://www.microsoft.com/pt-br/sql-server/sql-server-editions-express

Aprendendo C#

Agora que você já tem as ferramentas necessárias para desenvolver C#, faltam bons instrutores.

A menos que você more na região metropolitana de Porto Alegre/RS e queira fazer algum curso comigo em Gravataí/RS, você terá de encontrar outra forma de aprender C#. Se existir um Centro de Inovação Microsoft próximo da sua casa, consulte a disponibilidade de cursos deles, como o excelente Students to Business.

Grandes escolas profissionalizantes dão cursos de C# a custos exorbitantes, quando com um pouco de disciplina e dedicação você aprende sozinho e em casa, bastando as ferramentas que citei anteriormente e uma conexão com a Internet.

Por que Internet? Porque a Microsoft disponibiliza online excelentes treinamentos para formar desenvolvedores auto-didatas, tudo gratuito.

O Microsoft Virtual Academy é o melhor deles atualmente, embora seja bem iniciante e com poucos materiais em Português. Através do site, o aluno vê video-tutoriais sobre vários tópicos envolvendo desenvolvimento de software sobre a plataforma .NET. O aluno deve assistir aos vídeos recriando em sua máquina os passos que o instrutor demonstra e em alguns dias ele já sai programando sozinho. O mais legal do MVA são as certificações que ele disponibiliza ao fim de cada módulo, para o aluno validar seus conhecimentos.

O Channel 9 é o canal de desenvolvimento da comunidade Microsoft, com muito, mas muito material em diversos idiomas, mas principalmente em Inglês. A vantagem é que como ele possui legendas para os vídeos, fica mais fácil de acompanhar mesmo para quem não é fluente no idioma.

E por fim, tem o MSDN Magazine, revista digital (e impressa) de desenvolvimento sobre plataforma Microsoft. Infelizmente tanto ela quanto o Channel 9 não possuem uma estrutura de cursos que nem o Microsoft Virtual Academy, por isso que sugeri ele primeiro. A vantagem é que o Channel 9 é muito mais atualizado em termos de novas tecnologias, incluindo o novíssimo .Net Core.

Antigamente eu sugerir também o programa MSDN Experience, que não existe mais. No entanto, guardei alguns vídeos deles no meu canal do Youtube. São vídeos velhos, usando Visual Studio 2005, mas de repente podem te ajudar.

Mais Informações

Ok, os treinamentos acima não cobrem 100% das dúvidas de um iniciante em C#. Mas não se desespere, além de poder me mandar e-mails com dúvidas através da página de Contato, você ainda conta como excelentes fontes de conhecimento na web, a saber:

  • Google: sim, todo bom programador sabe usar o Google no seu dia-a-dia. Não esqueça de incluir a palavra C# sempre em suas buscas para filtrar melhor os resultados e de preferência, pesquise em Inglês.
  • MSDN: a Microsoft Developer Network possui toda a documentação oficial de todas as classes, métodos, propriedades e etc da plataforma .NET. Acho que pecam apenas pela falta de exemplos, mas em termos de documentação são muito bons. O fórum deles soluciona muitas dúvidas também, vale a pena se registrar.
  • CodeProject: o CodeProject é simplesmente muito bom. Lá tem muitos artigos e fontes para download de praticamente tudo que alguém pode querer desenvolver nos estágios iniciais de sua carreira como desenvolver. Guarde nos seus favoritos.
  • CodePlex: este site é o repositório open-source da Microsoft para projetos na plataforma .NET. Altamente recomendado, embora eles estejam migrando para o Git atualmente.
  • StackOverflow: muitas e muitas dúvidas de ASP.NET e C# solucionada pelos membros do site. Recomendadíssimo.
  • Egg Head Cafe: apesar do nome estranho, um ótimo lugar para tirar dúvidas e encontrar soluções.
  • .NET Perls: um site bem legal também.

Se eu lembrar de mais algum, eu posto depois.

Introdução ao .NET Core

Já tem algum tempo que ouço burburinhos a respeito da mais nova versão da plataforma .NET, a .NET Core. Inicialmente era apenas uma versão 5 da tradicional plataforma de desenvolvimento para Windows, depois começaram a falar sobre suporte multi-plataforma e um tal de .NET vNext. Recentemente parece que estabilizaram tudo em um tal de .NET Core que rodaria em qualquer plataforma, seria uma versão “capada” do framework, muito mais leve e veloz, open-source, que não precisa de Visual Studio e muitas outras coisas interessantes…

Eu estou longe de ser um early adopter (detesto betas…) mas uma vez que as “boas notícias” acerca da plataforma não param de surgir, eu tive de fazer alguma coisa a respeito. Eu tive de estudar .NET Core.

E não me arrependi.

Hoje trago um resumo do que pude perceber a partir de diversos vídeos, tutoriais e é claro, coloquei a mão na massa testando a plataforma.

Neste artigo você vai ver:

  1. O que é?
  2. Para quê serve?
  3. Como eu programo?
  4. Olá Mundo!
  5. Indo em frente

O que é?

O .NET Core não é a nova versão do .NET como eu imaginava. É um novo .NET, uma bifurcação no desenvolvimento da plataforma. Enquanto o .NET 4.6 segue o seu caminho normal, o .NET Core inicia uma nova jornada.

Se é que é possível resumir em uma frase, o .NET Core é: uma plataforma de desenvolvimento modular, open-source, para múltiplos sistemas operacionais e fundamentada na linguagem C#.

Por modular entenda que não há mais a necessidade de ter o .NET Framework “full” instalado na máquina onde seu sistema irá rodar. Você começa um projeto com apenas as bibliotecas mais básicas do runtime e vai adicionando mais módulos conforme a necessidade. Através de um sistema de gerenciamento de dependências (NuGet), em qualquer máquina que seu sistema for rodar, as bibliotecas serão baixadas automaticamente pela Internet, permitindo inclusive múltiplas configurações diferentes em cada máquina uma vez que são independentes.

Por open-source entenda que o projeto é mantido pela Microsoft, mas que a mesma disponibilizou os fontes no Github e tem se mostrado bem aberta à discussões e contribuições ao mesmo.

Por “múltiplos sistemas operacionais” entenda que, no momento que escrevo este post, já há suporte para Windows, Mac e diversas distribuições Linux, sendo que em breve devemos ter suporte a outras plataformas como Smart TVs, por exemplo. Além disso, há o suporte à Docker, que proporciona uma melhor compatibilidade com as nuvens computacionais atuais.

Para quê serve?

Você pode criar aplicações multiplataformas para console e web com o .NET Core, bem como bibliotecas de classes com C#. Não há Windows Forms aqui, Universal Windows Apps ou Windows Phone Apps, esses tipos de softwares continuam como estão, até onde pude entender.

No momento não se recomenda a migração de sistemas escritos no .NET 4.6 para o .NET Core, pois muitas das bibliotecas antigas não existem na plataforma, bem como não há compatibilidade com bibliotecas C# de terceiros. E mesmo para sistemas novos que venham a exigir um alto desempenho e escala ainda não está se recomendando utilizar a plataforma por ela ainda ser muito recente e imatura em relação à sua antecessora.

Os benchmarks mostram ganhos expressivos de velocidade frente a outras plataformas, mas ainda é cedo para apostar todas as suas fichas na plataforma, que está evoluindo rápido, mas precisa de muita coisa ainda.

Existe uma camada de bibliotecas compartilhadas chamada .NET Standard Library que ainda está em desenvolvimento e que permitirá uma maior compatibilidade entre as duas versões de .NET mais recentes (.NET 4.6 e .NET Core) e que permitirá também, um suporte à mais aplicações. A previsão é que a versão 2.0 da Standard Library, prevista para 2017/Q3 nos traga mais boas notícias neste sentido.

Via de regra, se você ainda for permanecer apenas com servidores Windows, não há um real motivo para migrar. Por enquanto.

Como eu programo?

A primeira notícia interessante em relação ao .NET Core é que ele funciona completamente via linha de comando. Eu não sou fã de linha de comando, mas o que isso traz é muito interessante: maior suporte a editores de texto como VIM, Sublime, Visual Studio Code, OmniSharp e muito mais. Resumindo: você não precisa mais ter o Visual Studio na sua máquina para programar .NET Core. Logo agora que a Microsoft está lançando o VS para Mac
Para quem ainda for usar o VS, estão acontecendo algumas confusões em relação ao wizard de novo projeto, onde você pode escolher rodar o .NET Core no .NET Framework ou rodar o .NET Core no .NET Core.

Como assim?

Como o .NET Core é uma versão capada do .NET Framework, há esse tipo de compatibilidade. No entanto, vale lembrar que somente há VM de .NET Framework para Windows, sendo assim, não vale a pena usar .NET Core rodando no .NET Framework se você gostaria de usar outros SOs. Você ganha em confiança da plataforma mais madura, mas perde em interoperabilidade.

Olá Mundo!

Para fazer um olá mundo com .NET Core é muito fácil. Nem parece a mesma plataforma Microsoft que comecei a ver lá em 2007. 🙂

Primeiro, acesse o site oficial e baixe a versão do utilitário de linha de comando para seu sistema operacional. Instale após baixar. Obviamente. 😐

Depois, abra seu terminal e digite a seguinte linha de comando para criar um novo projeto console na sua pasta atual:

Isso irá criar a pasta do projeto com todo o básico para o Olá Mundo dentro.

Antes de rodar, primeiro você deve restaurar as dependências desse projeto. Para isso, entre na pasta do projeto pelo terminal e mande rodar o seguinte comando:

Isso irá baixar as dependências externas localmente, deixando tudo pronto para rodar. Ainda dentro da pasta do projeto, execute o comando abaixo para executá-lo:

Isso irá compilar o projeto e executá-lo. Caso não exista nada errado, a mensagem de olá mundo será impressa no console.

Note que rodei estes comandos no Mac. Funciona perfeitamente!

Experimente agora criar um projeto web, usando o seguinte comando (lembrando de sair do projeto console):

Entre na pasta do projeto, execute o “dotnet restore” e o “dotnet run”e após o servidor subir, abra seu navegador e digite localhost:5000 para ver o site MVC de exemplo que ele criou para você.

Indo em Frente

O utilitário de linha de comando possui o comando –help que lhe traz toda uma documentação sobre cada um dos comandos e opções existentes, e tem sido muito útil para que eu possa aprender diversas coisas como criar Solutions, adicionar projetos em Solutions, compilar projetos, criar diferentes boilerplates e por aí vai.

Obviamente ficar fazendo tudo assim via linha de comando na tentativa e erro não vai levar você muito longe e escrever sistemas usando Nano (que é o editor que eu uso no terminal) não é muito prático. Você pode optar por se manter com o Visual Studio, a versão Community é gratuita e bem completa, mas consome muito recurso de máquinas modestas. Outra sugestão é baixar e instalar o Visual Studio Code, um editor de texto também da Microsoft mas com as features essenciais que você deve precisar como debug, integração com Github, um marketplace rico de extensões para diversas linguagens e suporte a Mac, Windows e Linux.

Escolha seu editor de texto favorito e acompanhe os tutoriais oficiais no site da Microsoft. De minha parte, pretendo colocar alguns posts ocasionais sobre a plataforma, que tem dividido a minha atenção atualmente com Node.js.

Ah, antes que eu me esqueça: estamos trabalhando com .NET Core em alguns projetos da Umbler e já disponibilizamos suporte à plataforma para o plano Cloud Sites (ambiente virtualizado dedicado). Caso tenha interesse em hospedar algum projeto.

Seguem os slides que usei no vídeo desse post: