
Wilmar Yoan Malaver Malaver
Preguntacreo que no me quedo muy claro he visto el video ya como 5 veces si alguien me puede correguir lo entiendi asi esta es la funcion que esta dentro de la clase que es saludar
saludar(fn) { var { nombre , apellido } = this console.log(`Hola, me llamo ${nombre} ${apellido}`) if (fn) { fn(nombre, apellido, false) } }
verdad pero lo que no entiendo es por que no llama la funcion como la llamo cuando la creo. osea esta
function responderSaludo(nombre, apellido, esDev) { console.log(`Buen dia ${nombre} ${apellido}`); if (esDev) { console.log(`Ah mirá, no sabía que eras desarrollador/a`) } }
por que cuando pasamos el parametro aqui si es
arturo.saludar(responderSaludo)
osea no entiendo por que el parametro se llama diferente fuera de la clase no deberia ser el mismo “responder saludo”
saludar(responderSaludo) { var { nombre , apellido } = this console.log(`Hola, me llamo ${nombre} ${apellido}`) if (responderSaludo) { responderSaludo(nombre, apellido, false) } }
espero que no sea confuso de explicar lo que no entiendo
- Hola Wilmary, bueno 'creo' que te entendí. Vamos por pasos a ver si te logro guiar:
- Cuando defines una función lo que haces es definir una estructura que tiene un esquema de atributos (nombre, apellido, etc) y métodos (osea funciones como saludar). Esto es lo que vimos en las dos primeras clases del bloque de programación orientada a objetos. En resumen definimos un prototipo.
- La ventaja de que se defina estos prototipos es que los vas a ir rellenando como una especie de formulario. Así que al invocarlos no es necesario escribir la estructura completa (todas las lineas de código). Con que digas que vas a necesitar el 'formulario' que definiste bajo un nombre (en este caso responderSaludo) es suficiente.
- Por favor usa la palabra formulario solo como una palabra que te ayudara a entender de manera gráfica un prototipo. Un prototipo NO es un formulario pero si haces un dibujo mental de esta palabra te ayudara a interpretar bien este cuento de los prototipos en JS o clases en otros lenguajes.
- Ahora me aventuro a tratar de leer entre lineas. Me dirás pero bueno ya pase el nombre del 'formulario' saludo como parámetro de otra función saludar, la cual es método de saludo, ¿como se van a llenar los datos de la función responderSaludo dentro de esta nueva función?.
- De nuevo entra en juego la idea mental de formulario. Cuando llega este formulario llamado responderSaludo a la función saludar, lo que sucede es que la función saludar lo abrirá y dirá, bien es un formulario, veamos que datos necesita de mi (nombre, apellido y un booleano que indica si es o no desarrollador) envía estos datos y espera pacientemente a que le den una respuesta desde el formulario (responderSaludo). Este le da la respuesta (un console.log(A mira no sabia que ...)) y finaliza el proceso.
- Como vez no es necesario enviar todas las lineas de código de la función responderSaludo, con enviar el nombre de la función sera suficiente.
- Si quieres ser un poco mas técnica lo que has enviado es una dirección de memoria que apunta a una función responderSaludo. Cuando la recibe la función saludar, envía los datos que necesita esta dirección y espera a que desde esa dirección le retornen un resultado.
- Espero ser de ayuda y haber interpretado bien tu duda... saludos

Franz Pool Nuñez Villazana
Hola Wilmar tienes que entender que fn es solo un parámetro que va a ser reemplazado por responderSaludo cuando llamas a la función saludar, si quieres puedes poner cualquier nombre a los parámetros de las funciones ya que al final serán reemplazados cuando llames a la función

FRANCISCO MUÑOZ MARTINEZ
Hola Wilmar, En la clase 6 de funciones se expuso que una función puede tener parámetros que son variables. En ese caso eran el nombre y la edad. pero en la función los parámetros se llamaban n y e. function imprimirEdad (n, e) { .... } . Y cuando se utiliza la función se invoca con variables que tienen los valores que nos interesan: imprimirEdad(nombre, edad). En este caso sucede lo mismo, solo que el parámetro no es una variable, sino una función en este caso el parámetro es 'fn' y la función que se quiere utilizar al invocar es responderSaludo. Por eso lo invocas arturo.saludar(responderSaludo). Pero podría ser que tu quisieras que cuando salude, se registre en una lista, con los datos del saludo. entonces podrías tener otra función registrarEnLista(nombre, apellido, true) y lo invocarías arturo.saludar(registrarEnLista) y funcionaría, sin necesidad de hacer otra versión de la función del saludo.
Espero sea comprensible mi interpretación. good luck

jose zuñiga
arturo.saludar(responderSaludo)