Programação Funcional Com C#
()
Sobre este e-book
Leia mais títulos de Jideon Francisco Marques
Hoodoo Para Iniciantes Nota: 5 de 5 estrelas5/5Alquimia Da Beleza Natural Nota: 0 de 5 estrelas0 notasUm Livro Completo De Cura Reiki Nota: 0 de 5 estrelas0 notasProgramação Python Ilustrada Para Iniciantes E Intermediários: Abordagem “aprenda Fazendo” – Passo A Passo Nota: 0 de 5 estrelas0 notasExercício De Lifting Facial Nota: 0 de 5 estrelas0 notasHiit De 15 Minutos Para Mulheres Nota: 4 de 5 estrelas4/5Como Fazer Animais Amigurumi Nota: 0 de 5 estrelas0 notasO Livro Completo De Molhos Para Massas Nota: 5 de 5 estrelas5/5Karma Do Signo Solar Nota: 5 de 5 estrelas5/5Mudras Para A Vida Moderna Nota: 5 de 5 estrelas5/5Habilidades De Atenção Plena Para Trauma E Tept Práticas Para Recuperação E Resiliência Nota: 0 de 5 estrelas0 notasFitoterapia Faça Você Mesmo Nota: 0 de 5 estrelas0 notasNervo Vago 2 Livros Em 1 Nota: 0 de 5 estrelas0 notasBruxaria Cotidiana Nota: 5 de 5 estrelas5/5Sambo Nota: 5 de 5 estrelas5/5Receitas Fáceis De Ayurveda Nota: 0 de 5 estrelas0 notasFerramentas De Eft Nota: 0 de 5 estrelas0 notasLivro De Receitas De Bolos Europeus Nota: 0 de 5 estrelas0 notasTui Na Manual De Massagem Chinesa Nota: 0 de 5 estrelas0 notas365 Dias Com Autodisciplina Nota: 0 de 5 estrelas0 notasDesenho Fácil Nota: 5 de 5 estrelas5/5Tricotar Em Pouco Tempo Nota: 0 de 5 estrelas0 notasEletrônica Básica Nota: 0 de 5 estrelas0 notasAntibióticos À Base De Plantas Nota: 0 de 5 estrelas0 notasMagia Do Amor Nota: 0 de 5 estrelas0 notasBolos E Biscoitos Artesanais Receitas Selecionadas Nota: 1 de 5 estrelas1/5Aprenda Hackear Como Uma Lenda Nota: 0 de 5 estrelas0 notasFibromialgia Seu Guia De Tratamento Nota: 0 de 5 estrelas0 notasTreinamento De Força Acima Dos 40 Nota: 0 de 5 estrelas0 notas
Relacionado a Programação Funcional Com C#
Ebooks relacionados
Lógica De Programação Javascript Nota: 0 de 5 estrelas0 notasSistemas Orientados a Objetos: Conceitos e Práticas Nota: 0 de 5 estrelas0 notasPython Em 30 Dias Nota: 0 de 5 estrelas0 notasSeu Primeiro Ano De Programação Nota: 0 de 5 estrelas0 notasEntrega contínua em Android: Como automatizar a distribuição de apps Nota: 0 de 5 estrelas0 notasRSpec: Crie especificações executáveis em Ruby Nota: 0 de 5 estrelas0 notasZend Certified Engineer: Descomplicando a certificação PHP Nota: 0 de 5 estrelas0 notasCurso Intensivo Em Golang Nota: 0 de 5 estrelas0 notasRobot framework: Automação versátil e consistente para testes Nota: 0 de 5 estrelas0 notasCodeIgniter: Produtividade na criação de aplicações web em PHP Nota: 0 de 5 estrelas0 notasComo se faz DevOps: Organizando pessoas, dos silos aos times de plataforma Nota: 0 de 5 estrelas0 notasCarreira técnica no universo da programação: Desvendando depois do sênior e além Nota: 0 de 5 estrelas0 notasFramework Php Laravel 8 & Ajax Nota: 0 de 5 estrelas0 notasCódigo Limpo Em Php Nota: 0 de 5 estrelas0 notasProgramação Para Internet Nota: 0 de 5 estrelas0 notasMezzio e PHP 7: Uma união poderosa para criação de APIs Nota: 2 de 5 estrelas2/5Xamarin Forms e MVVM: Persistência local com Entity Framework Core Nota: 0 de 5 estrelas0 notasIntrodução A Delphi Com Banco De Dados Firebird Nota: 0 de 5 estrelas0 notasSwift: Programe para iPhone e iPad Nota: 0 de 5 estrelas0 notasAplicações mobile híbridas com Cordova e PhoneGap Nota: 0 de 5 estrelas0 notasCucumber e RSpec: Construa aplicações Ruby com testes e especificações Nota: 0 de 5 estrelas0 notasRedmine: Gerenciamento flexível de projetos Nota: 0 de 5 estrelas0 notasProtractor: Lições sobre testes end-to-end automatizados Nota: 0 de 5 estrelas0 notasDelphi para Android e iOS: Desenvolvendo Aplicativos Móveis Nota: 0 de 5 estrelas0 notasDesenvolvedor De Back-end Em 30 Dias Nota: 0 de 5 estrelas0 notasJPA Eficaz: As melhores práticas de persistência de dados em Java Nota: 0 de 5 estrelas0 notasDo PHP ao Laminas: Domine as boas práticas Nota: 3 de 5 estrelas3/5Xamarin Forms: Desenvolvimento de aplicações móveis multiplataforma Nota: 0 de 5 estrelas0 notasJavaScript: Um Guia para Aprender a Linguagem de Programação JavaScript Nota: 5 de 5 estrelas5/5
Administração de Sistemas para você
O Que Os Pobres Não Sabem Sobre Os Ricos Nota: 5 de 5 estrelas5/5Kubernetes: Tudo sobre orquestração de contêineres Nota: 5 de 5 estrelas5/5Guia prático do servidor Linux: Administração Linux para iniciantes Nota: 4 de 5 estrelas4/5Começando com o Linux: Comandos, serviços e administração Nota: 4 de 5 estrelas4/5100 dicas de ouro - Gestão de pessoas Nota: 0 de 5 estrelas0 notasIntrodução Às Redes De Computadores: Modelos Osi E Tcp/ip Nota: 0 de 5 estrelas0 notasConfiguração De Roteadores E Switches Cisco Nível Básico Nota: 0 de 5 estrelas0 notasAprenda Hackear Como Uma Lenda Nota: 0 de 5 estrelas0 notasFalando Aos 52 Computadores Do Carro Moderno Nota: 0 de 5 estrelas0 notasIntrodução Às Redes Wan: Redes De Computadores De Longa Distância Nota: 0 de 5 estrelas0 notasApostila Noções De Informática Nota: 0 de 5 estrelas0 notasGestão Na Tecnologia Da Informação Nota: 0 de 5 estrelas0 notasLinguagens De Programação Em Inteligência Artificial Nota: 0 de 5 estrelas0 notasCódigo Limpo Em Php Nota: 0 de 5 estrelas0 notasMetodologia E Engenharia De Requisitos Para Projetos De Business Intelligence Nota: 0 de 5 estrelas0 notasFundamentos Do Microsoft Azure Nota: 0 de 5 estrelas0 notasProgramação Python E Aprendizado De Máquina Nota: 0 de 5 estrelas0 notasApostila Introdução À Comunicação De Dados E Redes De Computadores Nota: 0 de 5 estrelas0 notasFundamentos De Telecomunicações E Comunicação De Dados Nota: 5 de 5 estrelas5/5Robótica Móvel Com Arduino Nota: 0 de 5 estrelas0 notasInvestigação Digital E Rastreamento De Dados Nota: 0 de 5 estrelas0 notasRedes De Computadores Descomplicadas Nota: 0 de 5 estrelas0 notasLinux para principiantes Nota: 0 de 5 estrelas0 notasAlgoritmos: 3 Livros Em 1: Nota: 0 de 5 estrelas0 notasComo Criar Sub-redes Em Redes Ip Nota: 0 de 5 estrelas0 notasAprendendo Vue Nota: 0 de 5 estrelas0 notasGestão e Produção de Eventos: Da Ideia à Avaliação Nota: 0 de 5 estrelas0 notasGuia Rápido Kubernetes Nota: 0 de 5 estrelas0 notasFundamentos De Redes De Computadores: 1000 Questões Resolvidas E Comentadas Nota: 0 de 5 estrelas0 notasPython Em Poucas Palavras Nota: 0 de 5 estrelas0 notas
Avaliações de Programação Funcional Com C#
0 avaliação0 avaliação
Pré-visualização do livro
Programação Funcional Com C# - Jideon Francisco Marques
Programação Funcional com C#
Programação Funcional com C#
Crie código mais suportável, robusto e testável
Por Jideon F. Marques
© Copyright 2022 Jideon Marques - Todos os direitos reservados.
O conteúdo deste ebook não pode ser reproduzido, duplicado ou transmitido sem permissão direta por escrito do autor ou do editor.
Sob nenhuma circunstância qualquer culpa ou responsabilidade legal será imputada ao editor, ou autor, por quaisquer danos, reparações ou perdas monetárias devido às informações contidas neste ebook, direta ou indiretamente.
Notícia legal:
Este ebook é protegido por direitos autorais. É apenas para uso pessoal. Você não pode alterar, distribuir, vender, usar, citar ou parafrasear qualquer parte ou o conteúdo deste ebook sem o consentimento do autor ou editor.
Aviso de isenção de responsabilidade:
Observe que as informações contidas neste documento são apenas para fins educacionais e de entretenimento. Todo esforço foi feito para apresentar informações precisas, atualizadas, confiáveis e completas. Nenhuma garantia de qualquer tipo é declarada ou implícita. Os leitores reconhecem que o autor não está envolvido na prestação de aconselhamento jurídico, financeiro, médico ou profissional. O conteúdo deste ebook foi derivado de várias fontes. Consulte um profissional médico licenciado antes de tentar este programa ou qualquer técnica descrita neste ebook.
Ao ler este documento, o leitor concorda que em nenhuma circunstância o autor é responsável por quaisquer lesões, morte, perdas, diretas ou indiretas, que sejam incorridas como resultado do uso das informações contidas neste documento, incluindo, mas não limitado a a, erros, omissões ou imprecisões.
Prefácio
Quem deveria ler esse livro?
Por que escrevi este livro
Navegando neste livro
Convenções utilizadas neste livro
Usando exemplos de código
Dedicação
1. Introdução
O que é Programação Funcional?
É uma linguagem, uma API ou o quê?
As Propriedades da Programação Funcional
Assar bolos
Um bolo imperativo
Um bolo declarativo
De onde vem a programação funcional?
Quem mais faz programação funcional?
Linguagens Funcionais Puras
Vale a pena aprender uma linguagem funcional pura primeiro?
E o F#? Devo aprender F#?
Linguagens de vários paradigmas
Os benefícios da programação funcional
Conciso
Testável
Robusto
Previsível
Melhor suporte para simultaneidade
Reduzir ruído de código
Os melhores lugares para usar a programação funcional
Onde você deve considerar o uso de outros paradigmas?
Até onde podemos levar isso?
Mônadas - Na verdade, não se preocupe com isso ainda
Resumo
2. O que já podemos fazer?
Começando
Seu primeiro código funcional
Uma consulta de filme não funcional
Uma consulta de filme funcional
Programação Orientada a Resultados
Algumas palavras sobre Enumerables
Prefira Expressões a Declarações
A Seleção Humilde
Muitos para um - A arte sutil da agregação
Comportamento de iteração personalizado
Imutabilidade
Juntando tudo - um fluxo funcional completo
Indo além - Desenvolva suas habilidades funcionais
Resumo
3. Codificação funcional em C# 7 e além
Tuplas
Correspondência de padrões
Contas Bancárias Processuais
Correspondência de padrões em C# 7
Correspondência de padrões em C# 8
Correspondência de padrões em C# 9
Correspondência de padrões em C# 10
C# 11
Sindicatos Discriminados
Padrões ativos
Imutabilidade
Estruturas somente leitura
Init apenas setters
Tipos de registro
Tipos de referência anuláveis
O futuro
Resumo
4. Trabalhe de forma inteligente, não difícil com o código funcional
Let's get Func-y
Funções em enumeráveis
Um validador super simples
Correspondência de padrões para versões antigas do C#
Filtragem Funcional
Torne os dicionários mais úteis
Analisando valores
Enumerações personalizadas
Consultar Elementos Adjacentes
Iterar até que uma condição seja atendida
Conclusão
5. Funções de ordem superior
Um relatório de problemas
Thunks
Combinador de mapas
Combinador de garfo
Compor
Transduzir
Toque
Tentar/Pegar
A não ser que
Atualizar um enumerável
Conclusão
6. Sindicatos Discriminados
Feriado
Feriados com Sindicatos Discriminados
Sindicato de Schrödinger
Convenções de nomenclatura
Pesquisa de banco de dados
Enviando email
Entrada do console
Uniões genéricas
Pode ser
Resultado
Talvez vs Resultado
Qualquer
Conclusão
7. Fluxo Funcional
Talvez, revisitado
Talvez e Depuração
Talvez e Logando
Talvez e Assíncrono
Talvez aninhados
As leis
Lei de Identidade Esquerda
Lei de Identidade Direita
Lei da associatividade
Exemplos Você já está usando
Enumerável
Tarefa
Outras estruturas
Um exemplo trabalhado
Conclusão
8. Cura e Aplicação Parcial
Currying e grandes funções
Currying e funções de ordem superior
Curry em .NET
Aplicação Parcial
Aplicação parcial em .NET
Conclusão
Prefácio
A Programação Funcional não é apenas uma das maiores inovações da história do desenvolvimento de software, também é legal. Divertido também. Não só isso, mas está ganhando força ano após ano.
Eu participo de conferências de desenvolvedores sempre que posso e notei uma tendência. A cada ano, parece haver sempre mais conteúdo sobre programação funcional, não menos. Muitas vezes, há até uma faixa inteira dedicada a ele, e as outras palestras geralmente incluem conteúdo funcional em algum lugar como um ponto de discussão nos dias de hoje.
É lenta, mas seguramente, tornando-se um grande negócio. Por que é que?
Com o crescimento de conceitos como conteinerização e aplicativos serverless, o Functional não é apenas um pouco de diversão para os projetos de tempo livre do desenvolvedor, não é uma moda que será esquecida em alguns anos, tem benefícios reais para trazer aos nossos stakeholders .
A grande questão, porém - o que é isso? E, vou precisar aprender uma linguagem de programação totalmente nova apenas para poder usá-la? A boa notícia é que, se você é um desenvolvedor .NET, não precisa gastar muito tempo aprendendo uma nova tecnologia apenas para se manter atualizado - nem precisa investir em outra biblioteca de terceiros para adicionar às dependências do seu aplicativo - tudo isso é possível com código c# pronto para uso - embora com um pouco de ajustes.
Este livro apresentará todos os conceitos fundamentais da Programação Funcional, demonstrará seus benefícios e como eles podem ser alcançados em C# - não apenas para seu próprio hobby de programação, mas com uma visão muito real de como eles podem ser usados para trazer benefício para a sua vida profissional também.
Quem deveria ler esse livro?
Este livro foi escrito com algumas categorias diferentes de pessoas em mente:
Navegando neste livro
Foi assim que organizei este livro:
A introdução fala sobre o que é exatamente a Programação Funcional, de onde ela vem e por que qualquer um de nós deveria se interessar por ela. Argumento que isso traz benefícios comerciais significativos para nossos empregadores e que é uma habilidade que vale a pena adicionar ao seu cinturão de ferramentas de desenvolvedor.
Sinta-se à vontade para mergulhar no nível para o qual se sente pronto. Isso não é uma novela1, leia os capítulos na ordem que fizer sentido para você.
Convenções utilizadas neste livro
As seguintes convenções tipográficas são usadas neste livro:
itálico
Indica novos termos, URLs, endereços de e-mail, nomes de arquivo e extensões de arquivo.
Largura constante
Usado para listagens de programas, bem como dentro de parágrafos para se referir a elementos de programa, como nomes de variáveis ou funções, bancos de dados, tipos de dados, variáveis de ambiente, instruções e palavras-chave.
Largura constante em negrito
Mostra comandos ou outro texto que deve ser digitado literalmente pelo usuário.
Largura constante em itálico
Mostra o texto que deve ser substituído por valores fornecidos pelo usuário ou por valores determinados pelo contexto.
Dica
Este elemento significa uma dica ou sugestão.
Observação
Este elemento significa uma nota geral.
Aviso
Este elemento indica um aviso ou cuidado.
Usando exemplos de código
Material suplementar (exemplos de código, exercícios, etc.) está disponível para download emhttps://github.com/oreillymedia/title_title.
Capítulo 1 Introdução
Se você aprendeu muita programação antes - seja em C#, Visual BASIC, Python ou qualquer outra coisa - então é provável que o que você aprendeu foi baseado no paradigma de programação que é atualmente o mais dominante - Orientado a Objetos.
A codificação orientada a objetos existe há muito tempo. A data precisa é uma questão para debate, mas provavelmente foi inventada em algum lugar por volta do final dos anos 50 e início dos anos 60.
A codificação orientada a objetos é baseada na ideia de agrupar conjuntos de propriedades e funcionalidades em blocos lógicos de código chamados Classes, que são usados como uma espécie de modelo a partir do qual instanciamos Objetos. Há muito mais do que isso: herança, polimorfismo, funções virtuais e abstratas. Todo tipo de coisa assim.
No entanto, este não é um livro Orientado a Objetos. Na verdade, se você já tem experiência com OO, provavelmente obterá mais deste livro se deixar de lado o que já sabe.
O que vou descrever neste livro é um estilo de programação que serve como uma alternativa à OO - programação funcional. A Programação Funcional, apesar de ganhar algum reconhecimento popular nos últimos anos, é na verdade tão antiga - se não mais velha - que a OO. É baseado em princípios matemáticos que foram desenvolvidos por várias pessoas entre o final dos anos 1800 e 1950, e tem sido uma característica de algumas linguagens de programação desde os anos 1960.
Neste livro, mostrarei como implementá-lo em C# sem a necessidade de aprender uma linguagem de programação totalmente nova.
Antes de começarmos a quebrar com algum código, eu gostaria de falar primeiro sobre a Programação Funcional em si. O que é isso? Por que devemos nos interessar? Quando é melhor usado. Todas perguntas muito importantes.
O que é Programação Funcional?
Existem alguns conceitos básicos em Programação Funcional, muitos dos quais têm nomes bastante obscuros para o que de outra forma não são conceitos muito difíceis de entender. Vou tentar colocá-los aqui da maneira mais simples possível.
É uma linguagem, uma API ou o quê?
Não, a Programação Funcional não é uma linguagem ou uma biblioteca de plug-ins de terceiros no Nuget, é um paradigma. O que quero dizer com isso? Existem definições mais formais de paradigmas, mas acho que é um estilo de programação. Como uma guitarra pode ser usada exatamente como o mesmo instrumento, mas para tocar muitos estilos de música, muitas vezes muito diferentes, também algumas linguagens de programação oferecem suporte para diferentes estilos de trabalho.
A programação funcional também é tão antiga quanto a codificação orientada a objetos - se não for mais antiga. Falarei mais sobre suas origens mais tarde, mas, por enquanto, esteja ciente de que não é nada novo, e a teoria por trás disso não apenas antecede a OO, mas também a própria indústria de computação.
Também vale a pena notar que você pode combinar paradigmas, como misturar rock e jazz. Não só eles podem combinar, mas há momentos em que você pode usar os melhores recursos de cada um para produzir um melhor resultado final.
Paradigmas de programação vêm em muitos, muitos sabores1mas para simplificar vou falar apenas dos dois mais comuns na programação moderna:
Imperativo
Este foi o único tipo de paradigma de programação por muito tempo. Procedimental e Orientado a Objetos (OO) pertencem a esta categoria. Esses estilos de programação envolvem instruir mais diretamente o ambiente de execução com as etapas que precisam ser executadas em detalhes, ou seja, qual variável contém quais etapas intermediárias e como o processo é realizado passo a passo em detalhes minuciosos. Isso é programação como geralmente é ensinado na escola/faculdade/universidade/no trabalho [exclua quando apropriado].
Declarativo
Neste paradigma de programação estamos menos preocupados com os detalhes precisos de como atingimos nosso objetivo, o código se assemelha mais a uma descrição do que é desejado no final do processo e os detalhes (incluindo coisas como ordem de execução de as etapas) ficam mais nas mãos do ambiente de execução. Esta é a categoria a que pertence a Programação Funcional. SQL também pertence aqui, então, em alguns aspectos, a Programação Funcional se parece mais com SQL do que OO. Ao escrever instruções SQL, você não está preocupado com a ordem das operações (não é realmente SELECT, então WHEN e ORDER BY), você não está preocupado com a forma como exatamente as transformações de dados são realizadas em detalhes, você apenas escreve um script que descreve efetivamente a saída desejada. Esses são alguns dos objetivos do Functional C# também,
Há muitos, muitos outros paradigmas além desses, mas eles estão muito além do escopo deste livro.
As Propriedades da Programação Funcional
Nas próximas seções, falarei sobre cada uma das propriedades da Programação Funcional e o que elas realmente significam para um desenvolvedor.
Imutabilidade
Se algo pode mudar, também pode ser dito que pode sofrer mutações, como um Ninja Mutante Adolescente2Tartaruga. A outra maneira de dizer que algo pode sofrer mutação é que é mutável. Se, por outro lado, algo não pode mudar, então é imutável.
Na programação, isso se refere a Variáveis que têm seu valor definido ao serem definidas, e após esse ponto elas nunca mais poderão ser alteradas. Se um novo valor for necessário, uma nova variável deve ser criada, com base na antiga. É assim que todas as variáveis são tratadas no código funcional.
É uma maneira um pouco diferente de trabalhar em comparação com o código Imperative, mas acaba produzindo programas que se assemelham mais ao trabalho matemático e incentiva uma boa estrutura e um código mais previsível - e, portanto, robusto.
Data horae String são ambas estruturas de dados imutáveis em .NET. Você pode pensar que os alterou, mas nos bastidores cada alteração cria um novo item na pilha. É por isso que a maioria dos novos desenvolvedores fala sobre concatenar strings em loops For.
Funções de ordem superior
Estas são funções que são passadas como variáveis. Isso pode ser como variáveis locais, parâmetros para uma função ou valores de retorno de uma função. Os tipos de delegado Func
Func{x} + {y} = {x+y}
;
Actionmensagem recebida: {x}
);
Ambos os tipos são referências a funções armazenadas em variáveis e que podem ser chamadas como funções. A única diferença entre um Func e Action é que o Action não tem valor de retorno - ou seja, é um tipo de retorno void. O código acima era inteiramente equivalente a isso:
função string Add(int x, int y)
{
return ${x} + {y} = {x + y}
;
}
função void LogMessage(string x)
{
this.Logger.LogInfo($mensagem recebida: {x}
);
}
A grande vantagem de usar esses tipos Delegates é que