Partager via


Concepts et terminologie (transformation fonctionnelle) (LINQ to XML)

Cet article présente les concepts et la terminologie des transformations fonctionnelles pures. L’approche de transformation fonctionnelle pour la transformation des données génère du code qui est souvent plus rapide à programmer, plus expressif et plus facile à déboguer et à maintenir que le code de programmation impératif plus traditionnel.

Notez que les articles de cette section n’ont pas pour but d’expliquer en détail la programmation fonctionnelle. Au lieu de cela, ils identifient certaines des capacités de programmation fonctionnelle qui facilitent la transformation de code XML d’une forme en une autre.

Qu’est-ce que la transformation fonctionnelle pure ?

Dans la transformation fonctionnelle pure, un ensemble de fonctions, appelées fonctions pures, indiquent comment transformer un ensemble de données structurées de leur forme d’origine en une autre forme. Le terme « pur » indique que les fonctions sont composables, ce qui nécessite qu’elles aient les caractéristiques suivantes :

  • Être autonomes, de manière à pouvoir être librement ordonnées et réorganisées sans enchevêtrement ni interdépendance avec le reste du programme. Les transformations pures n'ont aucune connaissance de leur environnement et aucun effet sur lui. Autrement dit, les fonctions utilisées dans la transformation n’ont pas d’effets secondaires.
  • Être sans état, de sorte que l’exécution de la même fonction ou du même ensemble spécifique de fonctions sur la même entrée générera toujours le même résultat. Les transformations pures n'ont pas de mémoire de leur utilisation antérieure.

Important

Dans le reste de ce didacticiel, le terme « fonction pure » est utilisé dans un sens général pour indiquer une approche de programmation, et non une fonctionnalité de langage spécifique.

Notez que les fonctions pures doivent être implémentées en tant que méthodes en C# et en tant que fonctions en Visual Basic.

Il convient de ne pas confondre les fonctions pures avec les méthodes virtuelles pures en C++. Ces dernières indiquent que la classe conteneur est abstraite et qu'aucun corps de méthode n'est fourni.

Programmation fonctionnelle

La programmation fonctionnelle est une approche de programmation prenant directement en charge la transformation fonctionnelle pure.

Historiquement, les langages de programmation fonctionnelle à usage général, tels que ML, Scheme, Haskell et F#, ont toujours essentiellement intéressé la communauté liée au monde de l’enseignement et de la recherche. Même s'il a toujours été possible d'écrire des transformations fonctionnelles pures en C# et Visual Basic, la difficulté de cette opération a toujours découragé la plupart des programmeurs. Dans les récentes versions de ces langages, toutefois, de nouvelles constructions de langage telles que les expressions lambda et l’inférence de type rendent la programmation fonctionnelle beaucoup plus simple et plus productive.

Pour plus d’informations sur la programmation fonctionnelle, consultez Comparaison de la programmation fonctionnelle et de la programmation impérative.

Langages de programmation fonctionnelle spécifiques à un domaine

Bien que les langages de programmation fonctionnelle généraux n’aient pas été adoptés à grande échelle, certains langages de programmation fonctionnelle spécifiques aux domaines ont eu plus de succès. Par exemple, les feuilles de style en cascade (CSS, Cascading Style Sheets) sont utilisées pour déterminer l’apparence et la convivialité de nombreuses pages web et les feuilles de style XSLT (Extensible Stylesheet Language Transformations) sont utilisées de manière intensive dans la manipulation de données XML. Pour plus d’informations sur XSLT, consultez Transformations XSLT.

Terminologie

La liste suivante définit certains termes liés aux transformations fonctionnelles.

fonction d'ordre supérieur (première classe)
Fonction qui peut être traitée en tant qu'objet de programmation. Par exemple, une fonction d'ordre supérieur peut être passée à ou retournée à partir d'autres fonctions. En C# et Visual Basic, les délégués et les expressions lambda sont des fonctionnalités qui prennent en charge les fonctions d’ordre supérieur. Pour écrire une fonction d’ordre supérieur, vous déclarez un ou plusieurs arguments pour prendre des délégués et vous utilisez souvent des expressions lambda lorsque vous appelez votre fonction. Une grande partie des opérateurs de requête standard sont des fonctions d'ordre supérieur.

Pour plus d’informations, consultez Vue d’ensemble des opérateurs de requête standard (C#) et Vue d’ensemble des opérateurs de requête standard (Visual Basic).

expression lambda
Pour l'essentiel, il s'agit d'une fonction anonyme inline qui peut être utilisée partout où un type délégué est attendu. Cette définition des expressions lambda est simplifiée, mais elle convient pour les besoins de ce didacticiel.

Pour plus d’informations, consultez Expressions lambda (Guide de programmation C#) et Expressions Lambda (Visual Basic).

collection
Ensemble structuré de données, généralement d'un type uniforme. Pour être compatible avec LINQ, une collection doit implémenter l'interface IEnumerable ou l'interface IQueryable (ou l'un de leurs équivalents génériques, IEnumerator<T> ou IQueryable<T>).

tuple (types anonymes)
Concept mathématique, un tuple est une séquence limitée d'objets, chacun d'un type spécifique. Un tuple porte également le nom de liste ordonnée. Les types anonymes sont une implémentation linguistique de ce concept, qui permet à un type de classe non nommé d'être déclaré et à un objet de ce type d'être instancié en même temps.

Pour plus d’informations, consultez Types anonymes (Guide de programmation C#) et Types anonymes (Visual Basic).

inférence de type (typage implicite)
Capacité d'un compilateur à déterminer le type d'une variable en l'absence d'une déclaration de type explicite.

Pour plus d’informations, consultez Variables locales implicitement typées (Guide de programmation C#) et Inférence de type de variable locale (Visual Basic).

exécution différée et évaluation différée
Action de retarder l'évaluation d'une expression jusqu'à ce que sa valeur résolue soit réellement nécessaire. L’exécution différée est prise en charge dans les collections.

Pour plus d’informations sur C#, consultez Introduction aux requêtes LINQ (C#) et Exécution et évaluation différées dans LINQ to XML (C#).

Pour plus d’informations sur Visual Basic, consultez Opérations de requête de base (Visual Basic) et Exécution et évaluation différées dans LINQ to XML (Visual Basic).

Ces fonctionnalités de langage seront utilisées dans les exemples de code tout au long de cette section.

Voir aussi