Cuidado con la programación funcional

Sdílet
Vložit
  • čas přidán 26. 06. 2024
  • En este video, te muestro cómo evitar un error común en JavaScript al usar parseInt dentro de un método map. Exploramos cómo se manejan los parámetros en funciones de primera clase y desmitificamos por qué no es un problema del lenguaje
    Artículo analizado: x.com/midudev/status/17936433...
    ▶ No te pierdas más directos en: / midudev
  • Věda a technologie

Komentáře • 266

  • @santiagowu5365
    @santiagowu5365 Před 23 dny +110

    Entiendo por qué el amigo no lo entiende. En Rust, un parámetro, en principio opcional, debe especificarse y validarse en tiempo de compilación. Por eso el comentario de "parseInt debe fallar si no recibe ambos parámetros" es bastante comprensible, porque en lenguajes compilados, todo debe ser explícito.

    • @Awakatoso
      @Awakatoso Před 23 dny +4

      llegué a la misma idea.

    • @adrianino9920
      @adrianino9920 Před 23 dny +19

      Pero esque si que está recibiendo los parámetros.... Ya fuera compilado, interpretado o edulcarado con mayonesa dulce

    • @adrianino9920
      @adrianino9920 Před 23 dny +3

      @@Awakatoso pues llegaste mal

    • @santiagowu5365
      @santiagowu5365 Před 23 dny +8

      Es que JS/TS tiene muchas cosas que pasan sin que uno se entere. En principio, nada en la síntaxis indica que el parseInt recibe los tres parámetros implícitos del método map

    • @ralvarezb78
      @ralvarezb78 Před 23 dny

  • @ronix1020
    @ronix1020 Před 23 dny +41

    Hay que admitirlo, como dicen en redes, es un error de capa 8 😅

  • @m3mbrillo_
    @m3mbrillo_ Před 23 dny +16

    Dotnet resolvió esos problemas tipando las expresiones lambadas y funciones (Func, Action, Predicate, etc) o incluso tipando la expresión a ejecutar del código (Expression) por ej el código escrito x => x == "abc" lo puedas analizar y dar como output un texto como $"is xyz equals to abc?"

    • @SkillisForNoobs
      @SkillisForNoobs Před 23 dny +5

      Venía a decir lo mismo, no es un problema de programación funcional, si no de la implementación de js y su falta de tipado y compilación.

    • @Ryukotsuseiii
      @Ryukotsuseiii Před 23 dny

      @@SkillisForNoobs eso mismo estaba pensando

    • @itzmegaskz
      @itzmegaskz Před 23 dny +1

      @@SkillisForNoobs Entonces el problema es del programador que elije usar un lenguaje no tipado sin saber como funciona.

    • @masqueraderx
      @masqueraderx Před 21 dnem +1

      @@SkillisForNoobs exactamente. No entiende nada el flaco que explica. Problema de la programacion funcional dice, un falopa barbaro.

  • @kozmicluis2552
    @kozmicluis2552 Před 23 dny +19

    En lenguajes functionales este tipo de functiones de map, filter, etc suelen tomar sólo 1 parámetro y si se necesita el índice, existen derivados con nombre como "map_indexed" y demás. Además Oscar tiene mucha razón, esta clase de errores tontos se pueden capturar en compilación por un buen sistema de tipado.
    También en un lenguaje funcional puedes hacer aplicación parcial, por lo tanto una función como parseInt estaría diseñada de tal forma quepodamos pasarle algo como parseInt(10) que crea otra función que hace parsing en decimal (radix 10). o parseInt(2) para binario,etc etc.
    A mí me suena más a un problema del tipado dinámico y débil que de la "programación functional" combinado con un diseño cuestionable de las funciones de orden superior en javascript y un poquito de falta de conocimiento sobre cómo funciona el lenguaje y las funciones de la librería estándar.

    • @wil-fri
      @wil-fri Před 23 dny

      Eso de generar funciones lo he visto con d3JS donde se tiene que hacer para las coordenadas

    • @bernardoherrera5217
      @bernardoherrera5217 Před 22 dny +3

      Exactamente esto no es un problema de programación funcional es de tipado dinámico

    • @wil-fri
      @wil-fri Před 22 dny +1

      @@bernardoherrera5217 ahí vamos. Si no sabes lo que necesita el metodo o función, no sabrás que lo estás haciendo mal

    • @bernardoherrera5217
      @bernardoherrera5217 Před 21 dnem

      @@wil-fri eso es bueno de los lenguajes fuertemente tipados, porque te obligan a seguir las reglas, y errores como esos no pasan, bueno a coste de más verbosidad

  • @pablopicosilvestre4055
    @pablopicosilvestre4055 Před 23 dny +19

    Hola midu, cuando explicas la base 10 dices que se lo está inventando. Pero realmente al igual que 101 en base 2 es igual a 2² + 2⁰ = 5 en base 10 sería 10² + 10⁰ = 100 + 1. Muy buen video.

    • @leonardohidalgo5127
      @leonardohidalgo5127 Před 23 dny +7

      parseInt() retorna solo enteros, esa es la razón. La explicación sencilla es que en base 10 no existen números con entero 0 a su izquierda, por eso 0002 en base 10 es igual 2, mientras que por ejemplo algo como '23abc45' te retorna 23 porque es el primer entero posible en la cadena e ignora todo lo siguiente porque es cortado con los caracteres alfabéticos que no existen en base 10, por lo cual toma todo el segmento posterior al entero en el string como descartado. A veces la gente se confunde y toma parseInt como algo que retorna una conversión numérica de un string, pero en realidad devuelve un parseamiento de un entero a partir de un string según la base especificada, y esa es una diferencia a tener en cuenta.

  • @idcmardelplata
    @idcmardelplata Před 23 dny +54

    Eso es un paradigma de programacion llamado "programacion tacita" o "point free", si bien algunos lenguajes funcionales la usan no son todos y no es algo exclusivo de la programación funcional. Ademas no entiendo porque casi siempre terminan reduciendo la prog funcional a un simple map/filter/reduce cuando el paradigma es inmensamente mas grande, estaria bueno que algun dia hablen de los functors, las monadas, los aplicativos, los monoides o algo tan simple como el curry o la aplicacion parcial y no terminen reduciendo un paradigma a 3 funciones...

    • @numeritos1799
      @numeritos1799 Před 23 dny +8

      > no entiendo porque casi siempre terminan reduciendo la prog funcional a un simple map/filter/reduce
      En general hay mucha ignorancia cuando se habla de paradigmas de programación. He trabajado con gente que "odiaba OOP" y luego me di cuenta de que nunca lo aplicaron correctamente.
      Cuando los temas son tan generales y, a primera vista, bastante simples, mucha gente se siente cualificada como para hablar y opinar al respecto.

    • @franciscochiri5240
      @franciscochiri5240 Před 23 dny

      Se debe caer siempre en los mismo por que es lo único que se usa. Estaría bueno conocer más a fondo como dice el amigo y no siempre hablar de lo mismo

    • @juanpablogarcia6293
      @juanpablogarcia6293 Před 23 dny +2

      ​@@numeritos1799Fuera de la ignorancia y que la gente a veces es perezosa (claro ejemplos es el odio a java, gracioso porque prácticamente todos los lenguajes opp de su época eran igual de verbosos y usaban metodologías bastante abstractas frente a las mas nuevas como python), es que la gente no usa programación funcional, requiere tiempo, mayor uso de abstracción y muchos de los lenguajes ya usan otros paradigmas que usan más y se pueden sentir más cómodos que volver a ser junior para entenderle a los temas avanzados del funcional, me incluyo en eso

    • @fabianvidal2723
      @fabianvidal2723 Před 23 dny +1

      Totalmente

    • @luisjosemedinasandoval8666
      @luisjosemedinasandoval8666 Před 23 dny

      En el video te lo explican amigo, no se sabe porque es pecado 🥶

  • @marc_gutii
    @marc_gutii Před 23 dny +12

    Me encanta cuando la gente empieza a recitar su CV diciendo que lleva programando desde la época de los dinosaurios. Da igual que lleves tanto tiempo, te puedes equivocar igual:/

    • @jcervants3566
      @jcervants3566 Před 23 dny

      Tiempo q se pierde publicando en ves de analizarlo... igual aplica para mi comentario jajaj

    • @ralvarezb78
      @ralvarezb78 Před 23 dny

      Es simplemente que en su trayectoria profesional parece haber usado lenguajes con características muy diferentes a JS.

    • @TuTioJhon
      @TuTioJhon Před 20 dny

      Tiene su razón de igual modo, Olvidate de la experiencia.

  • @julianvillaquira4127
    @julianvillaquira4127 Před 23 dny +8

    7:15 no se lo ha inventado simplemente 000101 = 101.

  • @rasputunga
    @rasputunga Před 23 dny +11

    La verdad no tengo experiencia profesional con JS, pero que este codigo no falle si que me parece contrainuitivo:
    function hello(name) {console.log(name)}
    hello("google", 2) # "google"

    • @fernandoacosta7356
      @fernandoacosta7356 Před 23 dny +4

      Posiblemente un poco porque en JS puedes declarar una firma en una función, por ejemplo recibe 2 parámetros, y cuando la mandas llamar le puedes pasar los parámetros que sean jaja, si le pasas menos de 2, los restantes quedarán undefined, si le pasas más de 2, solo tomará en cuenta los primeros y los restantes los ignora, por eso parseInt (que recibe 2 parámetros) lo puedes asignar como un callback con 3 parámetros.

    • @adrianino9920
      @adrianino9920 Před 23 dny +3

      Una cosa es contraintuitivo y otra que no conozcas lo que hace el map, si la callback del map recibe esos tres parámetros y el parseInt sus 3 propios pues es lo que hay.
      La callback del map no puede ser tan "inteligente" como para saber que argumentos espera recibir según que método le pases.

    • @albertoarmando6711
      @albertoarmando6711 Před 23 dny

      busca "funciones variadicas"
      $ const hello = (a, ...rest) => console.log(a, rest)
      $ hello("a", "b", "c") => a [ 'b', 'c' ]

    • @fready_star
      @fready_star Před 23 dny

      Opino igual. Hasta ahora solo he usado Java profesionalmente y me voló la cabeza la primera vez que vi ese comportamiento en JS. Me parecía muy confuso que la función no reciba exactamente lo que se le declara como parámetros y no falle

    • @fernandoacosta7356
      @fernandoacosta7356 Před 22 dny +1

      @@fready_star Java es un lenguaje compilado a diferencia de JS que es interpretado. Un lenguaje compilado siempre tendrá más chance de ser más estricto en cuanto a tipos y estructuras porque eso se revisa justamente en la compilación.

  • @santiagono1583
    @santiagono1583 Před 23 dny +1

    Como me encanta mirar al Midlu explicando aunque no le entiendo un carajo, debo decir que es por mi porque es excelente explicando. Saludos genio

  • @DxotilegnA
    @DxotilegnA Před 23 dny +8

    No sabía eso del. ParseInt. Gracias midu

  • @rnoriega6022
    @rnoriega6022 Před 23 dny +3

    En teoría, la función map recibe una función, anónima o no, que recibe 3 parámetros, pero puedes pasarle una que reciba 1, 2, 3, 4 o 57 parámetros, rellenando con undefined los parámetros extra. ¿Esta gochada también la permiten otros lenguajes?

    • @itzmegaskz
      @itzmegaskz Před 23 dny

      Si, JS no está tipado, podes pasarle lo que quieras.

    • @gonzaloerceg6816
      @gonzaloerceg6816 Před 22 dny +1

      si vas a pasar a un callback que recibe 8 parametros a una funcion que solo le va a pasar 3 entonces que haces que no sabes usar el lenguaje? Es igual que no sepas que no tenes que intentar acceder a una posicion X en un array en C si este esta fuera de sus limites

  • @angelhosuarez4165
    @angelhosuarez4165 Před 23 dny +2

    Tiene sentido por lo que asi funciona parseInt, sin embargo con respecto a otros lenguajes donde solo se pasa 1 solo parametro resulta contra intuitivo el recibir mas de 1 parametro en el map

  • @KFGNOE
    @KFGNOE Před 23 dny +4

    En este caso en concreto difiero un poco con tu opinion Midu.
    En mi opinion SI es un mal diseño en javascript.
    Si nos remontamos a los origenes de la programacion funcional, su raiz es el calculo lambda, en el cual las funciones puramente admiten un parametro de entrada (que con conceptos como la currificacion se pueden tomar varios parametros, pero sigue siendo uno solo en forma de tupla).
    Asi mismo, muchos otros lenguajes de programacion, en sus caracteristicas funcionales, siguen la regla de "1 parametro". Por ejemplo, en Java, cuando pasas una referencia de una funcion, solo se usa una sola entidad como parametro (o nunguna si la funcion referenciada no toma parametros) pero nunca dos o mas. Para poder usar mas parametros siguiendo este patron, se recurre a tecnicas como usar estructuras u objetos especificos que contienen los parametros necesarios.

    • @ralvarezb78
      @ralvarezb78 Před 23 dny

      ahora que mencionas lo de la tupla, vone yo a comentar que así es en python y que si quieres pasar múltiples parámetros puedes hacerlo empaqutando con la función zip() o pasando una tupla, sí

  • @Magico0o0
    @Magico0o0 Před 23 dny +1

    Al final de cuentas me hace acordar a la sobrecarga de metodos en java, (varios metodos pueden tener el mismo nombre pero no los mismos parametros en un mismo momento) por lo cual no se en javascript con algun ide tipo visual studio si podes acceder al js base del parseInt por ejemplo, pero en java con el manejo de clases basicamente le das ctrl + click a un metodo abris su implementacion y ves tal cual lo que esta recibiendo en el use case que estas utilizando, de igual manera eso en java de poner map(parseInt) no se puede, pero si se podria como pusiste al principio algo como map( n => parseInt(n)) . Respeto a los desarrolladores en JS porque hay mucha magia detras entre las funciones y el front, pero me sigue enamorando mas Java para toda la logica de negocios en las aplicaciones.
    Atte: Un Java Senior Developer con 10 años de experiencia ♥

  • @user-uc1wl5mx2q
    @user-uc1wl5mx2q Před 23 dny +24

    Que le paso al titulo jajaja

    • @zaitsev5990
      @zaitsev5990 Před 23 dny +1

      Qué decía ?

    • @face-censored
      @face-censored Před 23 dny +1

      @@zaitsev5990 Decia "Menuda 💩 de JavaScript" osea literalmente decia eso, con el emoji incluido xd

    • @rip.vanwinkle
      @rip.vanwinkle Před 23 dny +3

      @@zaitsev5990 menuda m* de JS creo

    • @jebgy4948
      @jebgy4948 Před 23 dny +1

      @@rip.vanwinkle si si, yo recién veo que le cambiaron el título

    • @franciscochiri5240
      @franciscochiri5240 Před 23 dny +1

      Jajajajajajaha

  • @asierpaz9190
    @asierpaz9190 Před 23 dny +1

    Creo que lo que quiere decir Oscar no es que javascript deba ser inteligente y entienda para que usas los parámetros. Yo lo que he entendido es que, según él, javascript debería fallar cuando a una función que espera como parámetro otra función tal que `(param1, param2, param3) => ...` recibe una función tal que `(param1, param2) => ...`. Creo que su queja va por el camino de que a javascript le da igual que a una función le pases un argumento, dos o cero, independientemente de que la firma de la función especifique que debe recibir n parámetros.

  • @elestayo
    @elestayo Před 23 dny

    Midu, eres un ejemplo de cómo ayudar y comunicar. Mañana me llega tu libro de git por cierto. Espero mucho de él... Gracias por todo lo que regalas...

  • @iamsteeveme
    @iamsteeveme Před 23 dny +1

    en elixir podemos hacer algo asi, supongo que es la solucion con programacion funcional:
    parse_int/1
    parse_int/2

  • @diegoestevez1045
    @diegoestevez1045 Před 23 dny +3

    por como es javascript, si, que no "falle" tiene sentido, pero en otros lenguajes, si fallaría debido a que no tiene sentido en el callback y sería bueno que lo revise. En definitiva, ese es el problema con javascript, ser muy permisivo lleva a bugs muchas veces.

    • @fernandoacosta7356
      @fernandoacosta7356 Před 23 dny +1

      En efecto, en JS puede no coincidir los parámetros que declaras contra los parámetros que le pasas al mandarla llamar, pero qué se le puede pedir a un lenguaje interpretado y cero tipado jaja.
      Por eso tira de typescript siempre que puedas.

  • @yojose1981
    @yojose1981 Před 23 dny +1

    Creo que el del mensaje de twitter se refiere mas a la sintaxis, esa sintaxis lleva a equivocos de este tipo donde no sabes que pasas a la funcion.

  • @abrahamborja292
    @abrahamborja292 Před 23 dny

    Muy interesante, como nunca entendía como eran las funciones como parámetros casi no las usaba

  • @TakaKeiji
    @TakaKeiji Před 23 dny +1

    La explicación es buena y me hace sentido, pero estas son cosas que me molestan que al final es poco intuitivo en varios aspectos

  • @jesuszerpa2964
    @jesuszerpa2964 Před 23 dny +1

    umm... vale si es mas un desconocimiento de lo que le esta pasando map, uno podría pensar que se le pasan los mismos valores que en otros lenguajes por lo parecido pero en el fondo realmente es diferente. Creo que es un poco culpa de ambas partes del programador por desconocer eso y de la persona que enseña a usar ese método ya que por lo general enseña esos otros parámetros pasados por defecto desde un principio

  • @rrrealpe2932
    @rrrealpe2932 Před 22 dny +1

    Javascript es como si en un concierto de Taylor Swift no cobraran por los tickets de entrada. Imaginen todo lo que va a pasar por esa puerta...

  • @user-xk8dv4bp4h
    @user-xk8dv4bp4h Před 23 dny +8

    Como hater de JS he de asumir que esto es falta de leer la documentación, aunque sea contraintuitivo no está mal

    • @alexps6522
      @alexps6522 Před 23 dny +2

      Este tipo de errores tan poco perceptibles fuera de debug lo único que van a ocasionar es que si acabas cometiendo uno, acabes gastando más tiempo y por ende amplíes los costes del proyecto.
      Tampoco hay que olvidar que no siempre estamos en nuestro mejor día de programadores, puede que aún conociendo el funcionamiento se te escape el error y luego tengas que buscarlo.

    • @user-xk8dv4bp4h
      @user-xk8dv4bp4h Před 23 dny +4

      @@alexps6522 no sé si es tan poco perceptible, llegar y usar una función sin leer cuáles o cuántos son sus argumentos me parece un error del programador, no del lenguaje. Y no lo digo con superioridad moral, tb me pasa, pero no por eso culpo al lenguaje.

    • @adrianino9920
      @adrianino9920 Před 23 dny

      @@alexps6522 si sabes usar map,. sabes que debe recibir una callback y cada iteración puedes hacer lo que quieras con el elemento en cuestión.
      Si no usas así el map es que no ssabes usarlo.
      (No te lo digo a ti personalmente eh)

  • @bazc_
    @bazc_ Před 23 dny +1

    Ha sio brutal! Gracias MiduGod

  • @ralvarezb78
    @ralvarezb78 Před 23 dny

    mh... en python usas map pasandole una función e iterables, si lo que quieres es pasar n parámetros, lo suyo es empaquetar con zip() y te puedes hacer por ejemplo una lista con m paquetes que cada uno contiene n parámetros. Estoy también con que no es un problema de javascript, sino de entender como funciona (en este caso) el método. Para la gente que usa lenguajes fuertemente tipados es contraintuitivo, pero no se le puede echar la culpa a un lenguaje de como funciona map en ese caso particular.

  • @FelipeSalazarSch
    @FelipeSalazarSch Před 23 dny

    Llevo años programando en java, python y TS, y puedo decir que es mucho mas intititivo y comprnsible que "falle", pero no es la culpa de javascript, haces un lamda en python y tambien pasa
    Un ejemplo más puede ser cuando tratas de elevar 0 a 0, que muchos lenguajes lo toman como 1, cuando es indeterminado matematicamente

  • @asistidor
    @asistidor Před 23 dny

    Qué intuición tienen o con qué "intuición" vienen. No parece muy elemental que les ocurra que funcione de esa manera como quieren, pero sí que como un extra aplicable sería.
    Quizás algo como [1,"2",3].map(*parseInt) para corresponder solo un parámetro, [1,"2",3].map(**parseInt), para corresponder dos...
    Para esta sintaxis solo igualarían numeroDeAsteriscos+nameFunction = (...n)=>nameFunction(n.slice(0,numeroDeAsteriscos))
    Tampoco que una urgencia.

  • @sergioacuna1772
    @sergioacuna1772 Před 23 dny

    Función de parámetro, primero se resuelve la función, y el valor del resultado queda como valor, aunque sea NaN o Null, o null, dependiendo del lenguaje.

  • @JValenteM92
    @JValenteM92 Před 10 dny

    jamás habría pensado de usarlo así ['1', '5', '1'].map(parseInt);, siempre lo uso con los parametros que requiero ['1', '5', '1'].map(n => parseInt(n))

  • @grbugs
    @grbugs Před 23 dny

    Creo que en realidad es problema de tipado, en la compilación js no marca errores de compilacion al usar tipos que no tienen la misma declaracion de en este caso parámetros, en lenguajes con kotlin que tambien es funcional marcaria error de compilación al no tener los mismos tipos.

  • @freire_gtr
    @freire_gtr Před 23 dny

    uff, imaginense entonces cuando entren a la discusion de recursividad vs iteracion en la programacion funcional. Las respuestas que hay ahi para justificar por que elegir iteracion vs recursividad son increibles. Como dato, Structure and Interpretation of Computer Programs explica bien esto desde el capitulo 1

  • @crowvampire
    @crowvampire Před 23 dny

    Gracias midu, como lo explicas tiene mucho sentido. Por cierto: qué herramienta usas para que te arroje el resultado mientras realizas el ejemplo:

  • @bernethe
    @bernethe Před 23 dny +1

    Eso que dice Midu se visualiza con: ['1', '5', '1'].map( console.log )

  • @agustinpizarro
    @agustinpizarro Před 21 dnem

    hay que saber como funciona map y parseInt, se puede solucionar haciendo un 'partial' para definir dos de los parámetros de parseInt

  • @ivanxpalacios
    @ivanxpalacios Před 23 dny

    te quiero mucho Midu ❤

  • @bernardoherrera5217
    @bernardoherrera5217 Před 22 dny

    ¡Gracias! Esto no es un problema de programación funcional es más bien del tipado dinámico, yo he programado en Scala por mas de 3 años en programación funcional y ese tipo de problemas no pasan, ni siquiera compilaría, eso se debe al tipado dinámico, y va a pasar en Python por exactamente lo mismo, no por la programación funcional

  • @griof
    @griof Před 23 dny +1

    Es que el método map (en cualquier lenguaje funcional) acepta un callback con solo un parámetro. Es problema de que si js quiere hacer cosas en funcional, debería hacerlas como lo hacen los lenguajes funcionales

    • @itzmegaskz
      @itzmegaskz Před 23 dny

      ¿Por qué?

    • @griof
      @griof Před 23 dny

      @@itzmegaskz Si uno quiere incluir características de lenguajes funcionales, debería hacerlos tal y como lo hacen los lenguajes funcionales (que es donde se ha investigado el tema y se han alcanzado soluciones). En los lenguajes funcionales (hasta donde sé, en todos), map siempre recibe un callback con un sólo parámetro. Si quieres pasar más de uno, pasa una tupla o utiliza currificacion o algo por el estilo, pero esta implementación es una chapuza

  • @sneidervaca5779
    @sneidervaca5779 Před 23 dny +1

    Gracias dios midu, nunca me había quedado tan claro que los errores no son del lenguaje sino del programador

    • @jleahr
      @jleahr Před 22 dny

      Es evidente que el programador es el que se equivoca
      La cuestión es...
      ¿Algunos lenguajes ayudan más a que cometas menos errores?
      Somos humanos y "errare humanem est"
      si es más fácil hacerlo mal que bien... terminarás haciéndolo mal
      Hay lenguajes que siguen sorprendiendo a programadores con años de experiencia
      Hay lenguajes aburridos, que no sorprenden a programadores con poca experiencia (suelen ser funcionales)
      Y sí hay errores en los lenguajes de programación, que muchas veces se intentan corregir

  • @pauloplazas9193
    @pauloplazas9193 Před 23 dny

    El experto sin ego: llevo 32 años programando, JS está mal.
    Midu: esa no es mentalidad de programador.
    No pude no reír jaja. Qué gran lección de humildad. A veces cuando alguien cree saber mucho se le olvida algo tan básico como pensar dos veces antes de opinar. El ego...

  • @Carlospp18
    @Carlospp18 Před 22 dny

    Creo que lo que oscar quiso decir es que si parseInt espera 2 parametros, si le pasas 3 deberia fallar

  • @RucadiDev
    @RucadiDev Před 23 dny +2

    Sí, es una cosa de javascript.

  • @ElPolemista
    @ElPolemista Před 23 dny

    Ahh claro, no lo había pensado.
    Que gracia

  • @yohcg
    @yohcg Před 23 dny

    Es solo desconocimiento de cómo funcionan las cosas. Con los años vamos perdiendo flexibilidad en el aprendizaje en general. Ya me está pasando. Pero lo que no hay que olvidar, es admitir que no podemos ni debemos saber todo y también que siempre puede haber alguien más que si sepa y ser humildes en aceptar lo que sabe. Saludos

  • @0xIg_dev
    @0xIg_dev Před 23 dny

    Cual es ese intérprete a tiempo real de js que usa?

  • @sergioacuna1772
    @sergioacuna1772 Před 23 dny

    Para salir de dudas, se puede rutear la misma función parseInt, y codificar en consecuencia.

  • @charlysalega4386
    @charlysalega4386 Před 23 dny +1

    hay gente toxica, midu solo explica que hay que asegurarse que parseInt reciba el valor actual de cada iteración y no el índice

  • @jorgejorge8878
    @jorgejorge8878 Před 23 dny

    Hermoso video

  • @numeritos1799
    @numeritos1799 Před 23 dny +1

    Esto no pasa en ningún otro lenguaje que conozca (Ruby, Python, etc). Si está haciendo un map de un array, no es del todo intuitivo que se pasen los otros argumentos a la función.
    Ambas array.map(parseInt) o array.map(n => parseInt(n)) son "programación funcional". En ambas se está pasando una función como argumento.
    Decir que esto error se da por "programación funcional" y no por la implementación específica de Javascript me parece bastante forzado.
    Disclaimer: la razón por las que pongo las comillas sobre "programación funcional" es porque functions as values != programación funcional. Son conceptos relacionados, sí, pero no son lo mismo.

  • @AlvM6428
    @AlvM6428 Před 23 dny

    Más contraintuitivo es que en JS un Array vacío no equivale a false

  • @JotaFOC
    @JotaFOC Před 22 dny

    Si existe la base unaria, que quizás no sea útil o que no lo hayan implementado es otra cosa.

  • @DeybisMelendez
    @DeybisMelendez Před 23 dny

    No tiene por qué fallar una función que recibe 2 argumentos al recibir 3. Podría fallar al revés, que solo reciba 1 argumento, pero ambos casos depende de cada lenguaje de programación y como esté hecha la función, los lenguajes de tipado dinámicos e interpretados suelen ser bastante permisibles.

  • @DavidAlmonacidF
    @DavidAlmonacidF Před 23 dny +1

    Es mejor usar `Number`.

  • @leunknownr805
    @leunknownr805 Před 23 dny +1

    Cómo que no es un problema de JS xD, si parseInt recibe 2 argumentos como máximo, y si se pasa esta función como callback al map, va invocarla con 3 parámetros, en ese sentido debería lanzar excepción por la cantidad dispareja, porque se reciben 3 y se esperan 2, así funciona JS, a una función se le puede pasar 1 millón de parámetros aunque se declare la función con 1 solo, lo que va a hacer JS es tomar el primero e ignorar todos los demás. Si map enviara 2 parámetros, si estaría contigo Midu, ya que se esperan 2 y se reciben 2

  • @luismunoz9126
    @luismunoz9126 Před 23 dny

    sabias que si cambias el nombre al video, la notificación queda con el nombre original del video? pues ahora lo se 🥶

    • @adrianino9920
      @adrianino9920 Před 23 dny

      Como se llamaba antes el vídeo por curiosidad

  • @josephmenasandoval3419
    @josephmenasandoval3419 Před 23 dny +1

    No me explico porque el primer resultado da 1, es decir como es posible que parseInt('1',0) en este caso, 1 no es un numero valido de base 0 por lo que tambien seria NaN

    • @Turko77777
      @Turko77777 Před 23 dny +1

      El radix (el segundo argumento) acepta los valores 0,2,3,4....36 (en palabras: el cero y luego del 2 al 36).Cuando es cero la función se comporta igual que cuando no se ingresa un argumento

    • @mikelucii6030
      @mikelucii6030 Před 23 dny

      ​@@Turko77777 y cuando es 10 también?

    • @Turko77777
      @Turko77777 Před 23 dny

      @@mikelucii6030 cuando es 10 toma la base 10, que es la que usamos los humanos. Si lo preguntas por lo que aparece en el final del video, el número que muestra es correcto "000101" en base 10 es "101", es decir es exactamente el mismo número, pero sin mostrar los ceros a la izquierda

    • @josephmenasandoval3419
      @josephmenasandoval3419 Před 22 dny

      @@Turko77777 gracias por explicar, bueno, y que pasa cuando uso 36 como base ? que simbolos usa para representar los numeros en base 36?

    • @Turko77777
      @Turko77777 Před 21 dnem

      ​@@josephmenasandoval3419 Es como el hexadecimal, que tienes los símbolos 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f. Pero en este caso llegas hasta la "z", ya que de la "a" a la "z" hay 26 letras (sin la ñ) más los 10 números del "0" al "9", tienes los 36.
      Yo lo he usado para ordenar cadenas que incluyen números -> ["11b","10b","9a"].toSorted( (a,b)=> parseInt(a,36) -parseInt(b,36))

  • @ernestofuentes9333
    @ernestofuentes9333 Před 23 dny

    Midu si hay un problema del lenguaje con el paradigma, tu debes saber como Javascript va a usar los parametros eso esta en el lenguaje

  • @yeison3314
    @yeison3314 Před 23 dny

    Nada como un buen lenguaje fuertemente tipado y compilado

  • @user-hy9hl6ie5o
    @user-hy9hl6ie5o Před 23 dny

    no me he encontrado con ese error pero porque me gusta ver los parametros que le paso jaja entonces nunca las escribo de esa manera mas corta.

  • @manuel-rubio
    @manuel-rubio Před 20 dny

    Llevo mucho tiempo programando con lenguajes funcionales y el currying que es lo que asumo que hace JS NO debería funcionar así. En "map" en todos los lenguajes pasa los parámetros uno a uno, si el "arity" de la función es mayor DEBE fallar. El hecho de que se pasen los parámetros según los parámetros que acepte la función es una cagada en el diseño del lenguaje.

  • @alexanderguillermor9519

    en conclusión: joven especifique

  • @ElMechaMecha
    @ElMechaMecha Před 23 dny

    En resumen, confían demasiado en el syntactic sugar

  • @andysierra5141
    @andysierra5141 Před 23 dny

    No debería tener más bien un comportamiento foreach?
    en lugar de pasar todos los elementos del array como parametros ?

    • @juanpablogarcia6293
      @juanpablogarcia6293 Před 23 dny +1

      Es Javascript, la regla es que no se comporta como otros lenguajes, esto para casi todo

    • @davemour
      @davemour Před 23 dny

      Al menos los tres parámetros de la callback están en el mismo orden, no como en php con sus homónimos array_map, array_reduce, array_walk...😅

  • @snithfferx
    @snithfferx Před 23 dny

    interesante, que bueno que nunca hago algo así cuando estoy trabajando con javascript. Eso de las bases me entra por un oido y me sale por el otro, nunca se me queda... creo que es mi problema con las mates.

  • @YairMondragon-cp9ld
    @YairMondragon-cp9ld Před 23 dny +5

    El cambio de título jajajaja

  • @HectorMiuler
    @HectorMiuler Před 20 dny

    El problema es por ser lenguaje dinamico, no te das cuenta de los argumentos, tipos o cantidad , en un lenguaje compilado es lo primero que saltaria o te fijarias, en dinamico infiere todo, y ese es el problema, lo que normalmente hace el compilador y el IDE, en uno dinamico tu cerebro tiene que hacerlo.

  • @Adrianemax
    @Adrianemax Před 9 dny

    Sí es un problema de javascript y no de la programacion funcional.
    En la programacion funcional en un map la funcion que usa de parametro solo tiene un parametro (el elemento de la lista), y con ese opera. Es cosa de javascript que te meta otros dos parametros, no es nada intuitivo sobre como debe ser una funcion de orden superior.
    En haskell que es puramente funcional solo usa el elemento como parametro de la funcion.

  • @omaramo190683
    @omaramo190683 Před 20 dny

    en js no falla pero en otros si....
    punto para los otros lenguajes y sí, es un fallo de js (ya sea por diseño o falta de tipado o por flojera 😆😅 etc)

  • @Haddougui
    @Haddougui Před 23 dny

    Mejor crear un proceso para traer datos numericos desde el input del programa sin necesidad de añadir el parseInt. Tratar inteligentemente la base de datos.

  • @miguelamda
    @miguelamda Před 23 dny

    Hay que entender bien qué argumentos reciben las funciones, como el map. En Haskell es mucho más robusto. La idea original funcionaría porque solo recibe la función y la lista.

  • @jleahr
    @jleahr Před 22 dny

    CUIDADO!!! No es la programación funcional
    es una combinación de factores, en el que la integración de programación funcional colabora en este problema
    trabajo con varios lenguajes funcionales, y "no es normal" que ocurran cosas como estas
    Acepto que s la integración de programación funcional en js o la programación funcional de js
    Pero no generalicemos, en lenguajes funcionales, comportamientos de este tipo es muy difícil encontrarlos
    Y se ha mencionado Rust. En Rust, que no es funcional, esto tampoco puede pasar "fácilmente"

  • @valp_co
    @valp_co Před 23 dny

    Óscar quedó retratado

  • @Martin97perussini
    @Martin97perussini Před 23 dny

    Que auriculares usas midu? alguien sabe?

    • @jorgemacias915
      @jorgemacias915 Před 23 dny +1

      @@Martin97perussini En su página de Twitch viene su setup, ahí dice todo lo que usa y si no mal recuerdo también hay un enlace para que lo compres.

    • @Martin97perussini
      @Martin97perussini Před 23 dny

      @@jorgemacias915 buenísimo, me paso por ahí cuando prenda entonces

  • @calimio6
    @calimio6 Před 22 dny

    La gente quejandose por un lenguaje que se diseño para no romper el navegador se comporta exactamente como se diseñó 😂. Les dejo una pista, el parseFloat cumple correctamente la tarea al usarlo con map

  • @NataDassl
    @NataDassl Před 23 dny

    justo termine la clase sobre funciones veamos de que trata el video jaja

  • @patriciorios6593
    @patriciorios6593 Před 17 dny

    Para mi js si esta "mal hecho", ya que si fuese " tipado " no existirian este tipo de problemas.

  • @ThebullNot
    @ThebullNot Před 23 dny +1

    Midu logré hacer mi chat en linea

  • @afxcrush41
    @afxcrush41 Před 23 dny

    mi cerebro no procesa esto

  • @Golden-jv2uo
    @Golden-jv2uo Před 23 dny +1

    difiero, sigue siendo contraintuitivo y poco tiene que ver con saber o no programacion funcional

    • @gonzaloerceg6816
      @gonzaloerceg6816 Před 22 dny

      es totalmente intuitivo de que si tenes una funcion que le pasa 3 parametros a un callback esta le va a pasar 3 parametros al callback

  • @JairMosquera-dv5li
    @JairMosquera-dv5li Před 23 dny

    thanx for explication😅

  • @JoseRegalado
    @JoseRegalado Před 23 dny +1

    Yo trabajo con elixir, vengo de php y python. SI, debe reventar con un error, no entiendo como se puede justificar algo así. Hay que asumirlo y punto, si es una mierda! y ya!.

  • @miguelvasquez9849
    @miguelvasquez9849 Před 23 dny

    En python no pasa eso

  • @oscardpazb
    @oscardpazb Před 23 dny

    Re interesante :) y a los presumidos, tocar pasto :3

  • @enriquemarin159
    @enriquemarin159 Před 23 dny

    Cuando una venta no cuadraba porque de pasar decimal a valor en centavos hacíamos 9.95 * 100 y daba 994 💀💀💀

    • @gonzaloerceg6816
      @gonzaloerceg6816 Před 22 dny

      pero so boludo, no es culpa de js que no sepas que ecuación tenes que hacer xd

  • @isaacmartinez3596
    @isaacmartinez3596 Před 23 dny

    Pero... ¿hay midu?

  • @maicolavila5464
    @maicolavila5464 Před 23 dny

    midu era callarlo no humillarlo

  • @Brynjar1
    @Brynjar1 Před 20 dny

    Conclusión, hay que leer las especificaciones del lenguaje y no hablar sin saber

  • @raidnorgames6561
    @raidnorgames6561 Před 22 dny

    Primera vez que escucho lo de la programacion funcional o puede ser que ya la haya escuchado y no le haya prestado tanta atencion.

  • @davemour
    @davemour Před 23 dny

    Este me lo he comido varias veces 😂

  • @crucoba
    @crucoba Před 23 dny

    JS debería dar error al tratar de pasar un tercer argumento a una función que no lo espera. Esto es el problema, en mi opinión.

  • @Ralfug-HF
    @Ralfug-HF Před 23 dny

    ... buuuuuuuuuuuuenazo!!!

  • @nelson6e65
    @nelson6e65 Před 23 dny

    1:15 Usando Typescript ya te das cuenta. Jaja

  • @licethmeza-wv5dm
    @licethmeza-wv5dm Před 23 dny

    Prueba el new Date("") -> batman

  • @Turko77777
    @Turko77777 Před 23 dny +1

    Ok, ok esta vez y en este caso particular no es culpa de javascript, ahora falta por desmentir los otros 1000 casos donde falla.
    La coerción de tipos es más mala que escupir a tu madre en su cumpleaños. Es tan mala que se inventaron otro lenguaje (typescript) que opera sobre este lenguaje.
    Es un lenguaje pequeño, con pocas funcionalidades. Pero su documentación es extensa, porque está llena de explicaciones de casos excepcionales que hay que considerar. Es tan complejo, que nadie se atreve a hacer un motor de javascript desde cero y llevamos casi 2 décadas con el monopolio de google.
    Hace 15 años que se debió haber descontinuado este lenguaje, pero en lugar de eso se lo llevaron al servidor. Una fatalidad

  • @imjesusleal
    @imjesusleal Před 23 dny

    Todo bien con lo que dices, Midu, concuerdo. Pero ahora explicame este parseInt(0.000000005) output: 5 hahaha

    • @gonzaloerceg6816
      @gonzaloerceg6816 Před 22 dny +1

      parseInt lo que hace es transformar un string en un numero (asi que para q le pasas un numero), cuando le pasas el numero lo que hace es transformarlo en string y posteriormente agarra y lo transforma. 0.000000005 es "5e-9", la funcion comienza a transformar en numero desde inicio hasta encontrar un caracter que no sea un numero, asi que la cadena "5e-9" comienza 5 y despues encuentra "e" asi que deja y devuelve 5

    • @imjesusleal
      @imjesusleal Před 22 dny

      @@gonzaloerceg6816 o sea le pase un flotante precisamente para eso, a ver si lo parseaba a un entero. La explicacion esta tremenda, sigo pensando que es contra-intuitivo (al menos para como yo aprendi numeros enteros y numeros de coma flotante) tener una funcion que te parsea a un entero, pero al pasarle un flotante te devuelva literalmente el valor de la mantissa xD pero weno cada lenguaje es un mundo, no esta ni mal, ni bieen. Gracias por la explicacion igual gonza!

  • @luisbaquiax5831
    @luisbaquiax5831 Před 22 dny

    En otras palabras a leer la documentación jajaja

  • @sefirotsama
    @sefirotsama Před 23 dny +1

    Que si hombre, que sí es culpa del diseño de JS que no ha creado una API para map/reduce/filter que sea consistente para pasar funciones como argumento y le ha enchufado todos los parámetros a la función. Python no habría fallado porque para pasar el contenido de un array a una función hay que usar explícitamente el argument destructuring, en lugar de hacerlo como en JS donde las cosas ocurren mágicamente, te puedes parámetros obligatorios y todo se vale con esa gramática tan de M que tiene.
    En lugar de decir que es culpa de la programación funcional (como si algo tuviera que ver), dile a tus alumnos que hasta que aprendan a programar, primero usen un type checker y un debugger, o van a saber lo que es pasar horas con cara de gilipollas frente a la pantalla.

    • @gonzaloerceg6816
      @gonzaloerceg6816 Před 22 dny

      map le pasa 3 parametros al callback y te sorprende que le pase 3 parametros? es culpa de no saber como funciona map, no es tan dificil, hay una documentación muy bonita que te dice explicitamente que map pasa 3 parametros al callback. El hecho de que pienses que las cosas funcionan magicamente es simplemente porque no sabes del lenguaje

  • @michae301
    @michae301 Před 23 dny

    Ojo cuidado que tiene 32 AÑOS en la programación no se atrevan a corregirlo :o