Aprende Swift 3

Genéricos en Swift 3

¡Prueba gratis durante 10 días

nuestros 1198 cursos !

Prueba gratis Mostrar modalidades de suscripción
Con los tipos también vienen algunas situaciones en donde no queremos repetir código o aceptar que el tipo sea una razón de cambio en nuestra función. Los genéricos nos permiten aceptar tipos diferentes en funciones muy específicas.

Transcripción

Pues agárrate muy bien de tu silla porque vamos a ver genéricos. Los genéricos no son un tema para iniciados, pero, en Swift es muy, muy fácil de utilizar y que sea muy fácil de implementar en tus proyectos. Los genéricos resuelven un problema, volver genérica una función. Sí, ya sé, todas las funciones deberían ser genéricas y con responsabilidad única. Pero, a veces, simplemente no es fácil. ¿Cómo podemos definir un genérico? Muy sencillo. Por lo general los genéricos son funciones que van a permitir tomar diferentes tipos. Por ejemplo, aquí le voy a poner "AddBang". Y, este AddBang va a recibir un parámetro. "param1" de tipo "String", "param2", tipo "String", y voy a regresar con una poderosa cadena. "String" muy bien. ¿Qué es lo que va a hacer? Bueno, simplemente "return", una interpolación de cadenas. Me faltaron las comillas, con la interpolación de cadenas, voy a imprimir primero "param1", espacio, "param2", espacio. Y le voy a agregar los "Bang" o signos de admiración. Y listo. Y aquí ya puedo utilizarlo, AddBang, con el parámetro 1, le voy a pasar la letra "a", con la poderosa letra "b" y el resultado es "ab" y los signos de admiración. Muy bien, ya tenemos esto. ¿Qué pasa si yo quisiera hacer lo mismo pero con enteros? Tendría que copiar, pegar, cambiar el tipo, cambiar el tipo de aquí, cambiar el tipo acá y mandarlo a llamar. AddBang con los enteros, y aquí le paso 1, 2, y, ahí está, ya lo tenemos. Pero esto no es muy bonito que digamos, ¿Cómo que vamos a estar copiando y pegando por todos lados? Hay un principio que se llama "Don't repeat yourself" o "No te repitas a ti mismo" y en realidad, si te fijas, esto es un código que se está repitiendo. ¿Cuál es el tema? Bueno, el tema es que tú necesitas una función que reciba dos tipos diferentes pero no la quieres estar definiendo a cada rato. Bueno, ¿cómo lo puedo hacer? Muy simple. Voy a definir aquí una función "AddBang Generic". Le voy a poner "<", "" y adentro, le voy a poner una "T" mayúscula. Esta "T" me va a ayudar para poder tener una referencia al tipo; el tipo, va a ser como si yo estuviera capturando en una variable qué tipo es. Ya lo iremos viendo. Ahora le voy a poner "param 1", ¿de qué tipo va a ser param 1? De tipo "T", ¿Cuál es tipo "T"? No lo sé, simplemente sé que es un tipo. "Param 2", de tipo "T". Esto quiere decir que el segundo parámetro tiene que ser del mismo tipo que el primer parámetro. Y listo, puedo colocar la misma respuesta. ¿Ok? Veamos cuál es el error que me está marcando aquí. ¡Ah!, dice que esto no puede estar vacío, que no me puede regresar vacío o "void" Ah, aquí me faltó el regreso. Ok, vamos a regresar, "string". Muy bien, ya no debería haber problema. Ahora, ¿cómo lo puedo utilizar? Muy sencillo. "AddBang... ...Generic". ¿De qué tipo? Primero le voy a poner "a" y luego le voy a poner "b". Y voy a utilizar la misma para "1" y "2", y sigue funcionando, entonces ya me puedo ahorrar todo esto, ya no lo necesito, ya no lo quiero, los genéricos me han solucionado la vida. Ahora, ¿qué es lo que no puedo hacer? Bueno, pues simplemente no puedo hacer "1" y "b", ¿por qué? Porqué le estoy diciendo que el segundo tipo tiene que ser igual al primero. "Oye, pero yo necesito que el segundo tipo sea de otro tipo." Ah, no te preocupes, puedes definir esto a través de la misma firma. Por ejemplo, si yo aquí pusiera que "T" + "," y voy a poner otro tipo, como por ejemplo "J", vas a encontrar en algunos Scripts que están utilizando Element, en mayúscula, con la "E" mayúscula. Eso es para hacer una referencia a un elemento o a un tipo de elemento que no saben cuál es el que está dentro. Lo que pongas aquí es simplemente tu elección. Entonces, el parámetro 2 tiene que ser de tipo "J", y, de esta manera, ya lo volví más genérico. Ya funciona este método. Ahora, ¿qué más puedo hacer con esto? Bueno, pues puedes hacer algo un poco más avanzado, puedes decir que "T" puede implementar algún protocolo. ¿Cómo cuál protocolo? Bueno, puede ser "Hashable", tienes que decir: "Sabes qué? "T" tiene que ser 'Hashable', si no, no va a funcionar". y "Entero" y "String" implementan "Hashable". O tal vez "Comparable" "Comparable" también es un protocolo que implementa "String" y que implementa "Entero". Puedes agregar tantos protocolos como necesites en esta cláusula, simplemente colocando dos puntos, y cada coma con el siguiente protocolo. Los genéricos son muy poderosos, te sugiero que los estudies muy bien, pero también te lo voy a aclarar, no son para todo. No los debes de sobreexplotar, porque en realidad pueden hacer algo muy dinámico. Entonces, simplemente analiza muy bien cuándo los necesitas, el problema que resuelven es muy, muy bueno, y te va a ayudar a escribir menos líneas de código.

Aprende Swift 3

Descubre Swift 3, la versión más actual del lenguaje de Apple; conoce todas sus novedades y aprende el lenguaje de código abierto desde cero para desarrollar tus aplicaciones.

3:14 horas (31 Videos)
Actualmente no hay comentarios.
 

Este curso video2brain está disponible como descarga y para ser visualizado online. ¡Pero no hace falta que decidas entre las dos opciones! Al comprar el curso, disfrutarás de ambas posibilidades.

La descarga te permite ver las lecciones sin estar conectado/a a internet y supone una navegación fácil y ágil entre capítulo y capítulo. Si vas a trabajar en diferentes ordenadores o si no quieres descargarte el curso completo, entra en la web con tus datos de acceso y disfruta directamente de tus vídeos online. Te deseamos que disfrutes de este curso y te resulte de mucha utilidad.

Estamos a tu disposición si tienes cualquier tipo de duda o pregunta.