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.
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).
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.
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”:
Continue lendo “Null, o 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”.
[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.
[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.
[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.
[C#] Filtrando dados de coleções (Where)

Depois de aprender o que são e como funcionam as expressões lambda, vamos mostrar como manipular coleções de dados usando as operações da API de System.Linq. De início, uma das operações mais usadas em coleções: filtragem de dados.
Expressões Lambda em C# – o básico

Apesar de existirem no C# desde a versão 3.0, muitas pessoas têm dúvidas sobre o que são as expressões lambda.
Então, respondendo rápido, expressões lambda são funções anônimas expressas em uma sintaxe mais simples.
Basicamente, uma expressão lambda possui duas partes:
(x, y) => x + y;
____ _____
| |
| corpo da função
parâmetros
Continue lendo “Expressões Lambda em C# – o básico”