Тёмный

258 - A SUPERIORIDADE da PROGRAMAÇÃO FUNCIONAL 😱😱😱 | theWiseDev Functional 

Otavio Lemos
Подписаться 35 тыс.
Просмотров 7 тыс.
50% 1

Nesse vídeo eu apresento várias características OBJETIVAS que tornam a programação funcional uma opção muito atraente.
Muitas vezes são utilizadas razões SUBJETIVAS para justificar o uso de um certo paradigma, tecnologia ou abordagem. Por exemplo, às vezes se diz que o código funcional é mais elegante ou mais simples. Esse tipo de argumento é complicado porque o que é mais simples para uma pessoa pode ser mais complexo para outra.
Utilizando uma apresentação espetacular do Richard Feldman eu te mostro características OBJETIVAS da superioridade da PF com alguns exemplos em Clojure.
Chega mais!
Referências
Functional Programming for Pragmatists
• Functional Programming...

Наука

Опубликовано:

 

28 окт 2022

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 46   
@rodrigo2112-
@rodrigo2112- Год назад
É um exercício legal pensar em como criar funções puras e sem side effects em um problema que tenha side effects, por exemplo uma função que chama uma URL e salva o resultado dessa chamada em disco, usando timestamp no nome do arquivo. Resolver esse problema ajuda a entender um bocado sobre injeção de dependências e um jeito diferente de pensar.
@AdolfoNeto
@AdolfoNeto Год назад
Livros para o público dev em geral são engraçados. Eu sugiro ler Seven Languages in Sevem Weeks, de Bruce Tate. Há um capítulo sobre Clojure, outro sobre Erlang, mais um sobre Haskell e ainda um sobre Prolog! É bastante programação declarativa!
@RodrigoVazRocket
@RodrigoVazRocket Год назад
Muito bom, vejo que está havendo um movimento para esse paradigma. E de fato, resolve diversos problemas que uma linguagem OO possui.
@igordemetriusalencar5861
@igordemetriusalencar5861 Год назад
Como analista de dados, a melhor coisa que me aconteceu foi conhecer programação funcional. Para trabalhar com dados é sem dúvida melhor paradigma, eu estava migrando para o python, porém quando comecei a aprender funcional no R, com o purrr e o tidyverse, fiquei apaixonado. Meu código ficou mais "humanamente" lógico, fácil de depurar, mais simples e menor. Nada melhor do que usar o "|>" para ligar uma sequência de funções.
@z-matrix
@z-matrix Год назад
Estou aprendendo com PHP, é bem útil.
@arozendojr
@arozendojr Год назад
Acredito que você vai compara o comportamento do clouje e elm, se possível compara com elixir também e sua virtual machine que roda o elixir
@jrdoidera5
@jrdoidera5 6 месяцев назад
Muito bom! Estou nessa jornada de sair um pouco do OO e indo para o funcional.
@kellenxavier3420
@kellenxavier3420 Год назад
Maravilha professor Otávio! Parabéns novamente pela essa iniciativa, seria muito incrível trazer esse conteúdo (programação Funcional e Clojure) para o teu canal!!! Sigo aqui desse lado ainda engatinhando mas no aprendizado desse paradigma, achando incrível (inclusive com esse livro) Sucesso e novamente parabéns!🖖👏
@pedrocalaisguerra
@pedrocalaisguerra 11 месяцев назад
Excelente resumo sobre benefícios da programação funcional!
@otaviolemos
@otaviolemos 11 месяцев назад
Valeu, Pedro! Venha para o lado funcional da força! 😅
@fabricioaraujo7642
@fabricioaraujo7642 Год назад
O modelo de paradigma hibrido como o do python e o kotlin, dart , ruby deve ser a melhor escolha para a modelagem de linguagem no dias de hoje
@otaviolemos
@otaviolemos Год назад
Na minha opinião a linguagem deve apoiar o uso de polimorfismo E encorajar fortemente a imutabilidade. O primeiro ponto é coberto por essas linguagens que você indicou mas o segundo não.
@joaogabrielbracaioli
@joaogabrielbracaioli Год назад
Tô curtindo clojure, mas acho legal a abordagem híbrido como o do kotlin, confesso que ainda prefiro mais o kotlin, mas deve ser pq só tô no começo do namoro com clojure
@otaviolemos
@otaviolemos Год назад
@@joaogabrielbracaioli Boa, Braca! :)
@gabrieljose7041
@gabrieljose7041 Год назад
Me despertou uma curiosidade a mais no tema, parabéns pelo conteúdo
@arozendojr
@arozendojr Год назад
Sobre cache, vi um cara habilitando e desabilitando cache em funções usando anotações, gostei bastante
@otaviolemos
@otaviolemos Год назад
Massa...
@KivySchool
@KivySchool Год назад
Massa seu vídeo, Otavio! Gostaria de ter visto mais exemplos implementadas de algumas características que você citou Mas massa demais
@praxiscode1722
@praxiscode1722 Год назад
Parabéns. Como dica eu ousaria dar uma olhadinha também no Rust, terá que usar uma caixa específica para isso como a Memoize mas vale a pena.
@otaviolemos
@otaviolemos Год назад
Sim. O Feldman até comenta que tem programado em Rust e que há alguns recursos para prevenir mutação.
@Pawl0solidus
@Pawl0solidus Год назад
Interessante fazer a comparação da programação funcional com a imperativa. O que mais vemos na internet hoje em dia é a guerra entre POO e programação funcional. Falando que uma exclui a outra e etc, sendo que temos até mesmo linguagens de paradigma híbrido onde podemos usar o melhor de ambos os paradigmas. Seria interessante ter um vídeo abordando justamente esses dois paradigmas e até mostrando em uma linguagem híbrida quando faz mais sentido usar um ou outro.
@otaviolemos
@otaviolemos Год назад
O livro que eu pedi para o Uncle Bob escrever será sobre isso. 😄
@Pawl0solidus
@Pawl0solidus Год назад
@@otaviolemos estou ansioso pra ler esse livro :)
@CalangoBit
@CalangoBit Год назад
Muito bom o vídeo e melhor ainda essa oportunidade que terá lecionando! Parabéns! Permita-me sugerir um núcleo de estudos em programação funcional encabeçado por dois professores sensacionais da UFABC. De um modo geral eles lecionam com Haskell, mas ambos tem domínio em várias outras linguagens e uma centena de aulas em seu canal no youtube. No discord deles também tem muita coisa boa além de outros docentes e discentes para dialogar. Vale conferir!
@otaviolemos
@otaviolemos Год назад
Opa, obrigado! Quem são os professores? Você não falou o nome deles nem do grupo... :)
@otaviolemos
@otaviolemos Год назад
Opa, já achei aqui: ufabc hal :)
@CalangoBit
@CalangoBit Год назад
Legal! Eu acho que o youtube bloqueia links, então não publiquei. Lá no Discord o nome do grupo é "Programação Funcional". Tenho certeza que vai gostar!
Год назад
vi uma parte faz um tempo e realmente é increvel a didatica do professor
@PhCoutoP
@PhCoutoP Год назад
@@CalangoBit Não consegui encontrar o servidor no Discord.
@alessandro3974
@alessandro3974 9 месяцев назад
Professor, conhece algum bom exemplo de "real world application" em alguma linguagem funcional no github?
@thiagoleite4953
@thiagoleite4953 Год назад
Fala aí professor, show o conteúdo! Fiquei bastante interessado na disciplina, se conseguir oferecê-la a noite seria uma boa. 🙌🏼
@otaviolemos
@otaviolemos Год назад
Sim, será à noite!
@lucaoliveira100
@lucaoliveira100 Год назад
Teria alguma recomendação de livro para começar a estudar programação funcional?
@otaviolemos
@otaviolemos Год назад
Structure and Interpretation of Computer Programs ou algum mais específico de linguagem. Eu tô indo direto no Clojure for the Brave and True (ensina mais a linguagem mesmo) junto com Clojure Applied (ensina como fazer software com Clojure).
@pedrolemoz
@pedrolemoz Год назад
Excelente vídeo. Como funcionaria um sistema 100% funcional? As entidades seriam simples structs? Existe alguma espécie de "interface" que possa servir de base para a construção de funções? (Já vi a forma que o Go faz, mas é meio que um workaround pra devs OOP se sentirem confortáveis). Como funciona a tipagem nesse tipo de sistema? A passagem de parâmetros para as funções sempre é por valor ou pode haver uma passagem por referência em algum cenário específico?
@pedrolemoz
@pedrolemoz Год назад
Por exemplo, se implementássemos um scanner que retorna os elementos sob demanda, precisaríamos de uma forma de alterar o index atual que estamos. Como isso seria possível em uma função pura?
@pedrolemoz
@pedrolemoz Год назад
Uma coisa que eu acho lindo dentro da programação funcional é o tratamento de erros. O Either com Left e Right é tão bom que existem pacotes em outras linguagens para simular esses comportamentos, como o dartz no Dart e o fp-ts no Typescript. Também acho bem legal a pegada do Go de permitir que a função tenha múltiplo retorno pra erro, e se o erro é diferente de nulo, o tratamento é obrigatório
@otaviolemos
@otaviolemos Год назад
Opa, ainda não sou especialista no tema, mas posso tentar responder. Sim: a ideia é manipular estruturas de dados mais simples, não há 'objetos' com dados e comportamentos conectados. Na questão da tipagem, depende da linguagem, como nas imperativas temos linguagens estaticamente tipadas (como é o caso do F#) e dinamicamente tipadas (como é o caso do Clojure). No caso da passagem de parâmetros acho que você pode passar uma referência mas no fundo tanto faz porque você não pode alterar o dado de qualquer maneira (valor ou referência, tanto faz).
@otaviolemos
@otaviolemos Год назад
No Clojure há 'protocols' que, pelo que entendi, são bem semelhantes às interfaces. O F# parece ter interfaces. Acho que aí depende muito da linguagem.
@lucasayabe
@lucasayabe Год назад
A minha experiência dentro do que eu estudei foi muito em cima de linguagens funcionais estaticamente tipadas (embora eu não tenha de fato programado nelas, eu só estudei os conceitos e apliquei usando TS), então em closure as abstrações provavelmente seriam diferentes. Mas algo que eu venho achando em comum quando se estuda design de programas funcionais é que geralmente as coisas acabam naturalmente terminando em alguma forma de arquitetura limpa (embora geralmente acabe ficando bem próximo da Onion architecture). Você modela o core do sistema de forma totalmente pura, e empurra o código impuro para as bordas. Num geral você não tem objetos mesmo então você vai mexer com alguma coisa parecida com as structs, mas geralmente as linguagens definem bem as estruturas de dados básicas que ela te fornecem. Mas não é algo tão pobre quanto em linguagens imperativas, pelo menos nas fortemente tipadas, você usa um sistema de tipos algébricos para descrever as coisas (seria o & e o | do TS), além de depender bastante de generics (se pensar no TS você consegue imaginar melhor, o sistema de tipos dele cobre bastante coisas em comum com sistemas de tipos usados em linguagens funcionais). Uma abordagem que eu acho muito legal é a do cara do site F# for fun and profit onde ele diz que é uma boa modelar o seu sistema a partir dos tipos e depois pensar nas suas implementações, então na maior parte do tempo você pensa em interfaces/types e só lá no final você pensa na implementação, o que ajuda a focar bem no domínio que você está modelando. A abstração em linguagens funcionais é um pouco diferente das linguagens OOP, ao invés da gente utilizar objetos, eu vejo que se usam muito estruturas algébricas (seriam aquelas coisas de Monads, Functors e etc) e um conceito chamado de Type classes para implementar elas, eu ainda estou estudando esse assunto então não sei explicar bem o que é uma type class, mas pelo que eu vi num livro sobre paradigmas de programação, elas são uma forma de abstração assim como objetos, que seria o que habilita o uso de polimorfismo em linguagens funcionais.
@urielsouza29
@urielsouza29 Год назад
Eu queria que o TC39 aumentasse a cobertura funcional do JS. Mas os caras insistem em deixar programador OOP(classico) encher a linguagem de coisas. Enchendo a linguagem de OOP classico(JS é OOP desde sempre, mas não classico)...
@otaviolemos
@otaviolemos Год назад
Pois é: no final eu acho que a única saída é ir para uma linguagem puramente funcional para se ter os benefícios da imutabilidade.
@smanzoli
@smanzoli Год назад
Com memoize levou 1ms, não 1s
Далее
Что не так с воздухом в Корее?
00:45
DIY rocking horse for your kid #diy #parenting
00:57
Просмотров 4,1 млн
Functional vs Array Programming
30:40
Просмотров 130 тыс.