Genericidad en Swift

La genericidad es una de las características más poderosa de Swift, como también lo es en otros lenguajes de programación; nos permite definir estructuras de datos de tipo seguro (type-safe) y funciones sin tener que comprometernos con un tipo de dato en específico, aunque podemos definir algunas reglas.

Este tipo de funcionalidad nos permite reutilizar código, sobre todo, algoritmos relacionados al procesamiento de datos.

¿Para qué la genericidad?

Vamos a ver con un ejemplo, qué tipo de problemas la genericidad nos ayuda a resolver.

Supongamos que queremos desarrollar una estructura de datos Pila (Stack) que podamos utilizar con cualquier tipo de datos, la cual va a tener los métodos clásicos, poner un elemento en la pila (push) y extraer un elemento de la pila (pop). Vamos a asumir que Swift no soporta genericidad.

Continue reading “Genericidad en Swift”

Generadores de Ionic 2

Otro comando importante del CLI de Ionic, que no vimos en el primer post, es generate, el cual nos ayuda a crear páginas y servicios para la aplicación.

En este post vamos a utilizar generate para crear un ejemplo de página de inicio de sesión. Para crear el proyecto vamos a utilizar el comando start como vimos en posts anteriores, para ello ejecutamos en la consola:

ionic start --v2 ejemplo tabs

En la consola, entramos en la carpeta “ejemplo”, recien creada por el comando start, y crearemos la página donde vamos a colocar el formulario para iniciar sesión. Vamos a utilizar generate para crear la página, de la siguiente manera:

ionic generate page login

Continue reading “Generadores de Ionic 2”

Cómo utilizar plugins de Cordova en Ionic 2 con Ionic Native

Nota: He publicado una versión más actualizada de este post para la versión 3 de Ionic.

En este post vamos a ver cómo podemos utilizar los plugins de Cordova con Ionic 2. Hemos mencionado varias veces Cordova y que Ionic depende de Cordova para desplegarse de forma nativa, ¿qué quiere decir esto exactamente?

Una de las desventajas de crear aplicaciones web para dispositivos móviles es que, al contrario de las aplicaciones nativas, no tienen acceso a funcionalidades nativas de los dispositivos como por ejemplo, la cámara, el GPS, la galería de fotos, funcionalidades de redes sociales de forma nativa y muchas otras.

Es aquí cuando Cordova viene al rescate. Cordova agarra todo el HTML, CSS, recursos y JavaScript de tu aplicación (en el caso de Ionic 2 sería tu aplicación basada en Angular 2) y lo coloca en un contenedor nativo, dependiendo de la plataforma, este puede ser iOS o Android, y provee un API de JavaScript, con el cual, desde nuestro código de la aplicación podemos acceder a las funcionalidades nativas del dispositivo.

Continue reading “Cómo utilizar plugins de Cordova en Ionic 2 con Ionic Native”

Ionic 2 CLI

Nota: En este post se habla sobre el CLI de Ionic 2, como lo dice el título, ya hay una nueva versión de este CLI, les recomiendo siempre leer la documentación del CLI.

Desde hace un tiempo quería empezar a escribir posts sobre Ionic ya que he empezado a utilizarlo y quería compartir un poco lo que he aprendido y obtener retroalimentación de otros sobre cómo hacer mejor las cosas o quizás algunos tips and tricks.

Ionic es un framework de desarrollo de aplicaciones web progresivas (PWA) e híbridas basadas en Cordova o PhoneGap. En la versión 1 se utilizaba Angular 1 para desarrollar la aplicación y en la recien lanzada versión 2 se utiliza Angular 2. En estos posts vamos a utilizar la versión 2 de Ionic y Angular.

En este primer post, vamos a hacer algo sencillo, crear una nueva aplicación y ver varios comandos del CLI de Ionic 2.

Continue reading “Ionic 2 CLI”

¿Qué pasó con mis “for” estilo C en Swift 3?

Ayer Apple anunció en el WWDC la disponibilidad de Xcode 8 beta para los desarrolladores y con ella Swift 3.

Si has tenido un tiempo de probar algún código escrito con una versión anterior de Swift es probable que hayas encontrado algunos errores inesperados, inesperados si no has estado al tanto de la evolución de Swift por estos meses.

Creo que los errores más comunes que nos vamos a encontrar en código viejo, cuando migremos a Swift 3, son las cosas que iban a marcarse obsoletas para esta versión. Una de ellas es la sintaxis del for estilo C.

for estilo C

Ya desde la versión 2.2 de Swift, Xcode nos venía alertando que esta sintaxis iba a ponerse obsoleta en versiones futuras. Si aún tienes instalado Xcode 7.x puede probarlo en un Playground:

Xcode alertando sobre for estilo C
Xcode alertando sobre for estilo C

Continue reading “¿Qué pasó con mis “for” estilo C en Swift 3?”

Docker beta para Mac y ASP.NET Core

Hace unos días recibí la invitación para probar Docker para Mac y Windows, bueno hace unas semanas realmente, y desde entonces quería escribir un post sobre las pruebas que he hecho en Mac con Docker y ASP.NET Core.

La intención de este post no es explicar qué es Docker, ni qué es ASP.NET Core en detalles, ni cómo fue implementada la aplicación web de ejemplo, el cual es muy sencillo, sino más bien mostrar los pasos que seguí para ejecutar una aplicación web ASP.NET Core desde un contenedor Docker utilizando el beta para Mac.

Docker

Tomado de su sitio web:

Los contenedores de Docker envuelven una pieza de software en un sistema de archivos (filesystem) que contiene todo lo que dicho software necesita para ejecutarse: código, entorno de ejecución, herramientas y librerías del sistema – cualquier dependencia que normalmente instalarías en un servidor. Esto garantiza que siempre se ejecutará de la misma manera sin importar el entorno en que este ejecutándose.

Es importante entender qué es un contenedor y de igual manera qué lo diferencia de una máquina virtual, esa información la pueden entontrar en la página referenciada anteriormente y haciendo una búsqueda rápida en Google ya que Docker es muy popular por estos días.

Continue reading “Docker beta para Mac y ASP.NET Core”

Principio Open-Closed en Swift

En este post vamos a ver un ejemplo de diseño que no cumple con el principio Open-Closed y una versión del mismo ejemplo que sí cumple con el principio.

Principio Open-Closed (OCP)

Los principios SOLID son cinco principios básicos del diseño y la programación orientada a objetos, uno de los cuales es el principio Open-Closed

Una descripción más detallada de este principio la pueden encontrar en un artículo de Robert C. Martin “Uncle Bob”, coautor del Manifiesto Ágil, titulado The Open-Closed Principle.

Bertrand Meyer acuñó este principio en 1988 de la siguiente manera:

Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.

Y en su artículo, Uncle Bob nos explica que:

Los módulos que cumplen con el principio open-closed tienen dos atributos principales:

  1. Están “abiertos para extensiones” (Open).
    • Esto significa que el comportamiento de un módulo puede ser extendido. Que podemos hacer que un módulo se comporte de nuevas y diferentes maneras a medida en que los requerimientos de la aplicación cambien, o para satisfacer nuevas aplicaciones.
  2. Están “cerrados para modificaciones” (Closed).
    • El código fuente de dicho módulo es inviolable. Nadie está autorizado a cambiar dicho código.

Continue reading “Principio Open-Closed en Swift”

Opcionales en Swift

El otro día un amigo me comentaba que estaba implementando un juego para probar Swift por primera vez y me contaba que estaba teniendo problemas entendiendo algunas cosas de los opcionales (optionals) en Swift. Pensé que era un buen tema para escribir un pequeño post y de paso generar un poco de documentación en Español, lo cual es uno de los principales propósitos de este blog.

Opcionales

Según la documentación de Swift,

Los opcionales se utilizan en situaciones donde el valor puede estar ausente.

Este concepto no existe en Objective-C, en el cual es permitido incluso enviar un mensaje a nil. Lo más cercano a representar ausencia de valor es retornando nil en métodos que de otra manera deberían devolver un objeto, pero esto solo funciona con objetos y no con enumeraciones, estructuras y tipos básicos de C para los cuales generalmente se utiliza NSNotFound para representar ausencia de valor; en dependencia del tipo, algunos desarrolladores también utilizan 0, -1, NSIntegerMax y cosas parecidas.

Continue reading “Opcionales en Swift”

Selector, su evolución en Swift

Antes de ver la evolución de los selectores en Swift, veamos qué es un selector en Objective-C.

Los selectores en Objective-C son del tipo SEL y es la manera mediante la cual podemos identificar/seleccionar un método y luego poder ejecutarlo en un objeto.

Las formas más comunes de obtener un selector son a través de la directiva @selector y la función NSSelectorFromString, veamos como se utilizan ambas:

SEL selector1 = @selector(calcularArea);
SEL selector2 = NSSelectorFromString(@"calcularArea");
SEL selector3 = @selector(avanzar:);
SEL selector4 = NSSelectorFromString(@"avanzar:");

En las líneas 1 y 2 representamos a un método que no tiene argumentos “calcularArea” y en la 3 y 4 representamos a un método con un argumento “avanzar:”.

Continue reading “Selector, su evolución en Swift”

“Delegation” en Swift

A lo largo de tu carrera como desarrollador de aplicaciones para iOS te encontrarás utilizando muchos patrones de diseño como por ejemplo Singleton, MVC, Decorator, Observer; pero uno de los más importantes y utilizados es Delegation. Antes de entrar en detalles, ¿qué es un patrón de diseño?

Patrones de diseño

No vamos a profundizar en este post acerca de los patrones de diseño pues hay muchos artículos y libros sobre el tema, solamente veremos de que se trata y pueden consultar luego al respecto.

El concepto de patrones de diseño fue introducido en 1994 en el libro “Design Patterns: Elements of Reusable Object-Oriented Software” de los autores Erich Gamma, Ralph Johnson, Richard Helm, John Vlissides, el cual trata sobre temas de Programación Orientada a Objetos y patrones de diseño y desde entonces ha influenciado mucho en la ingeniería de software; este colectivo de autores es conocido por “Gang of Four (GoF)”.

Continue reading ““Delegation” en Swift”