Swift : un nouveau langage prometteur

Par:
fredericmazue

mar, 03/06/2014 - 17:40

Hier, lors de la conférence WWDC 2014 (Apple Worldwide Developers Conference) la firme à la pomme a surpris tout le monde. On s'attendait à la présentation d'un nouveau matériel. Beaucoup pensaient à une montre connectée.

Et bien pas du tout. Apple a présenté un nouveau langage de programmation Swift, qui doit à terme remplacer Objective-C. Dans un premier temps, Swift pourra cohabiter avec Objective-C et s'appuiera sur le même runtime qu'Objective-C. A terme, Swift est appelé à remplacer Objective C.

Apple, rarement avare de superlatifs en ce qui concerne ses produits et ses technologies, décrit Swift ainsi : « Swift est un nouveau langage de programmation puissant pour OS X et iOS, qui permet aux développeurs de créer avec facilité des applications incroyables. Swift aide les développeurs à écrire du code plus sûr et plus fiable, en éliminant les erreurs qui existent avec Objective-C. Les développeurs peuvent facilement intégrer Swift dans leurs applications existantes. »

Rien n'est jamais idéal dans le monde de la programmation. Cependant Swift semble un langage très intéressant. Apple le décrit comme un langage issu des dernières recherches sur les langages de programmation.

Apple met en avant la sûreté de la programmation avec Swift, qui doit nous épargner des tonnes de mauvais code. Les variables sont toujours initialisées avant leur utilisation. Les débordement de tableaux sont vérifiés, les dépassement de capacité des entiers également. La mémoire est gérée.

Très intéressant également, un programme Swift est compilé en code natif optimisé. Les performances doivent donc être au rendez-vous.

Tout cela est très bien mais, selon nous le plus intéressant, se trouve dans tout ce que Swift emprunte à la programmation fonctionnelle, en plus de supporter la programmation objet et les structures avec méthode. Tout d'abord le langage est doté d'une inférence de type sur un niveau. Swift est Type Safe. Vous ne pourrez pas passer un Int à une fonction qui s'attend à recevoir une String.

var value = 10  // value est inférée en type Int

func sayHello(personName: String) -> String {
  let greeting = "Hello, " + personName + "!"

  return greeting
}

sayHello(value) // Swift signale une erreur :-)

Le langage supporte la programmation générique (en restant type safe) et des types utilisés en programmation fonctionnelle, ou avec les langages que celle-ci a inspirés (Pyrthon par exemple) Ainsi Swift permet de travailler avec des Tuple et des valeurs de retour multiples.

Nous trouvons également les closures, qui trouvent leur équivalent dans les fonctions lambda d'autres langages. Les closures stockent constantes et variables dans leur contexte d'exécution.

Une closure est une valeur de premier ordre qui en tant que telle peut être passée en argument à une fonction, ou être la valeur de retour d'une fonction. Voici un exemple de code qui retourne une closure :

func makeIncrementor(forIncrement amount: Int) -> () -> Int {

  var runningTotal = 0

  func incrementor() -> Int {
    runningTotal += amount
    return runningTotal
  }

  return incrementor
}

Les closures peuvent dont être utilisées dans les pattern map chère à la programmation fonctionnelle. Concrètement il est possible d'appliquer une closure (function) aux éléments d'une liste (qui s'appellera en fait un Array -tableau) en Swift) et de récupérer le résultat transformé. Voici un exemple qui trie le contenu d'un tableau par une application d'une closure : 

let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]

func backwards(s1: String, s2: String) -> Bool {
  return s1 > s2
}

var reversed = sort(names, backwards)

// reversed vaut  ["Ewa", "Daniella", "Chris", "Barry", "Alex"]

Si Swift est un langage compiler, il est doté, comme les langages fonctionnels d'un interpréteur, d'un interpréteur interactif, ou Read Eval Loop (REPL) qui permet de tester instantanément des morceaux de codes.

Swift n'est pas le seul langage à emprunter à la programmation fonctionnelle. Il n'est même pas le seul dans le domaine des mobiles. Ainsi Xamarin 3 permet désormais de programmer avec F#, le langage fonctionnel de Microsoft.

Malheureusement la programmation fonctionnelle, en dépit de toutes ses qualités, peine toujours à s'imposer. En raison de la popularité d'iOS, elle pourrait gagner des lettres de noblesse grâce à Swift, et ce n'est pas le moindre intérêt de ce langage.