seja muito bem-vindo a mais um vídeo aqui no canal da code muito feliz de estar com vocês mais um ano e eu quero que vocês coloquem nos comentários o que é que você espera do nosso canal que tipo de conteúdo você quer ver aqui para que a gente possa se inspirar nas suas recomendações e fazer um canal que seja cada vez mais relevante para você nos ajuda a chegar em 100 mil inscritos não tá muito longe eu tenho certeza se você que assiste não é inscrito se inscrever se você que assiste deixar um like com
certeza vai ajudar muito o canal a crescer eu queria nesse vídeo falar de um princípio da programação funcional vou mostrar um exemplo de código bem simples para a gente entender como se fosse arranhar superfície desse desse conhecimento desse princípio que é o princípio da imutabilidade eu tenho notado que nos últimos anos talvez seis sete anos para cá cinco anos para cá não lembro exatamente quando eu comecei a incorporar de forma mais intencional princípios da programação funcional mesmo em códigos que são por exemplo orientados a objetos né Eu tô trabalhando muito com type script então a
gente acaba criando classes interfaces né você tem uso de genéricos e você tem sei lá várias coisas relacionadas a orientação objeto você define estruturas organizações que tem muito a ver com esse paradigma da orientação objeto e eu noto que nos últimos anos muito desse conhecimento de programação funcional que eu tenho estudado que tem sido incorporado no meu código tem feito eu programar de uma forma diferente de uma forma melhor e um desses princípios é o princípio da imutabilidade você trabalhar com dados imutáveis é algo que traz uma série de vantagens né porque primeiro que quando
dado não muda ele acaba ficando mais fácil de você compartilhar esse dado dentro da sua aplicação mas Léo como é que eu vou trabalhar com dado que não muda na verdade você pode trabalhar com dado que nunca muda e ele evolui dentro do seu algoritmo a partir de uma cópia você pode pegar uma cópia evoluir esse dado e gerar um dado digamos assim evoluído um dado alterado de acordo com a sua necessidade um exemplo de uma função que trabalha com imutabilidade ou tem vários exemplos para falar a verdade se você usa a função map do
Arreio você vai perceber que ele não altera o arreio original ele gera um clone uma cópia e a partir dessa cópia você tem lá uma Rei alterado a mesma coisa vai acontecer com a função Filter Ah eu tenho uma Rei original eu quero filtrar alguns elementos eu quero extrair um subconjunto de elementos de uma rei ele vai gerar um clone Então esse conceito de gerar um clone Ele é bem interessante eu quero gravar um outra aula falando um pouquinho do Type script aí sim eu vou colocar o código funcionando existe um elemento lá do Type
script que é um utilitário chamado porschell quando você tem um objeto e você quer pegar apenas parte desse objeto é muito útil Por exemplo quando você quer clonar objetos Mas isso fica para um assunto de outra aula nessa aula eu quero mostrar para vocês um exemplo bem simples bem simples mesmo tá é para introduzir Esse aspecto aí da imutabilidade como é que a gente pode na prática começar a trabalhar com a questão da imutabilidade esses dias eu tenho trabalhado em uma biblioteca que tem mais ou menos uns 60 arquivos não tem nenhuma coisa muito grande
e tal e eu fui olhar quantas constantes Eu Tenho Em relação a quantas variáveis quantas vezes eu uso a palavra let né a palavra vai dificilmente eu uso até porque a gente faz o transpare ele compatibiliza com versões antigas mas quantos Lets eu uso e quantas constantes eu uso a diferença era gigante eu usei tipo 200 vezes a palavra constante dentro do código e apenas uma ou duas vezes a palavra let inclusive Dá até para trocar e melhorar o código para trabalhar com constante Então a primeira coisa que a gente precisa entender eu vou até
abrir aqui um exemplo paralelo é o seguinte ó eu vou colocar aqui para trabalhar com JavaScript por enquanto se eu criar aqui uma constante que é um objeto e esse objeto eu tenho por exemplo nome e eu vou colocar aqui Ana e tenho idade é por exemplo 20 ok o fato de ter uma constante isso não significa que os dados internos do objeto são imutáveis essa é um princípio importante principalmente para quem está começando né então Se eu colocar aqui ó objeto ponto nome recebe Pedro e eu colocar aqui um console ponto log e pedir
para ele mostrar o objeto você vai perceber que no final nós temos o Pedro como o novo valor de nome ou seja esse é um objeto que pode ser modificado então existem técnicas para você não permitir um objeto de ser modificado uma dessas técnicas bem antigas do Java script é o Object Freeze né quando você congela digamos assim um objeto se você tentar mudar ele não vai permitir mudar continua Ana e aqui sim você tem um objeto que é imutável E você tem uma referência para esse objeto A partir dessa variável obj como sendo imutável
não posso pegar por exemplo obj e atribuir um novo objeto porque isso aqui é uma constante tá então ele chama até de constante ver né é uma variável constante então você não consegue fazer essa atribuição para algo que é constante mas não significa que o que é o que está interno Ah tem uma rei que é referenciado por uma constante os elementos do Arreio não necessariamente são constantes você pode excluir e modificar e tal mas um dos primeiros passos digamos assim passo inicial para você começar a trabalhar com dados imutáveis é você começar a aprender
a trocar variáveis do tipo let Ou seja você trocar as variáveis por constantes para que você possa dentro do seu algoritmo tentar o máximo possível trabalhar com constantes ah Léo mas eu preciso modificar os dados dentro da minha função aí você pode criar várias constantes uma com o nome expressivo outro ó Isso aqui é uma lista sem os dados excluídos agora sem os dados excluídos e os produtos ativos e aí você pode criando mais significativos e o algoritmo fica até mais fácil de entender então vamos lá para esse exemplo de código só para a gente
dar aqui um exemplo uma possibilidade como você poderia substituir let por concha ou seja Esse é um dos primeiros passos aí em relação a trabalhar com imutabilidade eu peguei um exemplo é simples que é o seguinte você tem uma função chamada que ele vai fazer um sainim comprovedor um provedor tipo Google Facebook Yahoo Imagine que você tem a sua aplicação você tem lá aqueles botões né logar com Google logar com Microsoft logar com Yahoo e assim você pode clicando ele vai abrir um pop-up vai fazer lá o login depois volta para sua aplicação basicamente essa
função é responsável por receber um provar que ele é o google.com facebook.com e yahoo.com ele vai selecionar uma Instância do provider correta de acordo com o providei e no final ele chama esse saininho pop-up né aqui é um método Type script bem simples não tá não tá funcionando mas aqui eu coloquei as interfaces só para ele ficar minimamente compilado digamos assim né então coloquei interfaces e classes vazias aqui já que eu estou usando aqui dentro essas classes interface eu peguei de um código real fiz aqui uma pequena adaptação para a gente mostrar esse exemplo como
é que eu poderia resolver essa questão do uso dessa variável Léo tem problema eu usar uma variável dentro de uma função Não não tem problema quando você usa uma variável local dentro de uma função é um escopo muito delimitado você tem controle dessa mutabilidade muito mais fácil do que se você tivesse colocando algo mutável que é passado de função para função mas a ideia desse vídeo é exatamente mudar na sua cabeça pequenas variáveis digamos assim pequenos parâmetros para que você comece a pensar de forma mais imutável digamos assim trabalhar ou priorizar constantes ao invés de
variáveis mesmo em código local porque essas pequenas mudanças no final podem gerar um impacto muito grande na forma ou no estilo que você usa para programar Então vamos lá eu tenho aqui um LED a primeira coisa que eu vou fazer essa primeira modificação é colocar aqui uma constante então colocando uma constante a gente já vai ter um erro que é o fato de que eu não posso colocar uma constante inicializar ela mais de uma vez já que eu inicializei a constante aqui dentro do nulo tá coloquei nulo aqui e depois eu inicializei aqui mesmo que
eu não inicialize aqui ainda assim vai dar problema porque ele vai querer inicializar aqui uma segunda vez o que não pode aqui ele vai dizer que ela não foi inicializada e vai dar aqui alguns problemas O que é que eu poderia fazer para resolver esse código e precisar fazer essas várias atribuições dentro de algo que era variável e agora virou uma constante muito simples a gente pode usar um recurso do próprio JavaScript que é a definição de um objeto eu vou definir um objeto e vou colocar aqui para chave do meu objeto ser o provedor
ID Então vou colocar aqui ó provedor ID 2 pontos e o Google Alf provider que é a classe que ele vai instanciar depois eu vou colocar aqui a mesma coisa para o Facebook e finalmente a mesma coisa para o Yahoo Então tem um Yahoo a gente nasceu o Yahoo Facebook e depois o Google legal agora como é que eu faço para selecionar esse elemento basta eu pegar aqui o meu provar aí eu uso aquela anotação de colchetes para acessar um atributo de um objeto passo provar e agora eu tenho o meu provar ideia de selecionado
caso ele não selecione eu vou retornar nulo legal aqui eu posso tirar teste né tudo isso que eu posso tirar agora a gente tem basicamente esse código aí você pode observar o seguinte vou voltar rapidamente o código anterior Léo nesse caso do algoritmo passado ele só instansável o provedor caso você tivesse passado provar específico então se você só se loga com o Google ele não queria distanciar um provedor do Facebook nem um provedor do Yahoo nesse novo código não ele vai instanciar todos os provedores sempre Ah tá estanciando que o Google Facebook ou seja não
é um código mais ineficiente nesse aspecto Sim ele é mas a gente pode fazer que uma pequena alteração para evitar essa Instância logo quando o objeto é criado eu posso colocar aqui para ele retornar em vez de retornar logo uma instância é uma função que vai retornar um Instância com essa função foi invocada então colocando aqui uma aeroffection eu consigo Tem uma função e aí dessa forma você consegue por exemplo depois de chamar o provedor ID Ou seja você acabou de selecionar uma dessas três funções aqui você pode invocar a função e você tem como
resposta um dos provedores corretos dessa forma Agora ele só vai instanciar o provedor que tiver o ID que foi passado aqui na função outras questões que você pode pensar será que faz sentido ter essa lista de provedores aqui será que não faz sentido eu receber isso por parâmetro né como se fosse uma injeção de dependência vai depender da necessidade do seu código esse código foi exatamente o código que vai selecionar o provedor por aí talvez faça mais sentido você realmente deixar essa lista aqui e se novos provedores forem necessários você tem um motivo aqui para
alterar esse código então basicamente é isso então aqui é uma forma simples ó tô usando nada muito estranho JavaScript um objeto passei aqui uma chave vai selecionar um dos elementos é basicamente como se fosse uma condicional né um F A gente trocou exatamente pelo f e Wells que a gente tinha feito antes e é um código simples Até um pouco menor do que o código passado sem código imutável a gente tem apenas um objeto constante esse objeto inclusive como é um objeto digamos assim do Type script eu posso até colocar como uma constante ou dizer
que os atributos são Reed only né para nunca modificar e tal coisas do tipo mas o fato é que eu quero nesse vídeo tentar apontar para você uma direção que ajuda muito na manutenção do seu código é você trabalhar com códigos imutáveis se você tem essa mentalidade de começar a Substituir eu acho que eu citei isso nesse vídeo se nós ter postar agora de novo tô esquecendo né mas eu falei para vocês né se eu não falei vou falar agora tô trabalhando numa biblioteca que tem mais ou menos aí sei lá 30 arquivos no context
exatamente uma biblioteca pequena mas que faz algumas coisas bem importantes Eu fui contar a questão de leds e constantes dentro da minha aplicação Inclusive eu acho que é até esse código que tá aberto aqui ó É exatamente esse código está aberto aqui se eu pesquisar aqui e colocar constante ó eu tenho 300 e 12 resultados em 42 arquivos de constantes dentro desse código vamos procurar quantas quantos leds leds Eu tenho quatro referências inclusive alguns desses aqui Dá para até para eu tirar entendeu que ainda não fiz a revisão mas de quatro para 312 312 constantes
e quatro variáveis usando LED Então quando você começa a ter essa mentalidade e uma direção de tentar o máximo possível trabalhar com imutabilidade você acaba tendo um código mais fácil de manter tá então É aquela ideia quando você tem uma Rei você faz um map de uma rei né você pega um determinado a rei o filtro que é mais fácil de explicar você tem uma Rei você quer selecionar alguns elementos você não mexe no original você gera uma cópia com menos elementos de acordo com o filtro que você colocou então e nessa direção é interessante
para te tornar um programador melhor eu noto que esses princípios dos paradigmas né quando a gente tô falando isso pensando que você já saiu ali dessa parte mais inicial do aprendizado você tá bem no início não se preocupa com constante variável usa e abusa dos recursos da linguagem tenta o máximo possível fazer o código funcionar e depois que você passa por essa fase de fazer o código funcionar se já está dominando as estruturas básicas da linguagem Aí sim você começa a despertar como é que a os paradigmas como é que essa forma de pensar de
cada linguagem vai te ajudar a direcionar o teu código a orientação objeto prega esses princípios Legal tem como aplicar esses princípios mesmo com um contexto para o sidural Ah está para aplicar Esse princípio aqui tem como aplicar o princípio da programação funcional no meu código orientado objeto sim você vai pescando essas ideias esses princípios e aplicando eu tenho certeza que no final o teu código vai ficar muito melhor então era essa mensagem que eu queria passar para vocês nesse vídeo né apontar para vocês a direção da imutabilidade ela começa a partir de pequenos movimentos né
você trocar ali talvez a forma de pensar do seu código de uma forma mais voltada para variáveis e alterações dessas variáveis e trocar isso por constante são pequenos passos que vai fazendo você ir na direção de um princípio que é muito interessante e que ele traz um um exercício muito grande né muita gente né muitas linguagens elas realmente odeiam a mutabilidade odeia alteração de variáveis não é o caso do JavaScript que permite isso de uma forma muito simples não é o caso de linguagens orientadas a objeto que permite essa mudança e faz parte da forma
de construir o algoritmo Mas você trazer esses princípios Sem dúvida vai te tornar um programador muito melhor então essa mensagem do vídeo chegou até aqui comenta aqui embaixo o que é que você quer ver no canal da Golden 2023 nos ajuda a chegar em 100 mil inscritos e te vejo no próximo vídeo [Música]