Programação Funcional Com C#
()
Sobre este e-book
Leia mais títulos de Jideon Francisco Marques
Programação Python Ilustrada Para Iniciantes E Intermediários: Abordagem “aprenda Fazendo” – Passo A Passo Nota: 0 de 5 estrelas0 notasHiit De 15 Minutos Para Mulheres Nota: 4 de 5 estrelas4/5Hoodoo Para Iniciantes Nota: 5 de 5 estrelas5/5Sambo Nota: 0 de 5 estrelas0 notasComo Fazer Animais Amigurumi Nota: 0 de 5 estrelas0 notasAlquimia Da Beleza Natural Nota: 0 de 5 estrelas0 notasTui Na Manual De Massagem Chinesa Nota: 0 de 5 estrelas0 notasExcel 2022 O Tutorial Completo Para Iniciantes E Especialistas Nota: 0 de 5 estrelas0 notasLivro De Receitas De Conservas E Conservas Em Banho De Água Para Iniciantes Nota: 0 de 5 estrelas0 notasMudras Para A Vida Moderna Nota: 5 de 5 estrelas5/5Macramé Para Iniciantes Nota: 0 de 5 estrelas0 notasJava O Guia Completo Nota: 0 de 5 estrelas0 notasFerramentas De Eft Nota: 0 de 5 estrelas0 notasUm Livro Completo De Cura Reiki Nota: 0 de 5 estrelas0 notasReceitas Fáceis De Ayurveda Nota: 0 de 5 estrelas0 notasKarma Do Signo Solar Nota: 0 de 5 estrelas0 notasPlano De Dieta Diabética De 28 Dias Para Perda De Peso Nota: 0 de 5 estrelas0 notasExercício De Lifting Facial Nota: 0 de 5 estrelas0 notas100 Receitas De Bolos E Assados Nota: 0 de 5 estrelas0 notasLivro De Receitas Do Desidratador Nota: 0 de 5 estrelas0 notasBruxaria Cotidiana Nota: 5 de 5 estrelas5/5Desenvolvedor De Back-end Em 30 Dias Nota: 0 de 5 estrelas0 notasCura Bioenergética Nota: 0 de 5 estrelas0 notasA Cura Alcalina Nota: 0 de 5 estrelas0 notasDesenho Fácil Nota: 5 de 5 estrelas5/5Bolos E Biscoitos Artesanais Receitas Selecionadas Nota: 1 de 5 estrelas1/5Magia Do Amor Nota: 0 de 5 estrelas0 notasCódigo Limpo Em Php Nota: 0 de 5 estrelas0 notasDeliciosa Pâtisserie 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 notasCakePHP: Construa aplicações web robustas rapidamente Nota: 0 de 5 estrelas0 notasRobot framework: Automação versátil e consistente para testes Nota: 0 de 5 estrelas0 notasPHP: programe de forma rápida e prática Nota: 0 de 5 estrelas0 notasSistemas Orientados a Objetos: Conceitos e Práticas Nota: 0 de 5 estrelas0 notasFundamentos De Programação Java Nota: 0 de 5 estrelas0 notasCurso Intensivo Em Golang Nota: 0 de 5 estrelas0 notasSeu Primeiro Ano De Programação Nota: 0 de 5 estrelas0 notasDesenvolvedor De Back-end Em 30 Dias Nota: 0 de 5 estrelas0 notasProgramação Python E Aprendizado De Máquina Nota: 0 de 5 estrelas0 notasZend Certified Engineer: Descomplicando a certificação PHP Nota: 0 de 5 estrelas0 notasEntrega contínua em Android: Como automatizar a distribuição de apps Nota: 0 de 5 estrelas0 notasAprendendo A Programar Nota: 0 de 5 estrelas0 notasNode.js: programe de forma rápida e prática Nota: 0 de 5 estrelas0 notasDesenvolvimento De Software - Aplicativo Comercial Com C# E Camadas Nota: 0 de 5 estrelas0 notasRSpec: Crie especificações executáveis em Ruby Nota: 0 de 5 estrelas0 notasMezzio e PHP 7: Uma união poderosa para criação de APIs Nota: 2 de 5 estrelas2/5Desenvolvimento efetivo na plataforma Microsoft: Como desenvolver e suportar software que funciona Nota: 0 de 5 estrelas0 notasProtractor: Lições sobre testes end-to-end automatizados Nota: 0 de 5 estrelas0 notasZend Expressive e PHP 7: Uma união poderosa para a criação de APIs Nota: 0 de 5 estrelas0 notasCucumber e RSpec: Construa aplicações Ruby com testes e especificações Nota: 0 de 5 estrelas0 notasCodeIgniter: Produtividade na criação de aplicações web em PHP Nota: 0 de 5 estrelas0 notasCódigo Limpo Em Php Nota: 0 de 5 estrelas0 notasApache Lucene: Sistemas de busca com técnicas de Recuperação de Informação Nota: 0 de 5 estrelas0 notasProgramação Para Internet Nota: 0 de 5 estrelas0 notasPython - 20% Que Eu Preciso Saber Para Ter 80% De Resultados 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 notasElixir: Do zero à concorrência Nota: 0 de 5 estrelas0 notasGuia De Validação De Dados Em Java Nota: 0 de 5 estrelas0 notas
Administração de Sistemas para você
Apostila Introdução À Comunicação De Dados E Redes De Computadores Nota: 0 de 5 estrelas0 notasAprenda Hackear Como Uma Lenda Nota: 0 de 5 estrelas0 notasFundamentos Do Microsoft Azure Nota: 0 de 5 estrelas0 notasRedes De Computadores Descomplicadas Nota: 0 de 5 estrelas0 notasFundamentos De Telecomunicações E Comunicação De Dados Nota: 5 de 5 estrelas5/5100 dicas de ouro - Gestão de pessoas Nota: 0 de 5 estrelas0 notasFundamentos De Redes De Computadores Nota: 0 de 5 estrelas0 notasGuia Telefonia Ip Cisco Unified Communications Nota: 0 de 5 estrelas0 notasEstratégia para corporações e empresas:: teorias atuais e aplicações Nota: 0 de 5 estrelas0 notasVirtualização - Componente Central do Datacenter Nota: 0 de 5 estrelas0 notasCurso Intensivo De Python Nota: 0 de 5 estrelas0 notasInvestigação Digital E Rastreamento De Dados Nota: 0 de 5 estrelas0 notasRobótica Móvel Com Arduino Nota: 0 de 5 estrelas0 notasPython Em Poucas Palavras 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 notasMonitoramento De Emails Na Relação De Emprego Nota: 0 de 5 estrelas0 notasConfiguração De Roteadores E Switches Cisco Nível Básico Nota: 0 de 5 estrelas0 notasApostila Noções De Informática Nota: 0 de 5 estrelas0 notasComo Criar Sub-redes Em Redes Ip Nota: 0 de 5 estrelas0 notasIntrodução Às Redes De Computadores: Modelos Osi E Tcp/ip Nota: 0 de 5 estrelas0 notasProgramação Python E Aprendizado De Máquina Nota: 0 de 5 estrelas0 notasMetodologia E Engenharia De Requisitos Para Projetos De Business Intelligence Nota: 0 de 5 estrelas0 notasGuia prático do servidor Linux: Administração Linux para iniciantes Nota: 4 de 5 estrelas4/5Guia Rápido Kubernetes Nota: 0 de 5 estrelas0 notasFundamentos De Redes De Computadores: 1000 Questões Resolvidas E Comentadas Nota: 0 de 5 estrelas0 notasCurso Intensivo Em Golang Nota: 0 de 5 estrelas0 notasGestão e Produção de Eventos: Da Ideia à Avaliação Nota: 0 de 5 estrelas0 notasGestão Na Tecnologia Da Informação Nota: 0 de 5 estrelas0 notasNovas Estratégias De Seo 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