Les tuples en Swift

Aujourd’hui nous allons examiner un type fondamental de Swift : le tuple. Mais qu’est ce que cette chose ? Pour faire simple un tuple c’est un ensemble / une composition de plusieurs éléments. J’insiste sur le fait qu’il y a plusieurs éléments dans un tuple car Swift n’autorise pas moins de 2 éléments dans un tuple, mais nous y reviendrons dans quelques instants. Pour illustrer rapidement la chose, un tuple de 2 éléments s’appelle une paire dont voici un example : (1, « un »). Ici nous avons une paire avec un entier comme premier élément et une chaine de caractère en deuxième. Maintenant voyons un peu comment cela fonctionne et aussi à quoi cela peut bien servir ?

Les tuples anonymes

Tout d’abord commençons par regarder la syntaxe d’un tuple en Swift :

let pair  = (1, "un")
let tuple = ("Swift", 11, true)

Ici nous avons défini un groupe de deux valeurs, un entier avec une chaine de caractère que nous avons appeler pair ainsi qu’un autre tuple tuple avec une chaine de caractère, un entier et un booléen. Ces tuples ne sont pas nommés (anonymes), c’est à dire que l’on ne peut accéder à leurs valeurs qu’en utilisant leur position dans le tuple :

let tuple = ("Swift", 11, true)

let e1 = tuple.0
let e2 = tuple.1
let e3 = tuple.2

Sinon on peut aussi utiliser une facilité syntaxique : la décomposition.

let (nom, age, vivant) = ("Swift", 11, true)

print(nom)    // Swift
print(age)    // 11
print(vivant) // true

Si vous souhaitez omettre une valeur vous pouvez utiliser le « _ » à la place du nom de la variable.

let (nom, _, _) = ("Swift", 11, true)

print(nom) // Swift

Les tuples nommés

Pour rendre leur manipulation plus simple il est aussi possible de nommé les éléments au sein des tuples. Regardons cela d’un peu plus près :

let tuple = (nom: "Swift", age: 11, vivant: true)

print(tuple.nom)    // Swift
print(tuple.age)    // 11
print(tuple.vivant) // true

En utilisant la notation par point nous pouvons plus facilement accéder aux éléments du tuple.

Value Type

Une chose importante à noter sur les tuples c’est que ce sont des types valeurs (Value Types). Contrairement aux références (Reference Types) lorsque l’on passe un tuple à une function on ne passe pas leur référence met une copie du tuple. En voici une illustration :

let t1 = (nom: "Swift", age: 11, vivant: true)

var t2 = t1
t2.nom = "Tuto"

print(t1.nom) // Swift
print(t2.nom) // Tuto

Cas d’usage

Les tuples sont vraiment utile lorsque l’on a besoin de retourner plusieurs valeurs en retour d’une méthode ou fonction. Vous pouvez soit retourner des tuples anonymes ou nommés comme bon vous semble :

func meilleurScore() -> (nom: String, score: Int) {
  return (nom: "Monica", score: 349)
}

Cette méthode ne prend pas de paramètre et retourne une paire nommée avec un nom et un score. Pour utiliser le résultat rien de plus simple :

let result = meilleurScore()

print("\(result.nom) avec un score de \(result.score)")

Cas particuliers

Comme nous l’avons expliqué en introduction les tuples en Swift doivent comporter au moins 2 éléments. En réalité le type Void n’est rien d’autre qu’un typealias du tuple vide :

public typealias Void = ()

Et un tuple d’un seul élément est équivalent au type de l’élément. Par example (Int) est de type Int et non pas (Int) :

(Int).self == Int.self // true

Pour finir

J’espère que cet article vous aura aider à comprendre un peu mieux le fonctionnement des tuples en Swift. Si vous avez des questions n’hésitez pas à poser vos question ici.

1 Etoile2 Etoiles3 Etoiles4 Etoiles5 Etoiles (7 votes, average: 4,43 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.