Este es un micro-framework que nos ayuda a construir aplicaciones web utilizando Componentes, muy parecido a React y Vue:
Introducción al curso y conceptos base
Qué aprenderás sobre la programación funcional
Programación funcional: qué es
Boilerplate: Base para el proyecto del curso
Funciones
Funciones Algebraicas y Funciones de JavaScript
Qué son funciones puras
Proyecto: Obtener el valor de los inputs
Objetos y Tipos de Memoria en JavaScript
Copiar y modificar objetos en JavaScript
Utilizando inmutabilidad en nuestras funciones
Proyecto: Validar inputs
Estado compartido en funciones
Estado compartido o shared state
Proyecto: Agregar elementos a la lista
Composición de funciones, Closures y Currying
Funciones compuestas o Function Composition
Completando las funciones para generar etiquetas HTML
Closures en programación funcional
Currying
Proyecto: Construyendo filas y celdas
Higher Order Functions
Introducción a las Higher Order Functions
Proyecto: Actualizando el total de calorías
Proyecto: Mostrar elementos
Proyecto: Eliminar elementos
Bonus: Declarative Programming
Programación Declarativa
Conclusiones
Conclusiones
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
Aportes 16
Preguntas 0
Este es un micro-framework que nos ayuda a construir aplicaciones web utilizando Componentes, muy parecido a React y Vue:
¿seguros que este código es más fácil de mantener?
Es un error de principiantes verificar si un objeto tiene propiedades con un simple obj.attr ? ‘’ : ‘’ porque un objecto vacio es truthy
Siguiendo el taller y con un poco de curiosidad las funciones que estamos utilizando pueden quedar de la manera siguiente.
// consiguiendo los atributes para las etiquetas HTML
const attributesToString = (obj = {}) => {
const ENTRIES = Object.entries(obj);
const ATTRS = [];
for (let i = 0; i < ENTRIES.length; i += 1) {
const AUX = ENTRIES[i];
const ATTR = AUX[0];
const VALUE = AUX[1];
ATTRS.push(`${ATTR}="${VALUE}"`);
}
return ATTRS.join("");
};
// Creando etiquetas html con atributos
const createTagAttr = obj => (content = "") => {
const { tag, attr } = obj;
return `
<${tag}${attr ? ` ${attributesToString(attr)}` : ""}>
${content}
</${tag}>`;
};
// Generando tag de maner dinamica
const createTag = (tag) => {
const TAG = (typeof tag === "string")
? createTagAttr({ tag })
: createTagAttr(tag);
return TAG;
};```
para poder invocar todo de la siguiente manera.
createTag({tag:“h1”, attr:{“class”: “Success”}})(“Galletas mmmm”);
espero pueda ser de utilidad par alguien.
Tengo entendido que en la programación funcional no se hace uso de if. Soy nuevo en este paradigma
¿No sería más fácil solo mapear la lista?
pregunta seria jajjaja.
Les comparto una ligera optimización al código del profe.
// Construccion del html tag con clase
const tagAttr = obj => (content = '') =>
`<${obj.tag} ${obj.attrs && attrToString(obj.attrs)}> ${content} </${obj.tag}>`
// Metodo que ejecuta la construccion del tag
const tag = t =>
(typeof t === 'string') ? tagAttr({tag: t}) : tagAttr(t)
Que fumada de clase again zD
Muy interesante la solución y todo pero, afortunadamente ya tomé el Curso de Manejo de Ansiedad como para permitirme usar jQuery por voluntad propia, más aún teniendo React JS y demás. 😅 Quiéranse mucho!😂
Un clousure recuerda el contexto en el que fue creado
const generateHTMLTag = tag => content => `<${tag}>${content}</${tag}>`
const h1 = generateHTMLTag('h1');
h1('bla bla bla'); //<h1>bla bla bla</h1>
cada vez más confuso …
Hmmm, comprendo el punto, esto me recuerda mucho al concepto de High Order Functions, pero pues prácticamente hacer esto es muy similar a lo que vimos en el Curso de buenas prácticas de escritura de código, dividir en funciones
Comprender el uso de las tres funciones me costo ver los vídeos un par de veces mas pero ahora quedo perfectamente entendido
Muy chevere
Creo que la validación quedaría mejor de la siguiente manera
`<${obj.tag}${Object.keys(obj.attrs).length > 0 && ' '}${attrsToString(obj.attrs)}>${content}</${obj.tag}>`
funciones en esta clase.
// tagAttrs
function tagAttrs (obj, content) {
return (
`<${obj.tag}${Object.keys(obj.attrs).length > 0 && ' '}${attrsToString(obj.attrs)}>${content}</${obj.tag}>`
)
}
// create tag html
function tag (t) {
if (typeof t === 'string') return tagAttrs({tag: t})
return tagAttrs(t);
}
Yo le hice así:
const tagAttrs = obj => (content = '') => `
<${obj.tag}
${obj.attrs? attrsToString(obj.attrs) : ''}
>
${content}
</${obj.tag}>
`
const tag = t => {
if(typeof t === 'string') return tagAttrs({tag: t})
return tagAttrs(t)
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.