Tuples (F#)
Un tuple est un regroupement de valeurs sans nom, mais ordonnées, de types éventuellement différents.
( element , ... , element )
Notes
Chaque element de la syntaxe précédente peut être une expression quelconque.
Exemples
Parmi les exemples de tuples, citons les paires, les triples, et ainsi de suite, du même type ou de types différents.Quelques exemples sont illustrés dans le code suivant.
// Tuple of two integers.
( 1, 2 )
// Triple of strings.
( "one", "two", "three" )
// Tuple of unknown types.
( a, b )
// Tuple that has mixed types.
( "one", 1, 2.0 )
// Tuple of integer expressions.
( a + 1, b + 1)
Obtention de valeurs individuelles
Vous pouvez utiliser des critères spéciaux pour accéder aux éléments de tuple et leur assigner des noms, comme indiqué dans le code suivant.
let print tuple1 =
match tuple1 with
| (a, b) -> printfn "Pair %A %A" a b
Vous pouvez utiliser des modèles de tuple dans des liaisons let, comme suit.
let (a, b) = (1, 2)
Cela entraîne simultanément la liaison des valeurs a et b.Si vous avez seulement besoin d'un élément du tuple, le caractère générique (trait de soulignement) peut être utilisé pour éviter de créer un nom pour une variable dont vous n'avez pas besoin.
let (a, _) = (1, 2)
Les fonctions fst et snd retournent, respectivement, le premier et le second élément d'un tuple.
let c = fst (1, 2)
let d = snd (1, 2)
Aucune fonction intégrée ne retourne le troisième élément d'un triple, mais vous pouvez facilement en écrire une, comme suit.
let third (_, _, c) = c
En général, il est recommandé d'utiliser des critères spéciaux pour accéder aux éléments individuels d'un tuple.
Utilisation de tuples
Les tuples constituent un moyen pratique de retourner plusieurs valeurs à partir d'une fonction, comme indiqué dans l'exemple suivant.Cet exemple exécute une division d'entier et retourne le résultat arrondi de l'opération comme premier membre d'une paire de tuples, et le reste comme deuxième membre de la paire.
let divRem a b =
let x = a / b
let y = a % b
(x, y)
Les tuples peuvent également être utilisés comme arguments de fonction lorsque vous voulez éviter la curryfication implicite d'arguments de fonction impliquée par la syntaxe de fonction standard.
let sumNoCurry (a, b) = a + b
La syntaxe habituelle pour la définition de la fonction let sum a b = a + b vous permet de définir une fonction qui est l'application partielle du premier argument de la fonction, comme indiqué dans le code suivant.
let addTen = sum 10
let result = addTen 95
// Result is 105.
L'utilisation d'un tuple comme paramètre désactive la curryfication.Pour plus d'informations, consultez « Application partielle d'arguments » dans Fonctions (F#).
Noms de types de tuple
Lorsque vous écrivez le nom d'un type qui est un tuple, vous utilisez le symbole * pour séparer des éléments.Pour un tuple qui comprend un int, un float et une string, par exemple (10, 10.0, "ten"), le type est écrit comme suit.
int * float * string
Forme compilée de tuples
Si vous utilisez uniquement des tuples F# et ne les exposez pas à d'autres langages, et si vous ne ciblez pas une version du .NET Framework antérieure à la version 4, vous pouvez ignorer cette section.
Les tuples sont compilés en objets de l'un des divers types génériques, tous appelés Tuple, qui sont surchargés sur l'arité (nombre de paramètres de type).Les types de tuple s'affichent sous cette forme lorsque vous les consultez à partir d'un autre langage, tel que C# ou Visual Basic, ou lorsque vous utilisez un outil qui n'est pas compatible avec les constructions F#.Les types Tuple ont été introduits dans .NET Framework 4.Si vous ciblez une version antérieure du .NET Framework, le compilateur utilise les versions de System.Tuple de la version 2.0 de la bibliothèque principale F#.Les types de cette bibliothèque sont utilisés uniquement pour les applications qui ciblent les versions 2.0, 3.0 et 3.5 du .NET Framework.Le transfert de type est utilisé pour assurer la compatibilité binaire entre les composants F# .NET Framework 2.0 et .NET Framework 4.