TudoSobre.dev

O universo dev ao seu alcance.

TudoSobre.dev

O universo dev ao seu alcance.

Author : bragil

Guia de programação assíncrona em C#

“A programação assíncrona existe há vários anos na plataforma .NET, mas historicamente tem sido muito difícil de fazer bem. Desde a introdução de async/await em C# 5, a programação assíncrona se tornou popular. Frameworks modernos (como ASP.NET Core) são totalmente assíncronos e é muito difícil evitar a palavra-chave async ao escrever serviços web. Como resultado, tem havido muita confusão sobre as melhores práticas para async e como usá-lo corretamente. Esta seção tentará estabelecer algumas orientações com exemplos de padrões bons e ruins de como escrever código assíncrono.” (por David Fowler)


Acesse: 🔗C# Async Guidance (inglês)

Apache Kafka e .Net: como produzir e consumir mensagens

O Apache Kafka é uma ferramenta útil em vários cenários, como integrações de sistemas, processamento assíncrono, processamento de streams, microsserviços, etc. Bastante usado por muitas empresas, possui uma vasta comunidade. Neste artigo, vamos ver como usar o Apache Kafka no .Net, com exemplos de produção e consumo de mensagens.

Continue lendo “Apache Kafka e .Net: como produzir e consumir mensagens”

Validação de CPF de alta performance usando Span<T>

O tipo Span<T> surgiu no .Net Core 2.1, na versão 7.2 da linguagem C#. Trata-se de um recurso que alavancou a performance de aplicações .Net, e seu uso traz um ganho enorme de performance e economia no uso de memória pela aplicação. Neste artigo, vamos revisitar a validação de CPF usando o tipo Span<T>, e veremos através de um benchmark a diferença entre as duas versões do algoritmo.

Continue lendo “Validação de CPF de alta performance usando Span<T>”

Tipos genéricos em C# – porque e como

O conceito de tipos genéricos (generic types) existe na grande maioria das linguagens de programação, e não é diferente em C#. Basicamente, torna possível que uma classe ou um método possa trabalhar com dados de um conjunto de tipos sem a necessidade de criar um código específico para cada um, o que favorece o reuso de código, facilita a construção de testes unitários e diminui a ocorrência de bugs (quanto menos código, menor a chance de bugs).

Continue lendo “Tipos genéricos em C# – porque e como”

Null, o erro de um bilhão de dólares – parte 2

Na parte 1 falamos sobre os problemas das referências nulas, e também sobre as funções puras e impuras. Começamos a falar sobre monads, e os benefícios que este pattern traz. Vimos também a definição mínima de um tipo monad.

Continue lendo “Null, o erro de um bilhão de dólares – parte 2”

Null, o erro de um bilhão de dólares

Implementada por muitas linguagens de programação, é fato absoluto que a referência nula (null, Nothing, nil, etc) causou e causa muitas dores de cabeça, tanto nos programadores quanto nos usuários. Quem nunca tomou uma NullPointerException em Java, ou uma NullReferenceException em C#? E os ponteiros nulos de C/C++ então?


O próprio criador do null, Tony Hoare, reconheceu o problema e o chamou de “erro de um bilhão de dólares”:

“I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn’t resist the temptation to put in a null reference, simply because it was so easy to implement. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years”.

Continue lendo “Null, o erro de um bilhão de dólares”

[PostgreSQL] Paginação no PostgreSQL, simples e rápido

Trabalhar com paginação no PostgreSQL é bastante simples e é um recurso que colabora muito com a otimização de consultas que podem retornar muitos registros. Basicamente são usadas as palavras-chave LIMIT e OFFSET.

Continue lendo “[PostgreSQL] Paginação no PostgreSQL, simples e rápido”

[C#] Operações de agregação em coleções – Sum, Count, Average, etc

Diferente das operações que já vimos, uma operação de agregação (ou redução) sobre uma coleção resulta em um único valor. A API System.Linq possui vários métodos de agregação pré-prontos, como Sum, Count, LongCount, Average, Max e Min, assim como o Aggregate (mais genérico).

Obs: o método Aggregate é conhecido como reduce em outras linguagens.

Continue lendo “[C#] Operações de agregação em coleções – Sum, Count, Average, etc”

[C#] Projeção de coleções – Select e SelectMany

Após aprender como filtrar dados de coleções em C#, vamos continuar explorando os operadores funcionais de System.Linq. Agora vamos aprender como efetuar a projeção de coleções.

Os métodos Select e SelectMany possibilitam que uma determinada coleção seja projetada (transformada) em uma coleção diferente, através da aplicação de uma função em cada elemento desta. Em outras linguagens e plataformas, o equivalente ao Select é o map, e o equivalente ao SelectMany é o flatMap.

Continue lendo “[C#] Projeção de coleções – Select e SelectMany”
Rolar para o topo