4 alternativas pra não usar FOR

Поделиться
HTML-код
  • Опубликовано: 4 мар 2024
  • 📚 Livro para entender estruturas de dados e algoritmos: amzn.to/4bYu4VE
  • НаукаНаука

Комментарии • 109

  • @Nocfairy
    @Nocfairy 3 месяца назад +40

    Alternativas pra não usar for
    Alternativas: for

  • @josealysson2166
    @josealysson2166 4 месяца назад +118

    A mudança é meramente visual, visto que por debaixo dos panos irá ser feito um for

    • @LIMAKEYS
      @LIMAKEYS 4 месяца назад +30

      Exato. Mas tbm tem a questao de melhorar a legibilidade do código, deixando explicito o que aquele "for" faz. Além de aplicar o Dont Repeat Yourself

    • @kevingood10
      @kevingood10 4 месяца назад +13

      isso depende, se a pessoa faz um map e apos um filter, mais facil usar somente um for, vai ser mais rapido ja que so vai itinerar 1x, mas dependendo mt sai quase a msm coisa kkkkk

    • @LIMAKEYS
      @LIMAKEYS 4 месяца назад +2

      @@kevingood10 exatamente isso. Nesse caso talvez seja mais semântico o uso de um for puro do que uma dessas funções de alta ordem. Mas ainda depende mto do caso, pode ser q fique ainda mais claro o q esta sendo feito se for dividido nas duas funções. Tudo vai depender de como os devs envolvidos interpretam o código

    •  4 месяца назад +3

      Na real, toda linguagem é um conjunto de funções estéticas, que no fim é compilado em códigos simples onde nem "for" existe. A maioria dos compiladores traduzem no "goto" e no comparador lógico.
      Mas a diferença de programar no paradigma funcional para imperativo é absurda.
      Faz a leitura muito difícil para quem não a domina.
      Enquanto um cara que domina uma linguagem imperativa, com OO, geralmente vai entender a maioria dos códigos, independente da linguagem.

    • @igomesigomes
      @igomesigomes 4 месяца назад +2

      @ Descendo para o nível de máquina, existe sim, só não se chama "for" e sim "loop" do x86.

  • @adrianop.araujo9714
    @adrianop.araujo9714 4 месяца назад +18

    Melhor canal, enquanto to aqui nas calls desnecessárias do dia a dia to aprendendo demais contigo! Brabo demais kkkk

  • @miltonvincenttis6680
    @miltonvincenttis6680 3 месяца назад +14

    Nada é mais rapido, mais explicito e legível do que um loop for!

  • @nium-xp
    @nium-xp 4 месяца назад +24

    Sobre o `reduce` não ser built-in (sua fala em 7:38), na verdade por existir na biblioteca `functools` é considerado built-in (muitas pessoas confundem com a biblioteca `builtins` ou o próprio `__builtins__`), e uma curiosidade é que na versão 2 do Python o `reduce` não precisava ser importado, a decisão de movê-lo para uma biblioteca (que aconteceu na transição para a versão 3) foi extremamente contraditória: "ninguém usa".

    • @carloshenrique-ov5nk
      @carloshenrique-ov5nk 2 месяца назад

      Dizer que reduce é built-in por estar em functools é incorreta. Ela não é built-in no sentido tradicional, pois precisa ser importada

  • @elielcesar1283
    @elielcesar1283 3 месяца назад +1

    didática excelente!

  • @robertlopes7068
    @robertlopes7068 2 месяца назад +1

    Que vídeo incrível! Parabéns!

  • @rinaldobsb
    @rinaldobsb 4 месяца назад +6

    Antes de tudo, parabéns pelo vídeo, excelente conteúdo!!! Na verdade, a gente pode colocar o Python no meio, junto com JS: apesar da comunidade Python usar o for de modo bem constante, quem é mais avançado usa muito List Compreention e lambda, que são abordagens mais funcionais. Eu mesmo, tenho usado mais essa abordagem pq deixa o código muito mais conciso e rápido. Valeu meu caro!!!!

  • @fernandobalieiro
    @fernandobalieiro 4 месяца назад +10

    golang que é bom, só podemos usar for loop e é mais do que o suficiente para 100% dos casos e nunca senti falta de ter algum syntax sugar

    • @leandromf31
      @leandromf31 3 месяца назад +1

      Pois é… eu com meu for faço tudo sem problemas, não sei pra que esse tanto de frescura…

  • @miguellopes9177
    @miguellopes9177 4 месяца назад +5

    me lembro da época que eu ficava pensando "filter ou eu faço um while com if" (eram casos de não reutilização ta)
    grandes questões da computação.

  • @Mor3Lif3
    @Mor3Lif3 4 месяца назад +4

    Não passava perto do reduce tem algo tempo já... Acabei de perceber o tanto de linha desperdiçada nos meus dataframes, em vez de usar o reduce.

  • @joelmattos7276
    @joelmattos7276 4 месяца назад +11

    MAP [func(i) for i in list]
    FILTER [i for i in list if func(i)]

    • @ABarros548
      @ABarros548 3 месяца назад +1

      tutorial acima de como deixar seu código não "pythonico", "explicito é melhor que implícito"

    • @williamsilva77612
      @williamsilva77612 3 месяца назад

      ​@@ABarros548e isso é lindo

  • @melkdesousa9302
    @melkdesousa9302 4 месяца назад +7

    Estou desconfiando que essa saga está em Loop.

  • @mateusvega3882
    @mateusvega3882 3 месяца назад

    Seu canal é muito bom!

  • @nandomax3
    @nandomax3 2 месяца назад +1

    Clojure loop sao funções recursivas com otimização de tail head

  • @gabrielfigueiredo7344
    @gabrielfigueiredo7344 4 месяца назад +3

    Acho essas funções muito interessantes, uso elas quando estou com preguiça nos meus projetos de estudo. Porém, eu acho que o método de iteração ou recursão, na maioria das vezes, acaba sendo menos complexo em termos de bigO. Excelente Vídeo!

  • @DjEdu28
    @DjEdu28 3 месяца назад

    no js também temos o foreach, que intera em cada elemento da lista, nessa interação a referência passada é exatamente do item na lista, então se modificarmos o valor da interação, será modificado o valor no array original.

  • @gustavohitomi1999
    @gustavohitomi1999 4 месяца назад +3

    Creio que o exemplo dado de map em python tenha sido ruim, algumas dicas:
    A questão é que a galera usa errado o map em vários casos, o exemplo de map no vídeo é ruim (mas de forma didática serve) pra Python, já que o correto nesse caso seria utilizar um list comprehension.
    Use cases para map:
    Você precisa de um iterator para evitar a criação de uma lista grande na memória.
    Você já tem uma função definida para aplicar.
    Use cases para list comprehension:
    Você deseja uma maneira concisa e legível de expressar a lógica de transformação/filtro/aplicar função.
    Lidar com transformações complexas onde a criação de uma função separada é questionável (só irá usa-lá uma vez, por exemplo).

  • @joaomendoncayt
    @joaomendoncayt 4 месяца назад +8

    O conceito do "reduce" é mais complexo do que reduzir todos os números para um só, tem mais a ver com modificar "todos os itens" para "outra estrutura de dados" mutando um acumulador (não fazer copias na memória no processo).
    Ótimo video!

    • @danielhorodenko8587
      @danielhorodenko8587 4 месяца назад +2

      Reduce é tenso demais de masterizar

    • @joaomendoncayt
      @joaomendoncayt 4 месяца назад

      @@danielhorodenko8587 é muito simples quando percebes o control flow de modificar o acumulador

    • @kevingood10
      @kevingood10 2 месяца назад +1

      eu uso muito o reduce (aggregate) no c#

  • @mazotti
    @mazotti 3 месяца назад

    Ok, seus vídeos são muito bons.

  • @nandomax3
    @nandomax3 2 месяца назад +1

    Java aderiu super ao paeadigma funcional, tem tudo do lado esquerdo, map reduce filter foreach, oneach, eu codei java por 5 anos e não lembro a ultima vez que escrevi um for em java

  • @leobetosouza
    @leobetosouza 2 месяца назад

    O mais legal do reduce é que só com ele vc consegue fazer as outras funções todas que vc mostrou aí

  • @youtub-fj8mu
    @youtub-fj8mu 3 месяца назад +2

    Eu odeio código declarativo
    Decorar uma caralhada de funcão q mudam dependendo da linguagem é um saco, prefiro aprender o algoritmo usar um loop

    • @youtub-fj8mu
      @youtub-fj8mu 3 месяца назад

      E a distinção não é funcional/imperativo
      É imperativo/declarativo e funcional/procedimental/orientada a objetos

  • @leogcavalli
    @leogcavalli 4 месяца назад +1

    Maneiro o conteúdo. De fato concordo que substituir o for por qualquer coisa mais legível é o caminho certo a seguir, só não sei se eu travaria uma PR por causa disso. Depende do caso, claro.

    • @leandromf31
      @leandromf31 3 месяца назад +1

      Queria entende como um dev não acha o for legível… Muito mais simples de usar, sem frescuras, no pelo.

    • @leogcavalli
      @leogcavalli 3 месяца назад

      @@leandromf31 tem casos que não faz muita diferença trocar o for por outro loop, mas tem casos que faz muita diferença.
      Sigo o princípio de que a gente deve escrever código pros outros. Então tento fazer o mais legível possível. Não vou impor isso ao pé da letra em PR alheia, mas se tiver grotesco tem que pedir pra refatorar

  • @darkside3ng
    @darkside3ng 4 дня назад

    Muito bom

  • @voguh__
    @voguh__ 3 месяца назад

    No typescript eu uso o filter, map, reduce, porém uma coisa que eu raramente uso é um forEach, prefiro um for of, for in, ou um classico for i, pra mim fica mais fácil ler o codigo com um forof/forin/fori do que com um forEach

  • @fillipeamg5877
    @fillipeamg5877 3 месяца назад

    No pyhton é tentador sempre usar da bala de prata list comprehension

  •  4 месяца назад +3

    Acho que nem é "alternativa pra não usar o for", mas sim "alternativa pra não reinventar a roda"

  • @Gustavo054
    @Gustavo054 2 месяца назад

    se eu não me engano no JS a perfomance desses métodos de array é menor que implementar o for. Enfim, é uma forma de diminuir a leitura, mas muitos devs se confundem com o que tá acontecendo no código se ele não tem a prévia do que esses métodos fazem, e tem o lance de ter que trabalhar com Promise.All no retorno desse métodos caso tenha que trabalhar com codigo assincrono. Tem os prós e contras, mas cada caso é um caso. Particularmente eu gosto de utlizar porquê diminui código e pra mim, ajuda na leitura.

  • @RafaeruC
    @RafaeruC 2 месяца назад

    apesar de ser um pouco mais dificil de entender, acho q seria valido ter feito as funções para implementar na mão com recursividade, assim ficava mais claro que da para não usar o for.

  • @Judenilson
    @Judenilson 3 месяца назад

    SENIOR é o cara q consegue entender qualquer código, principalmente Assembly. E quanto mais construo meus algorítimos usando o básico, menos problemas de deprecated tenho.

    • @kevingood10
      @kevingood10 2 месяца назад +1

      entao fodeu, pq n manjo nada de assembly e nao tenho curiosidade de implementar algo em assembly (apesar de ja ter estudado)

    • @Judenilson
      @Judenilson 2 месяца назад +1

      @@kevingood10 mano se vc tá conseguindo faturar uma grana o resto é bobagem. 😁👍🏽

    • @kevingood10
      @kevingood10 2 месяца назад

      @@Judenilson isso é vdd kkk

  • @viniciusmachadorodrigues1724
    @viniciusmachadorodrigues1724 4 месяца назад +1

    eu como desenvolvedor go nem me preocupo muito com isso

  • @alessandrofranca4304
    @alessandrofranca4304 3 месяца назад

    Essa implementação do reduce poderia ser bem otimizada, melhorando esse if / else por que sabemos que só vai entrar no if uma única vez.

  • @jeanoliveiiira
    @jeanoliveiiira 3 месяца назад +6

    Ou seja, se eu ver alguém falando pra nao usar for, eu vou mandar ele calar a boca

  • @tkrafael
    @tkrafael 3 месяца назад

    Cara... Map reduce e esses paradigmas funcionais são muito mais antigos que o golang. Javascript por exemplo usa map reduce ha bastante tempo

  • @muscles5714
    @muscles5714 3 месяца назад +1

    em um fórum um usário perguntou "E como uso (map) isso em golang" - O Rob Pike falou "Você sabe usar o for?" 😂😂😂😂😂

  • @quilamcz
    @quilamcz 4 месяца назад

    você tá dizendo pra evitar o for mesmo que ele seja a melhor opção? porque essas 4 alternativas possuem cada uma o seu caso de uso tal como o for

  • @ABarros548
    @ABarros548 3 месяца назад

    Do zen do python: Explicito é melhor que implicito. (caso não conheça, execute "import this" e leia)
    Em outras palabras, um for loop é mais "legivel"/"compreensivel" que o reduce(), o mesmo vale para "compreensões de lista".
    Você jovem dev, não vá no hype desses papinho de "eu não uso isso, eu não uso aquilo", lembre-se código bom é código simples. A "beleza" de um código é inversamente proporcional a sua complexidade.

  • @diiegors90
    @diiegors90 4 месяца назад +1

    Opa, o Java desde a versão 8 está mais para o meio desse quadro aí...
    Excelente vídeo.

    • @henrycgs
      @henrycgs 4 месяца назад

      beeeeeem mais ou menos.

    • @user-db2uj9vc7s
      @user-db2uj9vc7s 3 месяца назад

      o hype do paradigma funcional, pra mim parece, a mesma coisa que aconteceu com o paradigma orientado a objetos mas so o tempo pode responder

    • @henrycgs
      @henrycgs 3 месяца назад

      @@user-db2uj9vc7s eu suspeito que não. o hype do OO aconteceu porque as pessoas tavam cansadas de se bater com C, Pascal e Fortran. com o tempo se percebeu que OO não é tão bom assim e que gera inúmeros problemas de manutenção, escalabilidade, performance, representação de dados e organização de código. o paradigma funcional (de verdade, não o que o JS faz) é perfeitamente reutilizável porque as funções são todas puras. não existem bugs tipo null reference ou bobagem desse tipo. é uma pureza matemática que OO nunca teve, OO foi baseado em achismos

  • @mateuscaetano-ik8ed
    @mateuscaetano-ik8ed 4 месяца назад +1

    Que descoberta esse canal

  • @Beralta
    @Beralta 3 месяца назад

    conteúdo true

  • @pugboladao
    @pugboladao 4 месяца назад +1

    Que program é esse que tu usa pra desenhar e escrever?

  • @BLACK7631
    @BLACK7631 3 месяца назад

    Dev senior de verdade NÃO fala "não pode usar else, não pode usar for, tem que usar xpto...". Tudo tem sua utilidade e momentos, igual design patterns. Um laço for por exemplo, será mais performático que um .sum ou .reduce dado o custo da chamada de função, é o mesmo caso da recursividade, código interativo é mais rápido. Agora tem que ponderar com relação a legibilidade, eu uso muito .map e .find e . filter do js, mas não uso .reduce ou .foreach. O pessoal do anti "else" sempre puxa pros casos mais absurdos onde o código tem um zilhão de if aninhado e já teria que ser reescrito igual (se possível, pois existem situações raras que não vale a pena ou dá).

    • @kevingood10
      @kevingood10 2 месяца назад

      eu uso else quando estou sem paciencia kkkkk

  • @inosuke3626
    @inosuke3626 3 месяца назад

    O for loop sendo implementado implicitamente dentro da função nativa

    • @TheEmerson009
      @TheEmerson009 3 месяца назад

      Isso é verdade para algumas linguagens, apenas. Elixir provavelmente faz como Ocaml e F#, utilizando recursão/TCO

  • @GuilhermeHenrique-nm8lj
    @GuilhermeHenrique-nm8lj 4 месяца назад +1

    Depende, se vc estiver usando js, os array methods, como o map, ele funciona de forma concorrente, é mais rápido, mas pode ter problema de concorrência, por exemplo em um banco de dados, retornando erro de relacionamento errado

  • @Magarovv
    @Magarovv 2 месяца назад

    Faz um While então

  • @0ericm
    @0ericm 3 месяца назад

    slk depois de tanto programar em JS a syntax do python me parece muito feia

  • @victorricarte3954
    @victorricarte3954 2 месяца назад

    SUM e REDUCE fazem a mesma coisa?

    • @oczywsziysya
      @oczywsziysya 29 дней назад +1

      dá pra usar reduce pra soma dos elementos do array, mas o reduce é de uso super geral, você pode usar sempre quando precisar passar por todos os elementos do array e, com base neles, reduzir o array a algum outro valor
      tem que entender qual o papel do "acumulador" e do "valor inicial" pra tentar entender melhor os casos de uso

  • @jricardoprog
    @jricardoprog 4 месяца назад +1

    Acho for mais rápido, menos memória, menos variáveis, menos trabalho para o gc.

  • @heraldo623
    @heraldo623 4 месяца назад +1

    Iteração é muito mais performática do que invocação de função

    • @williamwagner1815
      @williamwagner1815 4 месяца назад

      @@GutoGalego Você sabe que o artigo que você mandou está justamente indo de encontro o que o Heraldo falou ali em cima né?
      "Both for and for..of are 3.5 times faster than reduce. However, the loops are much more verbose"

    • @henrycgs
      @henrycgs 4 месяца назад

      fale por sua linguagem :) em rust, o uso dessas funções compila pra exatamente o mesmo assembly que se você escrevesse a iteração na mão.

  • @suaopniao5878
    @suaopniao5878 2 месяца назад

    Quando eu vejo o pessoal falando "estou aprendendo demais com os seus videos" acho que evidencia o quão baixo é o nivel de um programador médio, mostrando que esse papo de que o mercado está impossivel é só um monte de iniciante ou pessoa que não sabe programar de maneira efetiva tacando a culpa em qualquer coisa que não seja a si própria.
    O jeito que ele traz os videos são muito bons, mesmo eu discordando de muita coisa, tomara que ele traga conceitos ou ideias de niveis minimamente dificeis. Eu ainda prefiro muito mais esse cara do que um youtuber de fofoca.

    • @baruqrodrigues
      @baruqrodrigues 2 месяца назад +1

      Veja, o problema da produção de conteúdo é que quanto mais "difícil" e complexo é o teu conteúdo menos gente vai ter pra consumir ele. Acho q o papel dele tá sendo bem maneiro, apresentando soluções de senior pra qm é mais newbie

  • @ben-hurcastilho2237
    @ben-hurcastilho2237 3 месяца назад +2

    Ou seja ..... você "terceirizou"a criação do FOR .... trocou um FOR feito por você, pelo FOR feito por um programador MAIS EXPERIENTE .... perfeito ....

  • @DaviXG7Nao7
    @DaviXG7Nao7 4 месяца назад +1

    E se eu wuiser fazer uma coisa pra cada jtem do array

    • @supermalavox
      @supermalavox 4 месяца назад +1

      Se eu entendi bem tua pergunta, aí você pode usar combinações de map, filter e reduce no mesmo comando! Mesmo porque essas três formas aceitam funções como parâmetro inicial, e a função que você vai passar pode influenciar nos itens da array!

    • @Zeuszsz
      @Zeuszsz 3 месяца назад +1

      ​@@supermalavoxNão entendi. Pode mandar um código exemplo do que você quer expressar?

    • @supermalavox
      @supermalavox 3 месяца назад +1

      @@Zeuszsz, acho que o que ele quer é uma espécie de combinação de map e filter, como por exemplo só fazer algo no array se esse array (ou list no caso do Python) tiver a característica x.
      Por exemplo, só multiplicar por dois os itens da lista que forem ímpares.

    • @Zeuszsz
      @Zeuszsz 3 месяца назад

      @@supermalavox array.map( value => {
      if (value === "alguma condição") {
      "faz alguma coisa"
      }
      })

  • @stuartty100
    @stuartty100 2 месяца назад

    Resumindo, pra deixar de usar o for vc coloca ele dentro da function

  • @marcuspiccinini2822
    @marcuspiccinini2822 3 месяца назад

    Não vi C# no conteúdo

  • @MonkeyDSkrill
    @MonkeyDSkrill 4 месяца назад +1

    o cara parece o cariani kkkkkk

  • @marcuslucasjb
    @marcuslucasjb 2 месяца назад

    que exemplos são esses cara? meu deus... falo nada

  • @joaovblima
    @joaovblima 4 месяца назад +1

    FP >

  • @gabrielhenrique073
    @gabrielhenrique073 3 месяца назад

    Nao muda nada, visualmente um loop é muito mais fácil de entender, não muda nada na velocidade de percepção do usuário final. Esses vídeos de faca isso e não aquilo é só baboseira

  • @gustavinus
    @gustavinus 3 месяца назад

    Grande porcaria. Quando for compilado vai virar exatamente a mesma coisa. É basicamente uma função que faz o loop pra você.

  • @leonardoknunes9626
    @leonardoknunes9626 4 месяца назад

    somente pessoas com altos niveis de psicopatia usando .reduce

    • @kevingood10
      @kevingood10 2 месяца назад

      eu fazendo filter com reduce kkkkkkkkk