Ei! Meu nome é Katerina e tenho um grande afeto por programação funcional, uso linguagem funcional continuamente e até ensino um pouco.
Nossa principal linguagem de desenvolvimento na Typeable é Haskell, e enquanto todos discutiam se Haskell estava pronto para produção, nós apenas o usamos e o consideramos uma vantagem competitiva. Gostaríamos de compartilhar nossa opinião com base nesta experiência.
Como o FP melhora a programação
A programação funcional é bastante popular no momento, e os elementos FP começaram a aparecer em muitas linguagens imperativas, como funções lambda, aplicação parcial (currying), funções de ordem superior (mapa, filtro, convoluções). Em algum lugar, esses empréstimos parecem bons, mas em algum lugar eles levam a uma sintaxe estranha e estrangeira. Mas o paradigma de programação é uma abordagem que vive na cabeça do programador e não é, em geral, parte da linguagem. Em um grau ou outro, qualquer linguagem suporta diferentes paradigmas, e seus designs permitem que programas sejam desenvolvidos em estilos diferentes. Se vale a pena desenvolver em um estilo funcional é uma questão em aberto, e cada desenvolvedor responde com base em suas preferências, recursos de linguagem e outras considerações.
Acreditamos que usar o estilo funcional em linguagens imperativas, ou melhor ainda, uma linguagem funcional, especialmente aquelas tipadas estaticamente, ajudará a tornar o código muito melhor, a saber:
- O código se tornará mais conciso e expressivo. A "expressividade" pode ser definida como o número de ideias por unidade de código e, em geral, as linguagens funcionais, por serem de nível superior, também são mais expressivas. Por exemplo, a transformação de cada elemento em uma matriz ou lista é feita em uma linha funcional (usando map / foreach / qualquer e uma função anônima), enquanto em um estilo imperativo seria necessário organizar um loop, declarar uma variável para um contador ou iterador e use atribuição explícita. Para exemplos mais complexos, a diferença na expressividade apenas aumenta.
- . « » . , . , , , - , : , (, ) , . , . ( ), « » . , , , . (working memory), , . , . — . , , C, SOLID GoF-, , , .
- . — , . : , , . , , , ? . «» , , « ».
- O código ficará mais fácil de depurar e testar. Este ponto decorre dos dois anteriores: temos um conjunto de pequenas funções, algumas das quais são puras, ou seja, sabemos que seu resultado depende apenas da entrada. O código fica mais fácil de depurar - você só precisa verificar quais funções usadas estão retornando separadamente para entender como elas funcionarão juntas. É igualmente fácil escrever testes de unidade para a lógica "limpa" de seu aplicativo.
Como o FP melhora o programador
A seguir, gostaria de compartilhar minha experiência que não está diretamente relacionada à escrita de programas em linguagens funcionais, e falar sobre outras coisas que o conhecimento e o uso do PF foi útil para mim e pode ser útil para você:
- , -. - , . , «» « » , , . , : , , Haskell, Brainfuck, Piet. . , .
- , , computer science. , . , , - , , .
- . , « » , , . , . , . , , , . , , - , - , . , , .
- : Haskell! , Haskell, . , Haskell-, . - . «» «» , , . , , «Haskell-». , , . , , . . , , , , . , , , . , : — !
Conclusão
O advento de elementos FP em linguagens de desenvolvimento industrial populares, como Python, C ++, Kotlin, Swift, etc., confirma que essa abordagem é realmente útil e tem pontos fortes. Aplicar o estilo funcional permite um código mais robusto que é mais fácil de separar, generalizar e testar, independentemente da linguagem de programação. Obviamente, uma linguagem funcional permite que você aproveite ao máximo esses benefícios ao fornecer construções naturais com alto grau de expressividade.
Existem um grande número de linguagens funcionais, mas, ao que parece, no momento as mais convenientes e úteis para o desenvolvimento são aquelas que usam tipagem estática. Isso permite que você capture muitos erros durante a compilação e expresse parte da lógica do aplicativo no nível do tipo.
Concluindo, desejo que todos não tenham medo de usar abordagens alternativas e experimentá-las na prática, mesmo que seja útil apenas para o seu autodesenvolvimento.