SWIFT, le nouveau langage d'Apple

Dans le cadre de notre projet Eurosport, nous effectuons actuellement une transformation de la base applicative de l'objective-c vers le Swift (2.1). Cela nous permet d'avoir un point de vue particulier sur l'apport du Swift à une application iOS.
Pour vous mettre dans le contexte, le Swift est le nouveau langage d'Apple pour développer des applications iOS, OSX ou OS TV. Ils ont ainsi voulu simplifier le développement mais surtout aider et pousser les développeurs à mieux réaliser leurs applications. Le Swift est guidé par 3 principaux axes : la Sécurité, la Modernité, la Puissance ce qui permet d'avoir un code concis, précis et beaucoup plus lisible que l'objective-c. Et contrairement à ce dernier, afin d'améliorer son langage au quotidien, Apple l'a rendu "Open Source" créant ainsi une communauté autour et une mise à jour régulière (par Apple ou la communauté).
Sécurité
Comment le Swift pousse donc le développeur à "mieux" coder ? Simplement en obligeant ce dernier à typer ses objets.
Lors de la déclaration d'un objet, le développeur doit maintenant spécifier dès le départ si l'objet sera une variable ou une constante, qui peut être nulle ou qui ne sera jamais nulle (exemple 1).
Ce point a l'air logique, mais il permet d'éviter facilement des erreurs de modification (d'inattention ou pas) de constante à la suite du code, ou l'utilisation malencontreuse d'un objet nul.
Une fois cela défini, il reste donc à définir le type de l'objet (sa Classe) ce qui permettra d’éviter de se tromper lors d'assignation de valeur et d'être certain du typage d'un objet. Mais ce dernier n'est pas obligatoire (exemple 2).
Ces deux points permettent également au Swift de manager plus facilement la mémoire et libérer les bons objets au bon moment avec un minimum d'intervention du développeur.
// Exemple Swift
let constantA : String = "testA"
let constantB = "testB"
var variableA : String? // le ? indique au compilateur que l'objet peut être nul
var variableB : String? = "testB" // peut etre nul mais est initialisé
var variableC : String = "testC"
var variableD : String // le compilateur indiquera une erreur car un objet défini non nul n'est pas initialisé et est donc initialisé à nul.
// Objectif-C
static NSString *constantA = @"testA"
NSString *variableA;
NSString *variableB = @"testB"; // en objectif-C : c’est binaire, on initialise ou on n’initialise pas
Modernité
Apple a utilisé toute son expérience dans le domaine pour mettre en place un langage simple mais également facilement malléable par les développeurs. Pour prendre un exemple simple : la surcharge des classes avec les extensions.
Rapidement, le développeur peut améliorer les classes ou juste en simplifier l'utilisation par des extensions.
// Exemple Swift
extension String {
var doubleNom : String {
return "\(self) \(self)"
}
}
// Utilisation Swift
let name = "Dou".doubleNom // "Dou Dou"
// Exemple Objectif-C
@interface String (Repeat)
- (NSString*)doubleNom;
@end
@implementation String (Repeat)
- (NSString*)doubleNom {
return [NSString stringWithFormat:@"%@ %@", self, self];
}
@end
// Utilisation Objectif-C
#import "String+Reapeat.h"
NSString *name = [@"Dou" doubleNom]; // "Dou Dou"
Le Swift n’a pas inventé les extensions mais en simplifie la déclaration et l’utilisation de manière assez flagrante.
Puissance
Swift a été conçu pour être le plus rapide possible. Pour cela Apple a mis en place un pré-compilateur qui va utiliser en haute performance le LLVM compiler (code et bibliothèque inclus) afin d'être le plus performant possible.
On peut voir ici les données officielles fournies par Apple qui compare ici la vitesse d’exécution sur le tri d’un objet complexe.
Sources :
The Swift Programming Language (Swift 2.1) – Documentation officielle
https://itunes.apple.com/us/book/swift-programming-language/id881256329
Le site officiel
Le site des développeurs d’Apple
https://developer.apple.com/swift/
Arnaud Seperoumal
Ajouter un commentaire