Estoy tratando de entender qué está haciendo este código, es de un nodejs. No entiendo qué está haciendo esta estructura.
return({objeto}={})=>{más código}
puede encontrar el repositorio aquí: https://github.com/howardmann/clean-node/blob/master/models/teacher/teacher.js
let buildMakeTeacher = function(teacherValidator) { return ({ name, subject, tenure = false } = {}) => { let {error} = teacherValidator({name, subject, tenure}) if (error) throw new Error(error) return { getName: () => name, getSubject: () => subject, isTenure: () => tenure } } }Además de la respuesta de @Sarkar, la cantidad de llaves aquí puede sorprenderlo. El punto de otros (que no declaran un alcance) es la desestructuración de objetos . rompiendo:
let {error} = teacherValidator({name, subject, tenure}) Esta línea toma el objeto devuelto por teacherValidator y extrae una clave llamada error de él. Si devolvió, digamos, {error: 'Fail', errorcode: 1} , entonces error se asigna a 'Fail' .
return ({ name, subject, tenure = false } = {}) => { doSomething(); }Esto crea una función anónima con un manejo de argumentos complejo. Es (al llamar a resultado, la implementación debe diferir) equivalente a:
return function(params={}) { let {name, subject, tenure=false} = params; doSomething(); }Esta función:
name y subject ( undefined si no está presente) y la clave de tenure ( false si falta).es una funcion anonima
este
(object)=>{more code}es equivalente a esto
function functionName(object){ moreCode } su ejemplo de código es una función llamada buildMakeTeacher que devuelve una función anónima que devuelve un objeto
Lea sobre el cierre y curry un poco le dará una mejor perspectiva.
Pero básicamente eso significa que esta función devuelve una nueva función que devuelve un objeto con acciones invocables.
Así que para llamarlo deberías hacer algo como buildMakeTeacher(someValidstor)({name: “foo”, subject: “bar”}).getSubject()