WORKSHOP IOS - CLOSURES, GENÉRICOS Y OPERADORES
En los primeros workshops de iOS tratamos el tema de las closures. Si recordamos, una closure, también denominada función de cierre, era como un bloque de Objective-C o C, en la que una función en vez de comenzar con la palabra reservada func incorpora unas llaves { }:
{ (parámetros) -> tipo de retorno in declaración del bloque }
En este workshop entramos en detalle con genéricos y operadores. Respecto a los genéricos, éstos sirven para definir código de una forma más abstracta, sin depender de un tipo en concreto para que el mismo código pueda aplicarse luego a distintos tipos siempre que sigan una serie de reglas, o restricciones, como un protocolo.
El propio módulo de foundation define estructuras como el array o el diccionario que hacen un uso extensivo de generics y eso les permite almacenar colecciones de cualquier tipo. Incluso, ese es quizás el uso más habitual de los generics.
Y en cuanto a los operadores, son símbolos que se usan para trabajar como valores. Se pueden usar para realizar manipulaciones matemáticas o lógicas específicas, pero también pueden servir para comparar números, juntar textos,... Es decir puedes definir operadores que hagan lo que quieran. E incluso, aunque Objective-C cuenta con una gran cantidad de operadores, te puedes crear operadores nuevos que aún no existen en el lenguaje.
Si quieres conocer más sobre estos aspectos, nuestro ingeniero Alberto Irurueta nos enseñó ese workshop de "Closures, generics & operators":
Puedes descargar su presentación aquí.
WORKSHOP IOS - TESTING, PROTOCOLOS Y EXTENSIONES
Las pruebas o tests unitarios nos permiten verificar de forma ágil y segura que nuestra app hace lo que debe hacer. Para verificarlo se basa en los casos de prueba que hayamos definido previamente.
Normalmente se usan para verificar pruebas de regresión, es decir, que nuestra app sigue haciendo lo que antes hacía tras incorporar los nuevos cambios. Es importante tenerlo en cuenta porque Apple puede rechazar una actualización de nuestra app debido a que ésta produzca errores no controlados que podríamos evitar con estas pruebas.
Las pruebas unitarias son la base para el desarrollo guiado por pruebas o Test-Driven Development (TDD), que es un estilo de programación que impone la creación de los casos de prueba con antelación al código que va a ser verificado.
En Xcode existen principalmente dos tipos de pruebas unitarias:
- Pruebas unitarias lógicas: verifican el correcto funcionamiento de un fragmento de código de forma independiente.
- Pruebas unitarias de aplicación: verifican el correcto funcionamiento de fragmentos de código dentro del contexto de nuestra app, y verificar funcionalidades específicas de un dispositivo, como el uso de la geolocalización, acelerómetro, etc.
Los casos de pruebas deben ser:
- Automatizables: que no requieran intervención humana para su verificación.
- Completas: deben cubrir el mayor código posible, es decir que debemos tener casos de prueba que cubran cuántos más métodos de nuestra app mejor.
- Repetibles: un caso de prueba no debe tener ninguna dependencia que impida ser ejecutado varias veces con el mismo resultado.
- Independencia: un caso de prueba no puede depender del resultado de otro caso.
Tan necesarias son las pruebas unitarias como lo es la práctica de la integración continua.
La integración continua consiste en tener un proceso automatizado en el que, después de que cada developer suba código al repositorio, se obtiene la última versión, se compila, se ejecutan el conjunto de pruebas unitarias seleccionado, y se dejan los binarios/resultados en una ubicación conocida.
Con la integración continua evitaríamos el posible problema de que no compile o que de repente fallen funcionalidades dependientes de referencias externas, nos ahorraría tiempo en los desarrollos y nos permitiría centrarnos en lo importante de la aplicación: su funcionalidad.
Existen dos sistemas de integración continua:
- Travis CI: especialmente diseñado para construir y testear proyectos en Github de forma automática.
- Jenkins: es gratuito, open-source y actualmente uno de los más empleados para esta función. Además es muy fácil de utilizar y permite actualizaciones fáciles.
Todos esto lo puedes profundizar en el siguiente workshop "TESTING, PROTOCOLOS Y EXTENSIONES", impartido por Alberto Irurueta y Alejandro García, que se hizo con el objetivo de:
- Entender el funcionamiento de los protocolos
- Aprender a crear tests unitarios
- Generar informes de resultados de tests y de cobertura de código
- Integración continua (Travis vs. Jenkins)
Puedes descargar la presentación aquí.
WORKSHOP IOS - SWIFT: ESTRUCTURAS
En Swift tanto las estructuras como las clases son fundamentales para hacer un proyecto completo.
Las estructuras (structs) son uno de los pilares principales de Swift como lenguaje. Las estructuras representan unidades de información.
Las clases (class) son las partes esenciales que organizar y que dividen nuestra aplicación en diferentes archivos y dentro de estos en diferentes métodos que nos permiten estructurar todo.
Las estructuras y las clases tiene mucho en común. Ambas pueden:
-
Definir propiedades para guardar valores
-
Definir métodos para proveer funcionalidades
-
Definir sub-scripts para proveer acceso a sus valores usando la sintaxis del sub-script
-
Definir inicializadores para configurar en estado inicial
-
Para ser extendidos y expandir su funcionalidad más allá de su implementación por defecto
-
Ajustar protocolos para proveer funcionalidades estándares de cierto tipo.
Las clases tienen capacidades adicionales que las estructuras no tienen:
-
La inner-herencia permite una clase heredar las características de otra clase.
-
El type-casting te permite revisar e interpretar el tipo de instancias dentro de una clase al crear un runtime.
-
Los des-inicializadores permiten a la instancia de una clase liberar cualquier recurso que se le haya asignado.
-
El conteo de referencias permite a que más haya más de una referencia a la instancia de una clase.
Por otro lado, las enumeraciones (enums) en Swift son elementos de primera clase. Ellos adoptan muchas funcionalidades tradicionalmente soportadas por las clases, como propiedades computadas que proveen información adicional sobre los valores actuales de las enumeraciones, y métodos de instancias que proveen funcionalidades relacionadas a los valores que las enumeraciones representan, entre otras cosas.
Para conocer mejor todos estos elementos del código, nuestros ingenieros Jordi Serra y Pierluigi Cifani nos presentaron "Swift - Estructuras".
Puedes descargar su presentación: Swift: structs, enums and classes.
Para mayor información sobre las clases y estructuras, puedes visitar la página de Apple para developers.
WORKSHOP IOS - FUNDAMENTOS DE SWIFT 3
Swift es un intuitivo lenguaje de programación creado por Apple que permite diseñar apps para iOS, Mac, Apple TV y Apple Watch. Es uno de los lenguajes de programación de Apple para iOS y OS X con más futuro. Ahora la versión disponible para los developers es Swift 3.
Swift es un lenguaje rápido y eficaz que proporciona información a tiempo real y se integra a la perfección con Objective-C. Así los developers pueden ofrecer más seguridad, ahorrar tiempo y crear aún mejores apps.
Está pensado para dar a los developers más libertad que nunca. Como es público y de código abierto y tan fácil de usar, con Swift cualquiera puede ejecutar sus ideas.
Como Swift es un código prometedor, decidimos hacer un workshop de "Fundamentos de Swift 3", siendo el 3, como se ha comentado anteriormente, la última versión disponible para todos los developers. Nos los presentaron Alberto Irurueta y Pia Muñoz.
Podéis decargar la presentación aquí.
Presentando una nueva iniciativa: WORKSHOPS DE VISUAL ENGINEERING
Una de nuestros compromisos como empresa es brindar a nuestros clientes desarrollos dentro de las últimas tecnologías que existen en el mercado y para ello ofrecemos a nuestros empleados las herramientas y ayudas para estar al día.
El objetivo de estos workshops es comparar las tecnologías existentes y compartir el conocimiento entre todos nuestros desarrolladores. Además de crear la directiva de desarrollo unificado dentro la empresa y los diferentes equipos.
Decidimos comenzar con los workshops de FrontEnd y los temas que trataremos son:
- Vista General de FrontEnd
- Buenas prácticas de JavaScript
- Patrones de Diseño en Javascript
- Herramientas de JavaScript
- NodeJS
- Testing en JavaScript
- Herramientas de diseño
- Single Page Applications
- BackboneJS y patrones MVC
- Novedades y navegadores soportan a ECMAScript6
- Tendencias en diseño de web y prototipado
- AngularJS Parte I
- AngularJS Parte II
- AngularJS Parte III
- Aplicaciones híbridas con IONIC
- EmberJS Parte I
- EmberJS Parte II
- Diseñar efectos “cool” (Parallax y otros)
- Programación reactiva. Introducción a ReactJS
- El patrón Flux. Introducción de React-Redux
- ReactJS React-Router
- React - Redux: Middleware / Componentes de mayor orden
- ReactJS. Testing en React y Redux
- Aplicaciones con React Native I: Introducción
- Aplicaciones con React Native II: Componentes
- Aplicaciones con React Native III: La parte nativa
Seguidamente hicimos los siguientes workshops de iOS:
- Fundamentos de Swift 3
- Swift: Estructuras
- Testing, protocolos y extensiones
- Closures, genéricos y operadores
En las siguientes entradas podréis ver el contenido de cada uno de los workshops. ¡No lo perdáis de vista!