Me parece que en el ejercicio de la función como parámetro en la línea 141 (05:47) esta equivocada la invocación pues hace invocación a mathFunction que es una variable global anterior y no precisamente al parámetro mathFunc que es la función-parámetro que realmente se debería invocar para que lo que se pase a printMathResult si cambie dado el parámetro sino el resultado siempre será el mismo sin importar como se invoque
Es correcto lo que mencionas arriba, mathFunction al ser una variable global la reconoce y no da error, da la casualidad que el comportamiento es el mismo que el que se esperaba con mathFunc() y pasa desapercibido.
exacto, tal cual iba a comentar lo mismo.
Cuando vi como pasaba una función como parámetro me recordó mucho a los callbacks en JS :")
🤯
Yo hice una calculadora muy sencilla. Para reafirmar el concepto.
Interesante. Siento que debo repasar bien esto de las funciones ya que 🤯. Pero encantada con lo que ofrece Swift 👍🏻😁
Se podría crear un typealias para simplificar un poco la legibilidad:
typealias MathFn=(Int,Int)->Intfunc printMathResult(_ mathFn:MathFn, _ a:Int, _ b:Int)->Void{print("El resultado de la operación es \(mathFn(a, b))")}printMathResult(multiplyTwoInts,4,5)
que bonita clase :(
Esto se me parece mucho a los arrow functions en javascript
// Function Types:func addTwoInts(_ a:Int, _ b:Int)->Int{return a+b
}// esto es del tipo (Int, Int) -> Intfunc multiplyInts(_ a:Int, _ b:Int)->Int{return a*b
}// esto es del tipo (Int, Int) -> Intfunc printHW(){print("Hello world!")}// () -> VoidvarmathFunction:(Int,Int)->Int= addTwoInts
mathFunction(4,5)// esto permite:func printMathResult(_ mathFunction:(Int,Int)->Int, _ a:Int, _ b:Int){print("Resultado: \(mathFunction(a,b))")}printMathResult(mathFunction,5,6)// otro ejemplo:func stepForward(_ input:Int)->Int{return input +1}func stepBackward(_ input:Int)->Int{return input -1}func chooseStepFunction(backward:Bool)->(Int)->Int{//es lo mismo:// if backward{// return stepForward// }else{// return stepForward// }return backward ? stepBackward : stepForward
}var value =7let moveNearerZero =chooseStepFunction(backward: value >0)// entonces moveNearerZero va a tomar la función: stepBackwardwhile value !=0{print("\(value)...") value =moveNearerZero(value)}
Funciones de primer orden, me hace recordar Haskell.. Muy bueno..
:D la primera vez que vi esas firmas fué en Haskell
tengo entendido que esto es mas comun con lenguajes orientados a objeto?
en muy común en general, en la mayoría de los lenguajes y se usa mucho en la programación funcional.
Esta forma de trabajar es muy parecida a trabajar con arrow functions y Typescript, me agrada haber llegado hasta aquí
Que buena clase, asi si se disfruta una clase de programación con un nivel de complejidad mayor
Cualquier parecido con Typescript y JS es pura coincidencia 😅
🤯
Nah, muy parecido a JS pero más bonito jejeje
Mi función reguapa que hace la cuenta atrás y además es inout :D
func countDown(_ value: inout Int){var moveNearerZero =chooseStepFunction(backward: value >0)while value !=0{print("\(value)...") value =moveNearerZero(value)}print("Zero!!!")}var value =-7countDown(&value)print(value)
Despues de repetir la clase, logre entender el concepto. Un dolor de cabeza la primera vez, pero ya el concepto esta bien aprendido.