Swift, el nuevo lenguaje de Apple. Goodbye [Obj-C]

eZpit

Ayer, en la WWDC14, apple anunció su nuevo lenguaje de programación para remplazar Obj-C. Es bastante más moderno, oculta completamente la gestión de memoria (previsible tras ARC) y es algo más rápido que Obj-C.
Página oficial de Swift

Han publicado un libro/referencia sobre el nuevo lenguaje.
El libro oficial y gratuito

Por otro lado, XCode6 ya está disponible y soporta completamente el nuevo lenguaje. Incluye un par de nuevas features bastante reshulonas.
Página oficial de Xcode6

¿Que os parece? Yo honestamente hace poco que me he metido a desarrollar para IOS y vengo de C++ y Java, así que Obj-C no me parece tan horripilantis, pero entiendo que es un avance importante y moderniza bastante la cosa.

Un saludo.

5
zoeshadow

A mucha gente le echaba para atrás Objective-C a la hora de empezar a desarrollar aplicaciones para iOS, así que esto va a ayudar a disminuir la curva de aprendizaje.

Solo espero que sea suficientemente bueno para que la gente se cambie a Swift y no prefieran quedarse en Objective-C.

Personalmente me viene bien, aunque sea desarrollador de Android principalmente, a veces hace falta tocar cosas en apps de iOS y la verdad es que Objective-C me daba bastante grimita ( sobre todo antes de ARC )

2 respuestas
sonkxx

Pues yo creo que esto es otro paso atrás, con la cantidad de lenguajes que hay ... no se ultimamente esta de moda crear lenguajes que luego ni ellos usan

Spacelord

#2 ¿Por qué echa para atrás Objective-C? No tengo ni idea de desarrollo para OS X/iOS pero no paro de ver quejas sobre Objective-C y nadie dice por qué.

2 respuestas
TeRRo90

#4 #2 Me imagino que lo dice por la Sintaxis, si programas en Java principalmente al irte a Objective-C es un poco :O

Con respecto a Swift la verdad que tienes cosas de venga ya enserio? como lo de poner emoticonos a las variables para nombrarlas pero bueno habra que probarlo jeje

1 respuesta
zoeshadow

#4 Sobre todo la sintaxis, para los que venimos de Java/C++ se nos hace raro ver tantos [, ] y los named parameters, que aunque están muy bien al principio lian mucho, en el siguiente snippet se puede apreciar lo que digo xD:

- (void)viewDidLoad
{
    [super viewDidLoad];
 
    UIImage *image = [UIImage imageNamed:@"spritesheet.png"];
 
    [self addSpriteImage:image withContentRect:CGRectMake(0, 0, 0.5, 0.5) toLayer:self.someUIView.layer];
 
    [self addSpriteImage:image withContentRect:CGRectMake(0.5, 0, 0.5, 0.5) toLayer:self.someUIView.layer];
 
    [self addSpriteImage:image withContentRect:CGRectMake(0, 0.5, 0.5, 0.5) toLayer:self.someUIView.layer];
 
    [self addSpriteImage:image withContentRect:CGRectMake(0.5, 0, 0.5, 0.5) toLayer:self.someUIView.layer];
 
}

Otra cosa que no me gustó nada pero que ya está solucionada era la gestión de memoria, objective-C tenia una gestión de memoria manual, despues hicieron un híbrido y finalmente ya metieron ARC, que es una especie de Garbage Collector ( estilo Java )

Mayormente es el desconocimiento, el lenguaje tiene cosas buenas, pero se nota que es un lenguaje antiguo y los años le pesan.

1 respuesta
RaymaN

¿El libro no está en pdf por ahí?

1 respuesta
Spacelord

#5 #6 Muchas gracias a los dos por las respuestas.

¿Hablamos aquí también de Metal, ya puestos?

Meleagant

La sintaxis de Objective-C era como una patada en los cojones.

También es verdad que era un lenguaje bastante "low level" para lo que está acostumbrada la gente hoy en día, tanto que tuvieron que meter el ARC, y tener estructuras como el NSArray que no pueden modificarse resultaban chocantes para la gente que está acostumbrada a lenguajes como Java que te gestionan todo de forma mucho más dinámica.

B

El control de memoria tenía más ventajas que inconvenientes aunque veo normal que implementaran el recolector de basura por las quejas de los copy-pasters de código. Sobre la síntaxis, no toma más de 10 minutos aprender la correlación con otros lenguajes y sobre el resto de mejoras poco puedo decir porque no lo he usado pero solo con leer "ya no hace falta usar punto y coma" miedo me da.

1 respuesta
Spacelord

Yo lo que no acabo de entender es cómo puede tener tipado dinámico (o eso me parece entender, porque no lo he visto especificado en ningún sitio) y generics al mismo tiempo. Hay ahí una bomba de relojería a punto de explotar.

B

#7 Este?

1 1 respuesta
Meleagant

#10 Como siempre, trabajar a nivel más bajo tiene ventajas para optimizar, pero es más proclive a errores y requiere más trabajo.

Aparte de eso, la sintaxis es incómoda cuando el resto de lenguajes tienen una estructura más o menos común que no se parece a esa. Y lo peor es que mezclaba C con Obj-C en muchas partes, lo que lo hacía más incómodo.

B

Yo he programado bastante en Objective-C y, personalmente, me parece un lenguaje interesante.

A mucha gente se le atraviesa porque toda la parte OO no es como C++/Java, sino que utiliza una sintaxis un poco más rara. Sobretodo porque la OO se basa en el "paso de mensajes". Yo siempre advierto a los nuevos que trabajen con los warnings como errores porque, en Obj-C, normalmente, los warnings son errores.

Es válido pasar un mensaje a un objeto nulo. Y responder mensajes sin ser su receptor (básicamente los callbacks no son por tipo sino por selector, que es la signatura del metodo). O extender cualquier objeto con nueva funcionalidad. Este tipo de carácteristicas permiten cosas como el "weak-linking" que significa que puedes atacar funcionalidad que puede estar o no. El código para esto queda super limpio porque inicializas el objeto y, si no esta, te va a dejar un nil con lo que puedes desactivar algo grácilmente. Esto es importante porque puedes hacer código para iOS 4.3 que use gamepad y iCloud si están disponibles.

Pero, sobretodo, creo que lo más interesante de Objective-C es que los APIs de Apple estan muy bien pensados. Ya no solo es que la documentación esté muy bien, es que las librerias de Cocoa y las que se usan para iOS estan pensadas para hacerle fácil la vida al usuario, no para facilidad del implementador.

Lo que me parece interesante de Swift es que lo que hará es compilarse con LLVM y atacará a las mismas librerias que Obj-C. Si Swift sirve para cualquier cosa y puede sustituir totalmente a Objective-C, y eso incluye la posibilidad de atacar a codigo C++, por mi fabuloso.

Siempre vale la pena aprender lenguajes nuevos, especialmente si no te conformas en escribir Java en Objective-C (o en Python) sino que intentas llegar a profundizar. Para muchos Swift será su primera exposición a un REPL, a closures o a los patrones funcionales (con el map se resuelven las iteraciones de forma muy elegante, p.ej). Muchos de estos conceptos existen en otros lenguajes, pero como se añadieron despues de que los aprendieron, muchos nos los han estudiado.

N

#12 El PDF no está completo, ¿No? No lo he acabado de mirar bien pero en el iPad me salían 500 páginas o así.

Dante88

No le veo el sentido a una declaración donde no se especifica tipo cuando las variables si que tienen tipo. Para que se parezca a js imagino.

Por lo demás es una especie de python/ruby con sintaxis mas similar a c. Parece que este entre medio.

2 respuestas
B

En algunos casos parece que Swift es white space sensitive, peta en sitios donde su equivalente en Obj-C no peta. A estas alturas, al estar en fase Beta no se si será un error de Apple o se habrán cargado una buena característica de Obj-C.

Curly braces ahora estrictamente necesarios en conditionals.

B

#16 Fijate que yo lo veo más cercano a Javascript que a Ruby o Python. Al menos la sintaxis, python es sensible al indent y ruby solo usa los curly brackets para bloques/procs de una línea o hashes, el resto es todo con \n

eZpit

Por muy rara que pueda parecer a simple vista, la sintaxis de Obj-C se tarda 5 minutos en entender, exactamente lo que se tarda en entender los mensajes.

Yo el problema que veo ahora es que la mayor parte del tiempo estas usando y extendiendo clases hechas en Obj-C, y por tanto Swift de momento se convierte solo en una sintaxis nueva.

El playground mola y me parece extremadamente didáctico y útil para aprender, pero a simple vista me parece completamente inútil en un proyecto normal de IOS.

N

Ya decía yo que me sonaba de algo todo esto y que ha había visto ese nombre y pajaritos en algún lado:

www.swift-lang.org

¿Han sudado de esta gente o simplemente no hay problemas legales?

1 respuesta
MTX_Anubis

Sobre swift, no sé si está completo y está un poco mal formateado:

https://docs.google.com/file/d/0B_hMezUpeg22cTJLWk5vSC1vUWs/view?sle=true

Lo que he visto me gusta, todo lo que sea dar legibilidad y escribir menos siempre debería ser bien recibido aunque no sé si hacía falta crear un refrito de otros lenguajes.

#16 El tipo se infiere por lo que estoy viendo y está hecho para no tener que sea menos verbose la cosa. Para mí tiene mucho sentido: escribir menos cosas innecesarias.

#20 Es Apple, ellos no plagina ni copian, reinventan incluso los nombres.

1 1 respuesta
N

En la documentación para developers hay (parte creo) del libro:

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html#//apple_ref/doc/uid/TP40014097-CH2-XID_1

Me arden las venas de tener que verlo en solo como iBook.

#21 I see what you did there.

EDIT: En los resources de su reddit está la versión en ePub:

http://www.reddit.com/r/swift

Parece que la documentación para devs es el libro completo en formato web.

Y el cheat-sheet (wip):

http://kpbp.github.io/swiftcheatsheet/

1
eZpit

Retiro lo dicho sobre el Playground. Empiezo a verlo como una muy buena herramienta.

Isengard

es posible usarlo sin estar suscrito a ser desarrollador, es decir, apoquinar los 99$???

2 respuestas
DarkSoldier

#24 primero debes invertir 1000€ en un mac y si, programar para os x o ios es gratis, lo que vale es publicarlo luego que necesitas la licencia de desarrollador para poder subirlo a appstore

2 respuestas
N

#25 No le mines la moral.

#24 Yo tengo montado un Hakintosh, hoy en día es MUY fácil con el HW adecuado. Los mac mini son la alternativa más barata, busca en la tienda de refurbisheds.

1 respuesta
B

#25 tienes un macmini que cumple a la perfección nuevo por la mitad de eso, y si ya miras mercado de segunda mano apaga y vámonos.

1 respuesta
DarkSoldier

#27 confirmas pues que apple es superbarato y asequible para todo el mundo?

1 respuesta
zoeshadow

#26 por cuanto te ha salido montar el Hackintosh?

1 respuesta
N

#29 Bueno el mío es high budget porque llevo 2 ssd para tener os/windows y usar windows para high end gaming y render... No se si te saldría a cuenta mirar lo mío. Pero los MacPro salen por menos de 1000 euros por ejemplo.

De hecho mira esto:

http://www.tonymacx86.com/section/295-customac.html

Ese es el HW que te deja instalar OS X sin problema a 1/4 del valor de un Mac. También si indagas en el foro hay "Golden builds" que ya están montadas y solo tienes que copiarlas y te ayudan en todo lo que necesites para la instalación.

PD: Ojo que no venga nadie a decir que esto es pirateo blablablabla que Apple Inc. deja su OS gratuítamente a quien lo quiera, la trampa es la arquitectura Mac != PC.