Le langage Swift
0
commentaires
Le langage Swift a été présenté par Apple en juin 2014 à la Worldwide Developers Conference.
Annoncé comme 3,5x plus rapide que l’Objective-C selon Apple, Swift présente en plus l’avantage d’être plus léger, plus moderne et beaucoup plus accessible. Il est compilé avec le compilateur LLVM (compilateur opensource qui fonctionne avec C++, l'Objective C, etc.)Swift est un langage orienté Objet, conçu par Apple pour Apple. Créer pour rafraîchir l’objective-C (une extension du C qui était apparu en 1983), il a aussi été conçu pour des raisons politiques et commerciales.
Swift est compatible avec les API graphiques Cocoa et Cocoa Touch qui sont repectivement utilisées pour les systèmes OSX et IOS. À l'heure actuelle (janvier 2015), la licence de Swift n'a pas encore été décidée par Apple bien que certains ingénieurs de l'entreprise souhaiteraient qu'il soit open source. D'autres évolutions sont encore à venir.
Enfin, le code Objective-C et Swift peuvent cohabiter au sein d’un même projet en respectant une certaine sémantique car ils possèdent le même compilateur.
Ce langage requiert l'IDE Xcode 6 pour pouvoir développer, uniquement disponible sous OSX.
Remarque : Afin de pouvoir découvrir les possibilités de ce langage, le playground de Xcode est un bon outil pour se faire la main .
Constantes et variables
Déclarations
Swift utilise la notation var pour les variables et let pour les constantes.Une constante ne peut donc pas être modifiée.
Il est possible de faire de la déduction de type :
L'interprétation des chaînes de caractères (String) est considérée comme un tableau de caractère. Un antislash à l'interieur de celle-ci permettra de remplacer une variable par sa valeur.
Les optionnelles
Les optionnelles permettent de créer une variable pour laquelle une valeur viendrait à manquer.Un nouveau type est donc maintenant utilisable, c'est le nil qui signifie l’absence d’objet valide.
Dans l'exemple ci-dessous, on peut voir que la condition n’est pas obligatoire entre parenthèses (dans le if). En revanche, les crochets le sont. Swift veut éviter le problème de la double instruction où il n’y a pas de crochet et seul la première est prise en compte lors de l'execution.
Une fois sûr que l’optionnelle contient une valeur, on peut forcer le changement de son type en rajoutant un point d’exclamation à la fin du nom de celle-ci. Ce point d’exclamation veut dire : Je suis sûr que cette optionnelle contient une valeur et je voudrais l’utiliser.
Il faut toujours utiliser les types optionnels si on pense qu’une variable prendra à un moment la valeur nil (absence de valeur). Cela peut arriver dans un tableau lorsque l’on veut accéder à un élément trop loin par exemple. Le forçage de l'unwrapping se fera avec un point d’exclamation "!".
Conditions, Boucles & Switch
Les conditions
Swift garde toujours le système du if.. et du else.. des langages de programmation..L'expression « let variable if » est une condition spécifique à Swift permettant de simplifier l'unwraping des optionnelles comme dans l'exemple ci-dessous.
Les boucles
Les boucles permettent d'itérer sur des instructions. Deux spécificités sont à noter dans Swift : le bouclage sur un tuple de valeurs et celui sur une plage d'index noté par "...".Remarque : si on ne met que deux points au lieu de 3, cela ne va pas inclure le dernier index.
Les switch
Les Switch permettent de condenser de multiples conditions dans le code. En Swift, pas besoin de break dans un switch. Il ne descendra pas dans les instructions restantes. Par contre il sera obligatoire de mettre un "default" pour des questions de sécurité. Le compilateur notera une erreur sinon.Les collections
Les differents types de collections
Le Swift est un langage plutôt permissible, ce qui rend le champs des possibilités en terme de collections très grand.Il est possible de faire des tableaux constitués seulement d'entiers, de chaînes de caractères, etc.
En Swift il est possible de mixer les types au sein d'une collection, et même de rajouter des fonctions.
Ci-dessous, nous pouvons voir comment on peut accéder et ajouter des valeurs à une collection de plusieurs manières.
Les fonctions
Ecriture des fonctions
Ci-dessous, la sémantique type de l'écriture d'une fonction en Swift. Le type de retour est écrit à la fin et les paramètres sont spécifiés de la manière suivante : nom: Type.On peut aussi retourner des tuples (des groupes de valeurs) Il est à noter que les types de retour ne sont pas spécifiés dans la fonction ci-dessous. Ils sont implicites, le compilateur connait les types grâce au return en fin de la fonction.
Les passages par référence
Il est aussi possible de faire du passage par référence d'une variable, un peu comme le C avec les pointeurs.Nota : Ne marche pas avec les constantes (déclaré par let).
Les closures
Une closure est un bloc d'instructions pouvant être référencé par une variable dans le code. Se comportant comme une fonction, on peut spécifier des paramètres ainsi qu'un type de retour. Il est aussi possible de retourner des tuples (des groupes de valeurs). Il est à noter que pour les types de retours, comme dans les fonctions, ils sont implicites. Le compilateur les connait grâce à ce qui est retourné par le bloc.La closure est également passable en tant que paramètre au sein d'une fonction.
Les génériques
Les génériques correspondent aux types paramètrés en JAVA. Ils permettent de ne pas spécifier un type lors du développement. Cette fonctionnalité n'était pas disponible en Objective-C et Swift permet d'ajouter cette nouveauté.On peut également les utiliser dans les protocoles avec la notation typealias.
Les Structures
Définition d'une structure
Swift permet la création de structures de données grâce au mot clé struct.Lors de l'instance d'une classe ou d'une structure, il sera obligé de répéter le nom des champs du constructeur. Il est possible que Swift souhaite que ses utilisateurs puissent retrouver le nom des champs publics en se référant juste à la ligne où l'objet est instancié. L'ordre des champs lors de l'instation n'a donc plus d'importance car ils sont déjà précisés.
L'utilisation du mot-clé mutating dans la déclaration de la structure est utilisé pour marquer un procédé qui va modifier la structure. On n’en a pas besoin dans une classe car des méthodes peuvent être utilisées à modifier celle-ci, pas dans une structure normalement.
Les Subscripts
Le mot clé subscript est utilisé comme raccourci pour accéder à une collection (utilisation pour les matrices, etc.). Ici, nous utiliserons cette notation dans notre structure, ce qui nous permettra par exemple ici de trouver les multiples d'un entier.Les Enumérations
Une enumeration permet de créer un nouveau type utilisable par exemple dans nos classes. Elles peuvent prendre plusieurs valeurs suivant ce qu'on a spécifié dans les champs de l'énumeration. On va pouvoir y ajouter des méthodes applicables sur ceux-ci.Les classes
Définitions des classes
Le langage Swift est orienté objet, l'annotation class permet de définir une classe. Comme en Java, elle disposera de champs et de méthodes ainsi que d'un constructeur. Ce dernier est défini par init et permettra d'instancier notre classe.Le mot-clé self est l'équivalent de this en Java et permet d'avoir recours à l'instance courante.
Le Swift permet l'encapsulation par des marqueurs de visibilités (public, private et internal par défaut).
- private : visibilité de l’entité seulement depuis le fichier
- internal : visibilité de l’entité depuis d’autre fichiers sources du projet
- public : visibilité de l’entité depuis d’autre fichiers sources du projet et depuis les imports (plus haut niveau)
Enfin, il permet le polymorphisme. Une classe peut être héritée (notation :). Les champs et les méthodes publiques seront hérités et peuvent être réimplémenté par la notation override. La notion de getter et setter est directement implémentée en Swift ; il suffira d'écrire les blocs get {} et set {} après les déclarations des champs de la classe.
Les property observers
Les property observers (notés willset et didset) permettent de déclencher des traitements lors d'un changement sur une variable. Ils permettent l’historisation des variables par exemple (oldValue) ou le déclenchement d'une fonction spéciale lorsqu’il y a un changement d’état.Les Protocoles
Définition d'un protocol
Les protocoles sont les équivalents des interfaces en JAVA. Il est possible de spécifier des méthodes ainsi que des champs. L'ensemble du corps du protocol devra être réimplémenté par la nouvelle classe.Nota : On ne peut pas faire de setter sans getter.
Les Extensions
Définition d'une extension
Les « extensions » dans Swift permettent d’ajouter des fonctionnalités (sous forme de méthodes) à des instances (Classes, Structures …). On va pouvoir rajouter des fonctionnalités comme ici avec un type primitif.Dans l'exemple ci-dessous, le mot-clé convenience (en français « commodité ») est utilisé devant un constructeur. Il permet de redéfinir un constructeur avec moins de paramètres par exemple. Il faut au moins un constructeur ne possédant pas le marquage convenience (le constructeur dit "désigné") pour pouvoir l'utiliser.
Comparaison
Points communs et différences avec le langage Java
Points communs
- Système de classes avec réécriture des méthodes (override), champs et multi constructeurs
- Polymorphisme
- Encapsulation
- Génériques
- Interfaces
Différences
- willset et didset (Property Observers)
- Types optionnels implicant la notion de « nil »
- Pas de mécanismes de concurrence (pas dans la doc Swift…)
- Pas de « vraies » collections de type HashMap par exemple
- Pas de mécanisme d’exceptions
- Pas de mécanisme de packages mais de modules
- Obligation de rappeler le nom du champs lors de la création d’une instance
- Possibilé de faire des extensions pour rajouter des possibilités à une instance
0 commentaires:
Enregistrer un commentaire