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

https://swift.org

Le site des développeurs d’Apple

https://developer.apple.com/swift/

 

Arnaud Seperoumal

 

Ajouter un commentaire