Mise à jour de Swift annoncée sur le blog de l’équipe de développement

Dans une première mise à jour du langage, les dictionnaires héritent d’une nouvelle syntaxe: Dictionary<TypeClef, TypeElement> devient

 [TypeClef: TypeElement]

tandis que les chaînes suivent leur exemple, ce qui veut dire que: Array<Int> devient

 [Int]

De leur côté, la syntaxe des intervalles s’est clarifiée. Tandis qu’avant il fallait distinguer .. et ... (de plus la convention était inversée par rapport à Ruby!) à partir de maintenant le troisième point est remplacé par < si la borne supérieure n’est pas inclue dans l’intervalle.

 1...10
 1..<10

Aux absents il faut compter les indicateurs de visibilité private, public et cætera ainsi que le traitement d'exceptions.

Il y a d'autres améliorations, en particulier par rapport à la valeur nil, et la correction de crashes dans le Playground et d’autres composants de XCode.

Lien vers le blog des développeurs: Swift Blog – Apple Developer

Swift, le langage d’Apple

À la dernière conférence des développeurs Apple (WWDC), celui-ci a introduit son nouveau langage de programmation Swift.

Reposant sur les bases de Objective-C, son prédecesseur, et la bibliothèque d’objets Cocoa, Swift est un langage de programmation moderne et efficace.

S’il s’efforce d’offrir une syntaxe familière au développeur habitué à la famille de langages C (C++, C#, Java…) Swift n’hésite pas à s’en démarquer si cela aide à écrire un code plus concis ou plus sûr. Ainsi, on peut citer les parenthèses qui sont optionnelles autour d’une condition du if ou d’un indice de boucle for, et la révision de la syntaxe du switch pour éviter des erreurs de programmation courantes:

// Emploi du temps de bredelet
switch heure {
   case 9, 10, 11:
      activité = "Grasse mat'"
   case 12:
      activité = "Casse-croûte"
   case 13, 14, 15:
      activité = "Sieste"
   case 16, 17, 18:
      activité = "Travail"
   case 19:
      activité = "Dîner"
   case 20, 21:
      activité = "Repos"
   case 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8:
      activité = "Dodo"
}

Comme l’illustre ce code, il est possible de spécifier plus d’une valeur pour chaque case. Du coup, il n’est pas nécessaire d’écrire break à la fin de chaque branche: si l’on veut vraiment continuer à exécuter la branche suivante il faut écrire fallthrough. Le comportement par défaut est plus clair et plus sûr que C.

Une autre différence qui saute aux yeux dans cet exemple est l’absence de point-virgule. Le point-virgule est optionnel en Swift.

Pour insérer une valeur dans une chaîne de caractères il suffit de l’entourer d’une paire de parenthèses avec un caractère d’échappement:

"Mr \(auteur) est un vrai lève-tard. " +
"À ce moment c'est \(activité)."

Les variables et les chaînes de caractères sont en Unicode.

Pour simplifier la tâche du développeur, il n’est pas nécessaire d’indiquer le type d’une variable s’il est le même que celui de sa valeur d’initialisation:

var x = 21

Si la variable n’est jamais réassigné une autre valeur, il faut utiliser let au lieu de var:

let y = 2 * x

À lire de façon mathématique: « soit y égal à deux x ».

Swift favorise les valeurs constantes, ce qui est une bonne idée au niveau performance et au niveau sûreté. Par défaut les méthodes déclarées dans un type struct ou enum ne permettent pas de modifier la structure. De même, les paramètres des fonctions sont constants par défaut.

Les paramètres nommés sont un héritage d’Objective-C, et s’apparentent dans leur utilisation à ce dernier. C’est-à-dire qu’un appel de fonction doit respecter l’ordre et le nommage des paramètres dans la déclaration de la fonction.

Par défaut, tous les paramètres d’un initialiseur (constructeur) sont nommés ce qui permet d’écrire plusieurs initialiseurs avec les mêmes types de paramètres:

struct Complexe {
   var réel: Double, imag: Double
   init(réel: Double, imag: Double) {
      self.réel = réel
      self.imag = imag
   }
   init(r: Double, angle: Double) {
      self.réel = r * cos(angle)
      self.imag = r * sin(angle)
   }
}

Lors de l’appel il est clair quel initialiseur invoquer:

let c = Complexe(r: 4.0, angle: pi / 5.0)

De même, les paramètres des méthodes d’un objet sont nommés à partir du second paramètre par défaut.

Une nouveauté dans Swift par rapport à son prédécesseur est le support des types génériques, là où Objective-C se contentait de faire appel au polymorphisme sur la classe NSObject. Au contraire d’Objective-C, la valeur nil n’est pas valide pour n’importe quel objet.

Au final, le langage Swift pourrait amener une nouvelle génération de développeurs à la plate-forme Mac et iOS. Pour ces nouveaux venus, la nouveauté la plus déroutante à laquelle ils seront confrontés est assurément le compteur de références automatique (ARC en anglais).

Hérité d’Objective-C, ce système permet de ne pas encombrer le programmeur avec l’utilisation judicieuse de directives de gestion de la mémoire. Par rapport à un ramasse-miette (garbage collector) ARC a l’avantage de permettre d’invoquer une fonction de « dé-initialisation » (destructeur) pour chaque objet de façon prévisible et immédiate.

Il a le désavantage de ne pas gérer les références en boucle. Cet inconvénient impose une discipline particulière pour référencer d’autres objets qui n’est pas évidente au premier abord.

Si Apple trouve moyen d’épargner cette difficulté aux néophytes, Swift pourrait trouver du succès même au-delà des produits de la marque.