Les nouveautés de Swift 2.2

La sortie de Xcode 7.3 en version béta amène sont lot de nouveauté et surtout avec lui une première version de Swift 2.2. Donc profitons en pour regarder les principaux changements et ajouts de cette version majeure du langage.

Les paramètres n’ont plus besoin de guillemet oblique

Comme vous le savez peut être, Apple ayant mis le code du langage Swift en open-source il est maintenant possible pour les gens de faire des propositions sur l’évolution du langage. La première de ces évolutions (qui apparait dans Swift 2.2) est celle de Doug Gregor (SE-0001) qui autorise l’utilisation de la plupart des mots clés comme étiquette pour les arguments de méthode. Cela a pout conséquence la possibilité n’importe quel mot comment argument excepté (bien il faut des exception, sinon ce serait pas rigolo) les mots clés var, let et inout.

En voici un petit example :

func travel(in locomotion: Locomotion, if: Weather) {
  //..
}

Le compilateur avertis automatiquement en cas d’erreur. Par example si vous utilisez le mot clé `where` avec les guillemets obliques il fournit une correction automatique pour enlever les guillemets obliques.

Curryfication ré-inventé

La proposition SE-0002 de David Farler supprime la possibilité de faire de curryfication tel qu’on l’entend habituellement. En fait il supprime cette capacité du langage pour se basé sur des structures déjà existantes afin de simplifier le langage. Un example sera plus simple à comprendre :

// Before:
func curried(x: Int)(y: String) -> Float {
  return Float(x) + Float(y)!
}

// After:
func curried(x: Int) -> (String) -> Float {
  return {(y: String) -> Float in
    return Float(x) + Float(y)
  }
}

Comme vous pouvez le voir ici, en fait la curryfication se fait maintenant en créant une fonction qui retourne une fonction avec un paramètre nommé. Cela revient au même et simplifie l’apprentissage de swift car il y a une structure en moins à apprendre.

Les opérateurs ++ et — sont maintenant dépréciés

Une autre proposition, du créateur du langage cette fois (Chris Lattner), a aussi été approuvée et intégré à cette version de swift. Il s’agit de la proposition SE-0004 qui supprime les fameux opérateurs ++ et pour respectivement incrémenter et décrémenter un nombre. Il a pris cette décision car ce n’est pas un opérateur intuitif pour les débutant et qu’ils permettaient trop de bidouillage.

La release note stipule qu’en remplacement il est conseillé d’utiliser « x += 1 sur les types entiers ou les flottants et x = x.successor() sur les types Index ». Donc maintenant au lieu de faire ceci pour les opérateurs post-fixé (x++ ou x– par example) :

return x++

Il est conseillé de faire cela :

defer { x += 1 }

return x

Tandis que pour les opérations pré-fixés (++x ou –x), il suffit juste de faire l’opération avant de retourner la valeur :

x += 1

return x

Les boucles for-loops comme en langage C ont été dépréciés

Comme pour les opérateurs précédents les fameuses boucles for;; ne sont plus appréciées dans cette version. Comme le montre la proposition SE-0007 de Erica Sadun, ils seront supprimé dans Swift 3.

En swift, maintenant la norme c’est l’utilisateur des boucles for-in. Cela n’empêche pas l’utilisation des différents mots clé à l’intérieur des boucles comme break, continue ou goto.

Vous devez maintenant remplacer ce genre de code :

for var i = 0 ; i < 10 ; i++ {
    print(i)
}

Par quelque chose de plus swift style :

for i in 0 ..< 0 {
    print(i)
}

Swift Configurations

La proposition de David Farler (SE-0020) introduit une nouvelle construction pour gérer la configuration et les version de swift au sein du langage. Par example il est maintenant possible de tester une version de swift de cette manière :

#if swift(>=2.2)
  print("Active!")
#else
  this! code! will! not! parse! or! produce! diagnostics!
#endif

La comparaison de tuple

Grâce à Kevin Ballard (SE-0015) il est maintenant possible de faire des comparaisons sur les tuples. Pour cela ils ont rendu les tuples conforment avec les protocoles Equatable et Comparable :

let a = (1, "un")
let b = (1, "un")

if a == b {
  // true
}

Quelques autres points importants :

  • Amélioration des balises pour la documentation avec l’ajout de – keyword:, – recommended:, and -recommendedover:.
  • Les init désignés peuvent maintenant être faillible et produire des exceptions.
  • Remplacer vos anyGenerator() par l’utilisation des initialisations avec AnyGenerator. Déconseillé en 2.2, et supprimé à la version Swift 3.
1 Etoile2 Etoiles3 Etoiles4 Etoiles5 Etoiles (1 votes, average: 5,00 out of 5)
Loading...

Aucun commentaire

Time limit is exhausted. Please reload CAPTCHA.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.