En Swift, un tuple se comporte comme une variable qui peut contenir plusieurs valeurs différentes. Avec une variable ordinaire, vous ne stockez qu’une seule valeur, tandis qu'un tuple vous permet d'avoir plusieurs valeurs regroupées ensemble.
Par exemple, au lieu d'avoir une variable pour la latitude et une autre pour la longitude, vous pouvez utiliser un seul tuple pour regrouper ces deux valeurs, comme ceci :
let coordonnees = (latitude: 37.7749, longitude: -122.4194)
coordonnees agit comme une "super-variable" qui contient à la fois la latitude et la longitude.
Un tuple est un moyen de regrouper différentes informations ensemble. Imaginez-le comme un petit sac où vous pouvez mettre plusieurs éléments. Chaque élément a une sorte d'étiquette qui le décrit, comme des étiquettes sur des boîtes.
Déclarer un tuple
Un tuple est une collection ordonnée de valeurs ayant chacune un type spécifique. On peut créer un tuple en plaçant plusieurs valeurs entre parenthèses et en les séparant par des virgules.
let identite = (nom: "Dupont", prenom: "Jean")
Dans cet exemple, coordonnees est un tuple contenant deux valeurs de type Double, associées aux clés latitude et longitude. Mais un tuple n'est pas limité à deux valeurs, il pourrait en contenir cinq par exemple :
let informationsPersonnelles = (nom: "Dupont", prenom: "Jean", age: 30, estEtudiant: false, taille: 175.5)
Types de données
Un tuple n’est pas obligé de contenir des valeurs du même type.
let personne = (nom: "Dupont", age: 25, estEtudiant: true)
Dans l'exemple ci-dessus, personne est un tuple composé d'une chaîne de caractères (nom), d'un entier (age) et d'un booléen (estEtudiant).
Le type d’un tuple dépend de ses valeurs :
let evenementHistorique = (1515, "Bataille de Marignan")
evenementHistorique est une constante de type (Int, String) qui a pour valeur 1515 et "Bataille de Marignan". Ce tuple regroupe une valeur de type Int et une valeur de type String. Il est donc bien de type (Int, String).
Nommer les éléments d'un tuple
Vous pouvez nommer les éléments d'un tuple lorsque vous déclarez votre tuple. Cela vous permettra d'accéder à leur valeur plus facilement en rendant votre code plus compréhensif :
let evenementHistorique = (annee: 1515, evenement: "Bataille de Marignan")
Une fois nommé, vous pouvez utiliser le nom de ces éléments pour accéder à leurs valeurs :
// "Se déroule en 1515"
print("Se déroule en \(evenementHistorique.annee)")
// "Réponse : Bataille de Marignan"
print("Réponse : \(evenementHistorique.evenement)")
Les tuples sont très utiles comme retour de fonction, nous verrons leurs utilisations dans quelques chapitres. Retenez simplement que si les variables et les constantes peuvent stocker une valeur, les tuples permettent d'en stocker plusieurs.
Accès par les indices
Il est possible d'accéder aux valeurs d'un tuple grâce aux indices numériques.
let coordonnees = (latitude: 37.7749, longitude: -122.4194)
let premiereValeur = coordonnees.0 // Accès à la première valeur (latitude)
let deuxiemeValeur = coordonnees.1 // Accès à la deuxième valeur (longitude)
print("Latitude : \(premiereValeur), Longitude : \(deuxiemeValeur)")
Dans cet exemple, coordonnees.0 donne accès à la première valeur du tuple (latitude) et coordonnees.1 donne accès à la deuxième valeur (longitude).
Les indices commencent à partir de zéro. La première valeur a pour index 0 et non pas 1. La deuxième valeur aura donc pour index 1, la troisième valeur aura pour index 2, et ainsi de suite.
Cependant, l'utilisation des indices peut rendre le code moins lisible, surtout si le tuple a beaucoup de valeurs. Il est souvent préférable d'utiliser les noms d'étiquettes si disponibles, car cela rend le code plus expressif et moins sujet aux erreurs.
Décomposition de Tuples
La décomposition des tuples permet d'extraire les valeurs individuelles et de les assigner à des variables distinctes.
// On décompose le tuple en deux variable distinctes
let (latitude, longitude) = coordonnees
print("Latitude : \(latitude), Longitude : \(longitude)")
Cette déclaration crée deux variables (latitude et longitude) qui sont initialisées avec les valeurs correspondantes du tuple coordonnees. On décompose son contenu en plusieurs constantes ou variables séparées. Un autre exemple :
// Rappelez vous de notre exemple précédent :
let evenementHistorique = (annee: 1515, evenement: "Bataille de Marignan")
// On décompose le tuple
let (annee, evenement) = evenementHistorique
// "A eu lieu en 1515 ?"
print("A eu lieu en \(annee) ?")
// "Réponse : Bataille de Marignan"
print("Réponse : \(evenement)")
Étiquettes non utilisées
Si vous n'avez besoin que de certaines valeurs du tuple, ignorez les valeurs inutiles avec un trait de soulignement _ (underscore) :
let (annee, _) = evenementHistorique
// "A eu lieu en 1515 ?"
print("A eu lieu en \(annee) ?")
Avec les concepts de base de la création, de l'accès et de la décomposition des tuples, vous avez maintenant une bonne compréhension de cette fonctionnalité Swift. Pensez à toujours expérimenter ce que vous venez d'apprendre en réalisant vos propres tests sur le Playground. Cela facilitera votre apprentissage.
- Un tuple permet de stocker plusieurs valeurs regroupées ensemble.
- Un tuple n’est pas obligé de contenir des valeurs du même type.
- Le type d’un tuple dépend de ses valeurs.
- Décomposer un tuple permet d'extraire ses valeurs individuelles et de les assigner à des variables distinctes.