Home » Análisis » Swift y Objective-C, analizamos cuál es el mejor de ambos
Objective-C vs. Swift

Swift y Objective-C, analizamos cuál es el mejor de ambos

Se ha hablado mucho de Swift desde su aparición hace apenas un mes. Las opiniones han sido de todo tipo: muy positivas, gente ilusionada, gente indiferente, opiniones frías, gente que lo considera peor o incluso gente que lo critica libremente simplemente porque Objective-C forma parte de su modo de vida y rechaza el cambio. Las opiniones son libres, cada uno tiene la suya y todas son válidas. A nosotros nos importan los hechos y es lo que vamos a repasar.

Potencia del lenguaje (POWER)

Este es un punto que no admite discusión por mucho que algunos se aventuren a decir lo contrario: Swift es un lenguaje que se sitúa muy por delante de Objective-C en cuanto a potencia y rendimiento.

El hecho que use el mismo compilador que Objetive-C no significa absolutamente nada porque este lo que hace es convertir a binario nuestro código, y es en esa traducción/conversión donde radica la mayor o menor potencia de un lenguaje. Ya lo comentamos en nuestro análisis entre Metal y Android Extension Pack: cuánto más cerca del hardware está un lenguaje, mejor es su rendimiento. Y Swift está más cerca que Objetive-C.

Objective-C & Swift Task Performance

Porque Swift tiene menos capas, está más pegado a la CPU, más optimizado y por lo tanto su rendimiento es superior a Objective-C que, como súper clase de C, ya es de por sí más lento que el propio C al ser una capa de abstracción por encima de este.

De hecho, Swift es más potente y ligero para la CPU que el propio C, así que por mucho que algunos digan lo contrario, este tema no admite lugar a dudas ni discusión de ningún tipo.

Compresión sintáctica y facilidad (MODERN)

Aquí el ganador es sin duda Objetive-C, lo que hace que sea un lenguaje más óptimo para, por ejemplo, iniciarse en el aprendizaje de un lenguaje de programación. Es más fácil de aprender.

Comparación Objective-C y Swift

Se ve claramente en este pequeño ejemplo de código entre ambos lenguajes: Objetive-C utiliza muchas más líneas, pero a su vez es más claro de entender y comprender. Por el contrario Swift, al acercarse más a un lenguaje de script más estricto, a veces es muy complicado de entender y comprender. Hemos de tener muy claros todos los conceptos y presentes en la memoria de manera continua, para ser capaces de coger un trozo de código y entenderlo sin comentarios ya que a veces puede ser excesivamente críptico.

En este sentido, el ganador es sin duda Objective-C, quien a su vez en la notación moderna del lenguaje (Modern Objective-C) permite definir de una manera muy parecida a Swift las variables y crear sus contenidos, con lo que conseguimos un extra de facilidad.

Seguridad en el código (SAFE)

Hace unos meses, Apple tuvo un problema de seguridad bastante serio con una implementación de la certificación de certificados SSL.

El problema fue que al tener una serie de if consecutivos, uno de ellos se escapó en un else no controlado. En Objective-C, una instrucción if no necesita ser acotada con llaves de inicio y fin, porque entiende que la primera instrucción seguida al if es lo que ha de ejecutarse. Pero a alguien se le escapó un break de más que rompía el if y hacía que se saliera de una condición en el momento que no debía: esto en Swift jamás hubiera pasado.

Objective-C Errors

Punteros vacíos y no controlados, desbordamientos de buffers, variables con valor no inicializado, formato y conversión de cadenas con contenidos no seguros, flujos de ejecución no controlados correctamente, reglas de copia o referencia de objetos no limpiadas o incluso la propia gestión de memoria y el ciclo de vida de cada objeto o variable. Todo eso son errores que Objetive-C y otros lenguajes tienen o pueden tener y que el desarrollador puede cometer. Errores que interrumpirán la ejecución de nuestro programa y que no se alertarán en tiempo de compilación.

Errores que Swift es imposible que tenga dada su robusta estructura que obliga a cumplir una serie de requisitos a la hora de trabajar y que garantizan la ausencia de estos. Porque además, en caso de existir, suelen ser alertados en tiempo de compilación y no en tiempo de ejecución, como hemos indicado. De esta forma, la estabilidad y seguridad del código ante fallos es muy superior a Objetive-C, así como la propia estabilidad y seguridad de los programas hechos con él.

Sí, Swift es más estricto y eso le da un extra de dificultad a la hora de aprenderlo y manejarlo, pero la recompensa merece el esfuerzo. Esto es otro aspecto que no admite discusión alguna.

Conclusiones finales

Hemos repasado los tres pilares fundamentales de Swift: moderno, potente y seguro. Solo en lo referente a moderno ha perdido, no por no serlo, sino porque su sintaxis es más compleja y su lenguaje menos sintáctico. Pero en el resto de elementos ha ganado muy por delante a Objetive-C.

Principios de Swift

Pero… la realidad ante nosotros es que Swift tiene menos de un mes de vida y Objetive-C muchos años: los recursos, APIs, soluciones, funciones, librerías, documentación, referencias, páginas… todo es Objetive-C ahora mismo y ha sido durante muchos años el referente de desarrollo en entornos Apple y lo seguirá siendo sin duda alguna.

Mientras, Swift está en versión beta, necesita pulirse más y es normal que nos encontremos errores culpa del compilador que nos volverán locos por no tener explicación (conozco más de un caso más que real). Está fuera de toda comparación que el recorrido de Objetive-C está plenamente consolidado y que Swift está dando sus primeros pasos.

Es incuestionable que Swift se sitúa en una posición de privilegio, porque tiene todas las ventajas de un lenguaje de script, con el rendimiento de un lenguaje más potente: en esa esquina superior derecha de los diagramas en que a Apple le gusta situar sus soluciones o productos.

Swift, Productivity - Performance

Pero Swift necesita aun mucho camino, no se pueden enviar aplicaciones para publicar hasta dentro de unos meses, necesita aun llegar a una versión final (porque el compilador aun no lo está) y mucho recorrido. Su aprendizaje podemos tomárnoslo con calma porque su bagaje está muy lejos de Objective-C y esto lo digo con total conocimiento de causa: aprender hoy día Objetive-C es garantía de futuro para muchos años porque este nunca desaparecerá como lenguaje de programación. No es esa ni mucho menos la intención de Apple.

Swift es una opción más, algo que nos permite mejorar a todos los niveles y es un tren en que tarde o temprano habrá que subirse. Pero Apple sabe muy bien como sumar y sin duda, saber Objetive-C será algo imprescindible durante muchos años para trabajar bien en entornos Apple y ambos lenguajes irán de la mano. De hecho, la mejor forma de aprender Swift es saber Objective-C.

Por eso aquí vamos a darle la misma importancia a ambos y podrás aprenderlos. Será el binomio que te dará las claves de tu éxito como desarrollador en el futuro: te lo garantizamos. Espero que haya servido para aclarar dudas al respecto y, como siempre, good Apple coding.

Acerca de Julio César Fernández

Analista, consultor y periodista tecnológico, desarrollador, empresario, productor audiovisual, actor de doblaje e ingeniero de vídeo y audio.

Otras recomendaciones

Swift 3.1

Swift 3.1 ha llegado, análisis de todos sus cambios

Swift 3.1 ha llegado de la mano de la hornada de actualizaciones lanzadas por Apple. Analizamos sus cambios más importantes e incorporaciones más destacadas. Nuevas formas de convertir closures que no escapan en los que sí lo hace, conversiones seguras de números, genéricos más eficientes... descubre en nuestros análisis con ejemplos concretos todos los cambios y descúbrelos por ti mismo.