No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Function Types

7/16
Recursos

Aportes 31

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

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

Cuando vi como pasaba una funci贸n como par谩metro me record贸 mucho a los callbacks en JS 馃槉

馃く

Se podr铆a crear un typealias para simplificar un poco la legibilidad:

typealias MathFn = (Int, Int) -> Int

func printMathResult(_ mathFn: MathFn, _ a: Int, _ b: Int) -> Void {
    print("El resultado de la operaci贸n es \(mathFn(a, b))")
}

printMathResult(multiplyTwoInts, 4, 5)

Yo hice una calculadora muy sencilla. Para reafirmar el concepto.

que bonita clase 馃槮

// Function Types:
func addTwoInts(_ a: Int, _ b: Int) -> Int {
    return a+b
}// esto es del tipo (Int, Int) -> Int
func multiplyInts(_ a: Int, _ b: Int) -> Int {
    return a*b
}// esto es del tipo (Int, Int) -> Int
func printHW(){
    print("Hello world!")
}// () -> Void


var mathFunction: (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 = 7
let moveNearerZero = chooseStepFunction(backward: value > 0)
// entonces moveNearerZero va a tomar la funci贸n: stepBackward
while value != 0{
    print("\(value)...")
    value = moveNearerZero(value)
}

Interesante. Siento que debo repasar bien esto de las funciones ya que 馃く. Pero encantada con lo que ofrece Swift 馃憤馃徎馃榿

Funciones de primer orden, me hace recordar Haskell鈥 Muy bueno鈥

//Ejemplo
var mathFunction : (Int, Int) -> Int = multiplyTwoInts
mathFunction(4,5)

func printMathResult(_ mathFunc: (Int, Int) -> Int, _ a:Int, _ b: Int){
    print("Resultado: \(mathFunction(a,b))")
}

printMathResult(multiplyTwoInts, 5, 9)

//Ejemplo
func stepForward(_ input: Int) -> Int {
    return input + 1
}

func stepBackward(_ input: Int) -> Int {
    return input - 1
}

func chooseStepFunction(backward: Bool) -> (Int) -> Int {
    return backward ? stepBackward : stepForward
}

var valueNumber = 7
let moveNearerZero = chooseStepFunction(backward: valueNumber > 0)

while valueNumber != 0 {
    print("\(valueNumber)...")
    valueNumber = moveNearerZero(valueNumber)
}
print("Cero!!!!!")

馃く

Hice una calculadora b谩sica con una func para generar n煤meros randoms, solo devuelve enteros entonces redondea los resultados. Los prints del final es porque no estoy en entorno apple ni usando Xcode, entonces uso prints para las ejecuciones 馃ぃ
El curso es viejo y por las dudas lo acompa帽o con la documentaci贸n, la dejo por si a alguien le sirve:
https://www.swiftbook.es/guia-del-lenguaje/funciones

func suma(_ a: Int, _ b:Int) -> Int {a + b}
func resta(_ a: Int, _ b:Int) -> Int {a - b}
func multi(_ a: Int, _ b:Int) -> Int {a * b}
func div(_ a: Int, _ b:Int) -> Int {b > 0 ? a / b : 0}

func generarRandomNum(_ min: Int, _ max: Int) -> Int {
    return Int.random(in: min...max)
}

func calcular (_ datos: Int) -> (Int, Int) -> Int {
  switch datos {
    case 1:
      return suma
    case 2:
      return resta
    case 3:
      return multi
    default:
    return div
  }
}

let dato = generarRandomNum(1, 4)
let numBase = generarRandomNum(501, 999)
let numSec = generarRandomNum(1, 500)
let calculadora = calcular(dato)
print("\(dato)- \(numBase)-\(numSec)")
print(calculadora(numBase, numSec))

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 馃槃

func countDown(_ value: inout Int) {
    var moveNearerZero = chooseStepFunction(backward: value > 0)
    while value != 0 {
        print("\(value)...")
        value = moveNearerZero(value)
    }
    print("Zero!!!")
}

var value = -7
countDown(&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.

Cerooo!!! 馃コ

Am茅 esta clase

Hace poquito empec茅 a indagar el mundo de iOS, vengo de JavaScript, y mas contento no puedo estar. Estos cursos valen oro!

Usando el operador ternario para determinar cual funcion asignarle a la variable

import UIKit

func addTwoInts( _ a: Int,  _ b: Int ) -> Int {
     return a+b
}
func multiplyTwoInts( _ a: Int,  _ b: Int ) -> Int {
    return a*b
}

let isMember = false

var addinng: ( Int, Int ) -> Int = isMember ? addTwoInts : multiplyTwoInts;


addinng( 3, 7)```

Me parece que en el print debe ser con mathFunc para no confundir con la otra funci贸n:

func printMathResult(_ mathFunc: (Int, Int) -> Int, _ a: Int, _ b: Int){
    print("Resultado: \(mathFunc(a,b))")
}

printMathResult(multiplyTwoInts, 5, 9)

Primera clase que me toca ver a 1x excelente explicaci贸n

El resumen de la clase : 馃く

Basicamente al crear una variable de tipo funcion, por ejemplo mathFunction, lo unico que hace es crear un duplicado virtual de la funcion a la que esta igualando, con otro nombre.

otra forma es enumerar los parametros y crear algo as铆 como una funci贸n lamda

func printMathResult(_ operation :(Int, Int) -> Int, _ a : Int , _ b : Int ){
    print("Result is : \(operation(a,b))")
}
printMathResult({$0 + $1}, 1, 2)

callbacks recargados鈥 presiento el regreso de los callback hell de js鈥
Aunque se parece mas a los closures.

馃く

es como el tipado de TS, a un valor le dices que sera una funcion, mencionando que datos recibira y que datos retornara, incluso TS puedes ponerle el nombre o pasarle una funcion que seria un callback

Cuando el profesor dijo: 鈥淭en cuidado, porque esto ya es nivel top y empieza a crecer en dificultad鈥 me emocione porque ya empieza a verse lo bueno!
馃懆馃徏鈥嶐煉火煃

Un peque帽o ejercicio para entender un pco m谩s

/*
 apuntes
 **/

func addThreeInts(_ a: Int, _ b: Int, c: Int) -> Int {
    return a+b+c
}

func printMathResultThreeValues(_ mathOperation: (Int, Int, Int) -> Int, _ a: Int, _ b: Int,_ c: Int){
    print("Result: \(mathOperation(a, b, c))")
}

printMathResultThreeValues(addThreeInts, 2, 4, 6)