CursosEmpresasBlogLiveConfPrecios

Etiquetas de Params y Variadics

Clase 5 de 16 • Curso de Programación con Swift: Funciones (2019)

Clase anteriorSiguiente clase

Contenido del curso

Funciones

  • 1
    Qué aprenderás sobre las funciones en Swift

    Qué aprenderás sobre las funciones en Swift

    01:57 min
  • 2
    Declarar una función

    Declarar una función

    05:36 min
  • 3
    Parámetros de entrada

    Parámetros de entrada

    05:31 min
  • 4
    Valores de Retorno, Optionals y Parámetros de Salida

    Valores de Retorno, Optionals y Parámetros de Salida

    11:04 min
  • 5
    Etiquetas de Params y Variadics

    Etiquetas de Params y Variadics

    Viendo ahora
  • 6
    Parámetros tipo inout

    Parámetros tipo inout

    07:37 min
  • 7
    Function Types

    Function Types

    11:13 min
  • 8
    Nested Functions

    Nested Functions

    04:32 min

Tipos de Closures

  • 9
    Closures

    Closures

    13:48 min
  • 10
    Trailing Closures

    Trailing Closures

    11:13 min
  • 11
    Capturar Valores

    Capturar Valores

    06:29 min
  • 12
    Escaping Closure

    Escaping Closure

    09:54 min

Enumeradores

  • 13
    Enumerations, clase vaga

    Enumerations, clase vaga

    10:05 min
  • 14
    Enumerations, "códigos de barras"

    Enumerations, "códigos de barras"

    07:59 min
  • 15
    Enumeradores con raw values

    Enumeradores con raw values

    09:55 min

Cierre

  • 16
    Conclusión

    Conclusión

    01:51 min
  • Tomar el examen del curso
    • Marcos Avila Rodriguez

      Marcos Avila Rodriguez

      student•
      hace 5 años

      Reto

      func mediaGeometrica(_ numbers: Double...) -> Double{ var total: Double = 0 for number in numbers { //Se multiplican todos los elementos if total == 0 { total = number }else{ total *= number } } /* pow lo que hace es darnos la potencia del valor proporcionado pero de acuerdo con la formula de la media geometrica necesitamos obtener la raiz de N elementos por eso hay que dividir la cantidad de elementos para obtener el valor correcto */ return pow(total, 1/Double(numbers.count)) } print(mediaGeometrica(1.20,1.15,1.33,1.25))
        Luis Carlos Garavito Romero

        Luis Carlos Garavito Romero

        student•
        hace 3 años

        En este caso, no podríamos dejar en 1 el valor por defecto de la variable total para evitar ese if dentro del for?

        Anthony Alexis Rubio Perez

        Anthony Alexis Rubio Perez

        student•
        hace 2 años

        func mediaGeometrica(_ numbers: Double...) -> Double{

        var total: Double = 1

        for number in numbers {

        total *= number

        }

        return pow(total, 1/Double(numbers.count))

        }

        print(mediaGeometrica(5,5,65))

      Rafael Villarreal

      Rafael Villarreal

      student•
      hace 6 años

      y por qué no simplemente nombrar las variables como los alias ? 🧐

        Bradley Robertson Cardenas Alcocer

        Bradley Robertson Cardenas Alcocer

        student•
        hace 5 años

        Es porque haría más complicada la lectura del código. Por ejemplo, si en unos meses quiero modificar algo de la función y leo que solo hay f1, f2, f3, etc, yo no sabría qué significa. Por eso Apple recomienda tener nombres descriptivos, ya que esto facilita la lectura. No obstante, como a veces hay nombres descriptivos muy largos, entonces el uso de los alias ayuda un montón, pues es una forma corta de referirnos a lo mismo al momento de usarla.

        Anthony Alexis Rubio Perez

        Anthony Alexis Rubio Perez

        student•
        hace 2 años
        func mediaGeometrica(_ numbers: Double...) -> Double{ var total: Double = 1 for number in numbers { total *= number } return pow(total, 1/Double(numbers.count)) } print(mediaGeometrica(5,5,65)) ```**func** mediaGeometrica(\_ numbers: Double...) -> Double{ **var** total: Double = 1 **for** number **in** numbers { total \*= number } **return** pow(total, 1/Double(numbers.count)) } print(mediaGeometrica(5,5,65))
      Matias Niz

      Matias Niz

      student•
      hace 5 años

      En los Variadics no seria mejor enviar un array?, a menos que tengan una utilidad mayor no le encuentro el sentido a incorporar nuevos conceptos para realizar algo que ya se podia resolver de una manera mas intuitiva.

        Jonathan Meixueiro

        Jonathan Meixueiro

        student•
        hace 3 años

        Comentario para la posteridad

        Depende de lo que estés haciendo, en este caso, no necesitas almacenar ningún valor, solo los usas para calcular la media y no los vuelves a usar, la solución que propones sería si necesitaras pasar números de un array ya almacenado por fuera.

        // Otra cosa, es más sencillo leer mean(1,2,3,4,5) // Que sintaxis que no necesitas para conseguir el mismo resultado mean([1,2,3,4,5])

        En que casos es mejor uno u o el otro?

        > ARRAY

        Si tengo un array [Double] ya almacenado por fuera, claro es mejor como mencionas y se leería más fácil

        let arrayNum: [Double] = [1,5,6,7] mean(array)

        -VARIADIC Si voy a llamar valores almacenados en diferentes variables, es más conveniente llamarlos uno por uno y en este caso, castear los que lo necesiten de momento, que reservar un espacio en memoria para cada caso que use el mean

        let arrayNum: [Int] = [1,5,6,7] let a = 10.0 let b = 20 let c = 30.0 mean(a,Double(b),c,arrayNum[3])

        También cabe mencionar que en clases anterior se vio que los ++Double++ ocupan más espacio en memoria que los ++Int++, entonces por optimización de recursos en aplicaciones más robustas, es más conveniente como el ejemplo, convertir a ++Double++ los ++Int++ solo cuando lo necesitas que almacenarlo como ++Double++ todo el tiempo. .

        Y finalmente, es bueno saber que hay diferentes maneras de hacer lo mismo y eliges la que consideras más conveniente, por dar un ejemplo, es más sencillo crear aplicaciones multiplataforma como con Flutter o React Native, pero si requerimos optimizar recursos o trabajar con elementos muy propios de cada sistema, optamos por manejar el desarrollo nativo, ++ninguna es mejor que otra++, solo son diferentes, tomas la que mejor se te adapte.

      Sergio Alejandro Camacho Hernandez

      Sergio Alejandro Camacho Hernandez

      student•
      hace 5 años

      para que sirve?

      200 ..<300
        Daniel Palacios Romero

        Daniel Palacios Romero

        student•
        hace 4 años

        Llego un poco tarde pero es un rango, representa la numeración de 200 hasta menor que 300

      Gonzalo Pinell

      Gonzalo Pinell

      student•
      hace 3 años
      Captura de pantalla 2022-12-21 a la(s) 6.34.55 p. m..png
      Deisy Johanna Basto Contreras

      Deisy Johanna Basto Contreras

      student•
      hace 3 años
      func meanGeometry (_ numbers:Double...) ->Double { var expo = numbers.count var product = numbers.reduce(1,*) return pow(product, 1/Double(expo)) } print(meanGeometry(1,2,3,4))
      Emmanuel Guerra Sánchez

      Emmanuel Guerra Sánchez

      student•
      hace 4 años
      func geometricMean(_ numbers: Double...) -> Double { let product = numbers.reduce( 1.0, { x, y in x * y} ) //nth root https://stackoverflow.com/questions/30203542/how-to-find-the-nth-root-of-a-value return pow( product, (1/Double(numbers.count)) ) }
      Sergio Alejandro Camacho Hernandez

      Sergio Alejandro Camacho Hernandez

      student•
      hace 5 años

      para que sirve? 200 ..<300

        jose taveras

        jose taveras

        student•
        hace 5 años

        crea una serie (rango) de números comenzando en 200 y terminando en 299

      Gerardo Estrella

      Gerardo Estrella

      student•
      hace un año

      Las funciones variádicas en Swift permiten que una función acepte un número variable de argumentos. Se definen usando tres puntos suspensivos (...) en la declaración del parámetro. Esto permite que al llamar a la función se pasen desde cero hasta múltiples valores del mismo tipo.

      Por ejemplo:

      func sumarNumeros(_ numeros: Int...) -> Int { return numeros.reduce(0, +) }

      Aquí, sumarNumeros puede recibir cualquier cantidad de enteros y retornar su suma. Esta característica es útil para funciones que necesitan manejar listas de datos de tamaño variable sin necesidad de definir múltiples parámetros.

      Luis Garay

      Luis Garay

      student•
      hace 2 años
      func geomean(_ numbers:Double...)->Double{ var total:Double = 1.0 for number in numbers { total *= number } return pow(total,1/Double(numbers.count)) } geomean(1,2,3,4)
      Diego Urrego

      Diego Urrego

      student•
      hace 2 años
      // TAREA: Hacer función para la media geometrica func geometricMean(_ numbers: Double...) -> Double { let numberToElevate = Double(numbers.count) var multiplying : Double = 1.0 for number in numbers { multiplying *= number } return pow(multiplying, 1.0/numberToElevate) } geometricMean(2,4,8)
      Nicolas Silva

      Nicolas Silva

      student•
      hace 3 años
      func geoMean(_ numbers: Double) -> Double { var total: Double = 1 //si no se multiplicarian todos por 0 var n: Int = numbers.count for number in numbers { total *= number } return pow(total, 1/Double(n)) }
      Fabián Recuero

      Fabián Recuero

      student•
      hace 3 años

      Reto ✓ el método pow resuelve la raíz de un número, y recibe como parámetros dos números, en donde el primer parámetro representa el radicado y el indice es el segundo parámetro

      func mediaGeometrica(_ numbers: Double...) -> Double{ var total: Double = 0 let expo = Double(numbers.count) for number in numbers { total *= number } return pow(total, 1.0/expo) }
      Jessica Balanta Restrepo

      Jessica Balanta Restrepo

      student•
      hace 3 años

      Listo!! func mediaGeometrica(_ numbers: Double...) -> Double { var total:Double = 1.0 for number in numbers{ total *= number } return pow(total,1 / Double(numbers.count))

      }

      Lisandro Loustaunau

      Lisandro Loustaunau

      student•
      hace 4 años

      arreglando la de mean, lo hice asi:

      func mean(_ numbers: Double...) -> Double{ var total : Double = 1 for number in numbers{ total *= number } return pow(total, 1/Double(numbers.count)) }
      Alvaro Cuiza Laime

      Alvaro Cuiza Laime

      student•
      hace 4 años
      func GetMediGeometrica(_ numbers:Double...) -> Double { var total:Double = 1.0 for number in numbers{ total *= number } return pow(total,1/Double(numbers.count)) } print(GetMediGeometrica(1.20,1.15,1.33,1.25))
      Eddie Guadalupe Elorza Ruiz

      Eddie Guadalupe Elorza Ruiz

      student•
      hace 4 años
      func mediaGeometrica(numbers: Double...) -> Double { var resultado = 1.0 for num in numbers { resultado *= num } return pow(resultado, 1/Double(numbers.count)) } print(mediaGeometrica(numbers: 1,2,3,4,5))
      Maria Isabel Torres Torres

      Maria Isabel Torres Torres

      student•
      hace 4 años
      func arithmeticAverage(_ numbers2: Double ...) -> Double{ var total2: Double = 1 for number2 in numbers2{ total2 *= number2 } return powl(total2, 1/Double(numbers2.count)) } arithmeticAverage(1,2,3,4,5,6,7,8,9)
      Francisco Javier Gallego Lahera

      Francisco Javier Gallego Lahera

      student•
      hace 4 años
      func mediaGeometrica(de numeros: [Double]) -> Double { guard !numeros.isEmpty else { return -1} var mediaGeometrica = numeros.first! for numero in numeros[1..<numeros.count] { mediaGeometrica *= numero } mediaGeometrica = sqrt(mediaGeometrica) return mediaGeometrica }
      Peter Jonathan Montalvo Garcia

      Peter Jonathan Montalvo Garcia

      student•
      hace 4 años
      func minMax(array:[Int]) -> (min: Int, max: Int)?{ if array.isEmpty{ return nil } var currentMin = array[0] var currentMax = array[0] for value in array[1..<array.count]{ if value < currentMin{ currentMin = value }else if value > currentMax{ currentMax = value } } return (currentMin, currentMax) } let bounds = minMax(array: [-6,8,100,0,-9,16]) let bounds2 = minMax(array: []) func someFunction(f1 firsParamName: String, f2 secondParamName: String){ //f1 es la etiqueta de firsParamName //firsParamName es el primer parámetro de tipo String //f2 es la etiqueta de secondParamName //secondParamName es el segundo parámetro de tipo String } someFunction(f1: "Hi", f2: "Hello") // es lo mismo que usar firsParamName y secondParamName //usar valores por defecto: func anotherFunction(_ firstPersonName: String, f2 secondParamName: String = "Goku"){ // _ es que no pondré nombre a la variable 1 a la hora de llamarla //Goku es el valor por defecto de f2. /* Si yo llamo a anotherFunction y no le paso f2, tomará el valor por defecto. */ } // si hay muchas variables y no sé cuáles: func mean(_ numbers: Double...) -> Double{ var total: Double = 0 for number in numbers{ total += number } return total / Double(numbers.count) } var media = mean(18.0, 19.0, 20.0, 19.5)

    Escuelas

    • Desarrollo Web
      • Fundamentos del Desarrollo Web Profesional
      • Diseño y Desarrollo Frontend
      • Desarrollo Frontend con JavaScript
      • Desarrollo Frontend con Vue.js
      • Desarrollo Frontend con Angular
      • Desarrollo Frontend con React.js
      • Desarrollo Backend con Node.js
      • Desarrollo Backend con Python
      • Desarrollo Backend con Java
      • Desarrollo Backend con PHP
      • Desarrollo Backend con Ruby
      • Bases de Datos para Web
      • Seguridad Web & API
      • Testing Automatizado y QA para Web
      • Arquitecturas Web Modernas y Escalabilidad
      • DevOps y Cloud para Desarrolladores Web
    • English Academy
      • Inglés Básico A1
      • Inglés Básico A2
      • Inglés Intermedio B1
      • Inglés Intermedio Alto B2
      • Inglés Avanzado C1
      • Inglés para Propósitos Específicos
      • Inglés de Negocios
    • Marketing Digital
      • Fundamentos de Marketing Digital
      • Marketing de Contenidos y Redacción Persuasiva
      • SEO y Posicionamiento Web
      • Social Media Marketing y Community Management
      • Publicidad Digital y Paid Media
      • Analítica Digital y Optimización (CRO)
      • Estrategia de Marketing y Growth
      • Marketing de Marca y Comunicación Estratégica
      • Marketing para E-commerce
      • Marketing B2B
      • Inteligencia Artificial Aplicada al Marketing
      • Automatización del Marketing
      • Marca Personal y Marketing Freelance
      • Ventas y Experiencia del Cliente
      • Creación de Contenido para Redes Sociales
    • Inteligencia Artificial y Data Science
      • Fundamentos de Data Science y AI
      • Análisis y Visualización de Datos
      • Machine Learning y Deep Learning
      • Data Engineer
      • Inteligencia Artificial para la Productividad
      • Desarrollo de Aplicaciones con IA
      • AI Software Engineer
    • Ciberseguridad
      • Fundamentos de Ciberseguridad
      • Hacking Ético y Pentesting (Red Team)
      • Análisis de Malware e Ingeniería Forense
      • Seguridad Defensiva y Cumplimiento (Blue Team)
      • Ciberseguridad Estratégica
    • Liderazgo y Habilidades Blandas
      • Fundamentos de Habilidades Profesionales
      • Liderazgo y Gestión de Equipos
      • Comunicación Avanzada y Oratoria
      • Negociación y Resolución de Conflictos
      • Inteligencia Emocional y Autogestión
      • Productividad y Herramientas Digitales
      • Gestión de Proyectos y Metodologías Ágiles
      • Desarrollo de Carrera y Marca Personal
      • Diversidad, Inclusión y Entorno Laboral Saludable
      • Filosofía y Estrategia para Líderes
    • Diseño de Producto y UX
      • Fundamentos de Diseño UX/UI
      • Investigación de Usuarios (UX Research)
      • Arquitectura de Información y Usabilidad
      • Diseño de Interfaces y Prototipado (UI Design)
      • Sistemas de Diseño y DesignOps
      • Redacción UX (UX Writing)
      • Creatividad e Innovación en Diseño
      • Diseño Accesible e Inclusivo
      • Diseño Asistido por Inteligencia Artificial
      • Gestión de Producto y Liderazgo en Diseño
      • Diseño de Interacciones Emergentes (VUI/VR)
      • Desarrollo Web para Diseñadores
      • Diseño y Prototipado No-Code
    • Contenido Audiovisual
      • Fundamentos de Producción Audiovisual
      • Producción de Video para Plataformas Digitales
      • Producción de Audio y Podcast
      • Fotografía y Diseño Gráfico para Contenido Digital
      • Motion Graphics y Animación
      • Contenido Interactivo y Realidad Aumentada
      • Estrategia, Marketing y Monetización de Contenidos
    • Desarrollo Móvil
      • Fundamentos de Desarrollo Móvil
      • Desarrollo Nativo Android con Kotlin
      • Desarrollo Nativo iOS con Swift
      • Desarrollo Multiplataforma con React Native
      • Desarrollo Multiplataforma con Flutter
      • Arquitectura y Patrones de Diseño Móvil
      • Integración de APIs y Persistencia Móvil
      • Testing y Despliegue en Móvil
      • Diseño UX/UI para Móviles
    • Diseño Gráfico y Arte Digital
      • Fundamentos del Diseño Gráfico y Digital
      • Diseño de Identidad Visual y Branding
      • Ilustración Digital y Arte Conceptual
      • Diseño Editorial y de Empaques
      • Motion Graphics y Animación 3D
      • Diseño Gráfico Asistido por Inteligencia Artificial
      • Creatividad e Innovación en Diseño
    • Programación
      • Fundamentos de Programación e Ingeniería de Software
      • Herramientas de IA para el trabajo
      • Matemáticas para Programación
      • Programación con Python
      • Programación con JavaScript
      • Programación con TypeScript
      • Programación Orientada a Objetos con Java
      • Desarrollo con C# y .NET
      • Programación con PHP
      • Programación con Go y Rust
      • Programación Móvil con Swift y Kotlin
      • Programación con C y C++
      • Administración Básica de Servidores Linux
    • Negocios
      • Fundamentos de Negocios y Emprendimiento
      • Estrategia y Crecimiento Empresarial
      • Finanzas Personales y Corporativas
      • Inversión en Mercados Financieros
      • Ventas, CRM y Experiencia del Cliente
      • Operaciones, Logística y E-commerce
      • Gestión de Proyectos y Metodologías Ágiles
      • Aspectos Legales y Cumplimiento
      • Habilidades Directivas y Crecimiento Profesional
      • Diversidad e Inclusión en el Entorno Laboral
      • Herramientas Digitales y Automatización para Negocios
    • Blockchain y Web3
      • Fundamentos de Blockchain y Web3
      • Desarrollo de Smart Contracts y dApps
      • Finanzas Descentralizadas (DeFi)
      • NFTs y Economía de Creadores
      • Seguridad Blockchain
      • Ecosistemas Blockchain Alternativos (No-EVM)
      • Producto, Marketing y Legal en Web3
    • Recursos Humanos
      • Fundamentos y Cultura Organizacional en RRHH
      • Atracción y Selección de Talento
      • Cultura y Employee Experience
      • Gestión y Desarrollo de Talento
      • Desarrollo y Evaluación de Liderazgo
      • Diversidad, Equidad e Inclusión
      • AI y Automatización en Recursos Humanos
      • Tecnología y Automatización en RRHH
    • Finanzas e Inversiones
      • Fundamentos de Finanzas Personales y Corporativas
      • Análisis y Valoración Financiera
      • Inversión y Mercados de Capitales
      • Finanzas Descentralizadas (DeFi) y Criptoactivos
      • Finanzas y Estrategia para Startups
      • Inteligencia Artificial Aplicada a Finanzas
      • Domina Excel
      • Financial Analyst
      • Conseguir trabajo en Finanzas e Inversiones
    • Startups
      • Fundamentos y Validación de Ideas
      • Estrategia de Negocio y Product-Market Fit
      • Desarrollo de Producto y Operaciones Lean
      • Finanzas, Legal y Fundraising
      • Marketing, Ventas y Growth para Startups
      • Cultura, Talento y Liderazgo
      • Finanzas y Operaciones en Ecommerce
      • Startups Web3 y Blockchain
      • Startups con Impacto Social
      • Expansión y Ecosistema Startup
    • Cloud Computing y DevOps
      • Fundamentos de Cloud y DevOps
      • Administración de Servidores Linux
      • Contenerización y Orquestación
      • Infraestructura como Código (IaC) y CI/CD
      • Amazon Web Services
      • Microsoft Azure
      • Serverless y Observabilidad
      • Certificaciones Cloud (Preparación)
      • Plataforma Cloud GCP

    Platzi y comunidad

    • Platzi Business
    • Live Classes
    • Lanzamientos
    • Executive Program
    • Trabaja con nosotros
    • Podcast

    Recursos

    • Manual de Marca

    Soporte

    • Preguntas Frecuentes
    • Contáctanos

    Legal

    • Términos y Condiciones
    • Privacidad
    • Tyc promociones
    Reconocimientos
    Reconocimientos
    Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
    Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
    Logo reconocimientoPrimera Startup EdTech · 2018
    Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
    Logo reconocimientoCEO Mejor Emprendedor del año · 2024
    De LATAM conpara el mundo
    YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads