CursosEmpresasBlogLiveConfPrecios

Proyecto: Construyendo filas y celdas

Clase 17 de 23 • Curso de Programación Funcional en JavaScript por Bedu

Clase anteriorSiguiente clase

Contenido del curso

Introducción al curso y conceptos base
  • 1
    Qué aprenderás sobre la programación funcional

    Qué aprenderás sobre la programación funcional

    01:57
  • 2
    Programación funcional: qué es

    Programación funcional: qué es

    00:15
  • 3
    Boilerplate: Base para el proyecto del curso

    Boilerplate: Base para el proyecto del curso

    02:16
Funciones
  • 4
    Funciones Algebraicas y Funciones de JavaScript

    Funciones Algebraicas y Funciones de JavaScript

    02:49
  • 5
    Qué son funciones puras

    Qué son funciones puras

    02:45
  • 6
    Proyecto: Obtener el valor de los inputs

    Proyecto: Obtener el valor de los inputs

    04:00
  • 7
    Objetos y Tipos de Memoria en JavaScript

    Objetos y Tipos de Memoria en JavaScript

    04:31
  • 8
    Copiar y modificar objetos en JavaScript

    Copiar y modificar objetos en JavaScript

    09:49
  • 9
    Utilizando inmutabilidad en nuestras funciones

    Utilizando inmutabilidad en nuestras funciones

    03:49
  • 10
    Proyecto: Validar inputs

    Proyecto: Validar inputs

    07:38
Estado compartido en funciones
  • 11
    Estado compartido o shared state

    Estado compartido o shared state

    06:24
  • 12
    Proyecto: Agregar elementos a la lista

    Proyecto: Agregar elementos a la lista

    05:36
Composición de funciones, Closures y Currying
  • 13
    Funciones compuestas o Function Composition

    Funciones compuestas o Function Composition

    09:34
  • 14
    Completando las funciones para generar etiquetas HTML

    Completando las funciones para generar etiquetas HTML

    06:14
  • 15
    Closures en programación funcional

    Closures en programación funcional

    02:56
  • 16
    Currying

    Currying

    03:14
  • 17
    Proyecto: Construyendo filas y celdas

    Proyecto: Construyendo filas y celdas

    03:45
Higher Order Functions
  • 18
    Introducción a las Higher Order Functions

    Introducción a las Higher Order Functions

    04:11
  • 19
    Proyecto: Actualizando el total de calorías

    Proyecto: Actualizando el total de calorías

    05:32
  • 20
    Proyecto: Mostrar elementos

    Proyecto: Mostrar elementos

    03:36
  • 21
    Proyecto: Eliminar elementos

    Proyecto: Eliminar elementos

    09:45
Bonus: Declarative Programming
  • 22
    Programación Declarativa

    Programación Declarativa

    06:30
Conclusiones
  • 23
    Conclusiones

    Conclusiones

    01:30
    Bryan Estiven Silva Mercado

    Bryan Estiven Silva Mercado

    student•
    hace 7 años

    espero que mas adelante se explique la función del principio un poco mas

      Guillermo García López

      Guillermo García López

      student•
      hace 7 años

      Tratando de explicar la función compose. Tenemos lo siguiente:

      La función compose está realizando una composición de funciones. Recordando la notación matemática, y teniendo en consideración las funciones f y g, vemos que la composición de estas es la siguiente (g º f)(x) = g(f(x)). Lo que quiere decir que el resultado de f(x) es pasado a la función g, y g regresa un valor.

      Después de esa breve teoría expliquemos el código la función compose. Tenemos que compose está definida de la siguiente forma:

      const compose = (...functions) => data => functions.reduceRight((value, func) => func(value), data)

      Para hacer la lectura de compose más fácil, quitemos las arrow function, por lo que la función quedaría así:

      function compose(...functions) { // (*) return function(data) { // (**) return functions.reduceRight(function(value, func) { // (***) return func(value) }, data) } }

      Y también recordemos la manera en como compose está siendo utilizada en el proyecto del curso, para entender la composición que se está realizando.:

      const tableRow = items => compose(tableRowTag, tableCells)(items);

      Empecemos por entender qué significa la sentencia ...functions. Esa sentencia está haciendo uso de los rest parameters de JS. Los rest parameters pueden ser utilizados en la definición de una función con los "...". Significan, literalmente, "reune los parámetros restantes en un array". Por lo anterior, y por la forma en cómo está siendo aplicada la función compose, tenemos que:

      ...functions va a generar el siguiente array, functions = [tableRowTag, tableCells], que va a poder se utilizado dentro de compose.

      En la línea (**) vemos que compose está regresando una función, cuyo parámetro es data, eso implica, que al momento de usar compose en nuestro proyecto se le esté pasando la variable items, de otra manera la funcionalidad de compose no se cumpliría por completo.

      compose(tableRowTag, tableCells)(items)

      En la línea (***), vemos que se está haciendo utilización de la función reduceRight en el array functions, y cuyo initialValue es data. reduceRight funciona de manera invesa a reduce, o sea que empieza a tomar valores de derecha a izquierda.

      Para la primera interación de reduceRight, se tienen los siguientes valores:

      value = data // pero data = [item.description, item.calories, item.carbs, item.protein, removeButton] func = tableCells

      Y cuya ejecución de código que realiza es:

      tableCells([item.description, item.calories, item.carbs, item.protein, removeButton])

      El resultado de la función anterior es un string, que va a tener la siguiente forma:

      "<td>description</td><td>calories</td><td>carbs</td><td>removeButton</td>"

      Para la segunda iteración de reduceRight, tenemos los siguientes valores:

      value = "<td>description</td><td>calories</td><td>carbs</td><td>removeButton</td>" func = tableRowTag

      La ejecución que realiza es:

      tableRowTag("<td>description</td><td>calories</td><td>carbs</td><td>removeButton</td>")

      Y función que realiza la función tableRowTag es agregar la etiqueta tr al elemento que se le pase como argumento.

      Por lo que el resultado de haber ejecutado la función compose de esta forma:

      compose(tableRowTag, tableCells)(items)

      Da como resultado:

      "<tr><td>description</td><td>calories</td><td>carbs</td><td>removeButton</td></tr>"

      Y esa cadena va a ser agregada al tbody de nuestro proyecto.

      Nathaly Stefani Riaño Bejarano

      Nathaly Stefani Riaño Bejarano

      student•
      hace 7 años

      Muchas gracias por la aclaración! Me ayudo a comprender el ejercicio.

    Carlos Eduardo Gomez García

    Carlos Eduardo Gomez García

    teacher•
    hace 5 años

    Vale... no entiendo muy bien la función del inicio pero bueno

    Una desventaja que estoy viendo de todo esto es que se está haciendo más difícil de leer el código

    Fernanda Aragon

    Fernanda Aragon

    student•
    hace 7 años

    🤯🤯🤯🤯🤯

    Francisco Garcia [C6]

    Francisco Garcia [C6]

    student•
    hace 5 años

    Ok, gracias a los compañeros de clases pasadas por la explicacion

    Usuario anónimo

    Usuario anónimo

    user•
    hace 5 años

    Ya veo el por qué de React, Angular, Vue y Svelte, trabajar con el DOM aplicando funciones puras de javascript, es muy... pero muy tedioso. Sinceramente, ¡desgasta! Puedo considerar, que al tema le faltó contexto, porque simplemente, ese tipo de cosas se pueden hacer mucho más fácil... hubiese sido lindo en el curso trabajar un proyecto del lado del backend. Es lo que puedo percibir. Siendo así, ¿quién trabajaría así con javascript del lado del front-End? incluso, con vanillaJS es mucho menos tedioso.

    Ariel Chura

    Ariel Chura

    student•
    hace 6 años

    Les comparto un ejemplo que me ayudo a entender la funcion compose:

    const compose = (...fns) =&gt; x =&gt; fns.reduceRight((acc, curr) =&gt; curr(acc), x); const mapToDouble = arr =&gt; arr.map(x =&gt; x * 2); //[4, 8, 4] const mapToObj = arr =&gt; arr.map(value =&gt; ({ value })); //[ { value: 4 }, { value: 8 }, { value: 4 } const sumAll = arr =&gt; arr.reduce((acc, curr) =&gt; acc + curr.value, 0); //16 // function compose(...fns){ // console.log(fns) // return function(x){ // console.log(x) // return fns.reduceRight((acc, curr) =&gt; curr(acc), x); // } // } const originalArr = [2, 4, 2]; // sin usar compose const result1 = sumAll(mapToObj(mapToDouble(originalArr))); // usando compose const result2 = compose( sumAll, mapToObj, mapToDouble, )(originalArr); console.log(`result1: ${result1}`); console.log(`result2: ${result2}`);
    David Leonardo Garzón piña

    David Leonardo Garzón piña

    student•
    hace 3 años

    Lo que veo es un monton de codigo super enredado y nada mantenible ...

    Juan Esteban Galvis

    Juan Esteban Galvis

    student•
    hace 5 años

    Para entender lo de ...functions dejo este vídeo explicando el tema: https://youtu.be/1Q0npMK0Odw?t=203

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads