Transparence référentielle

La transparence référentielle est une propriété des expressions d'un langage de programmation qui fait qu'une expression peut être remplacée par sa valeur sans changer le comportement du programme.

Définition

  • Une expression est référentiellement transparente si elle peut être remplacée par sa valeur sans changer le comportement du programme (c'est-à-dire que le programme a les mêmes effets et les mêmes sorties pour les mêmes entrées, quel que soit son contexte d'exécution).
  • Une expression est référentiellement opaque si elle n'est pas référentiellement transparente.

Si toutes les fonctions impliquées dans l'expression sont pures, c'est-à-dire si elles ont toujours les mêmes valeurs de retour pour les mêmes arguments et si elles sont sans effets de bord, alors l'expression est référentiellement transparente. Mais la réciproque est fausse : une expression référentiellement transparente peut impliquer des fonctions impures.

La transparence référentielle est la pierre angulaire de la programmation fonctionnelle. Elle permet notamment la mémoïsation des fonctions référentiellement transparentes (c'est-à-dire la mémorisation des valeurs précédemment calculées).

Exemples et contre-exemples

Les opérations arithmétiques sont référentiellement transparentes : on peut ainsi remplacer 4*3 par sa valeur 12 ou par 2*6 ou par 3*4. Les fonctions au sens mathématique du terme sont référentiellement transparentes : c'est le cas par exemple de la fonction sin(x) qui est référentiellement transparente, puisqu'elle renvoie toujours le même résultat pour un x donné et n'a pas d'effets de bord.

En revanche, l'expression x++ du langage C n'est pas référentiellement transparente, car elle change la valeur de x. Il est de même de today() qui n'est pas référentiellement transparent, car si on l'évalue aujourd'hui on n'obtient pas le même résultat que si on l'exécute demain.

Contraste avec la programmation impérative

Si la substitution d'une expression par sa valeur est valide seulement à certains points d'un programme, alors l'expression n'est pas référentiellement transparente. La définition et l'ordre de ses points de séquence (en) sont la fondation théorique de la programmation impérative, et une porte de la sémantique des langages de programmation impératifs.[pas clair]

Néanmoins, puisqu'une expression référentiellement transparente peut toujours être remplacée par sa valeur ou par une expression produisant la même valeur, il n'est pas nécessaire de définir des points de séquence ou de préserver l'ordre d'évaluation. On appelle programmation purement fonctionnelle un paradigme de programmation exempt des soucis d'un ordonnancement figé des exécutions.

L'avantage d'écrire du code référentiellement transparent est que l'analyse de code statique est plus facile et que des transformations automatiques d'amélioration de code sont possibles. Par exemple, en programmation en C, inclure une fonction dans une boucle se paye en matière de performances, alors que cette fonction pourrait être déplacée hors de la boucle sans changer les résultats du programme. En déplaçant cette fonction, le programmeur peut y perdre en lisibilité du code. Mais, si le compilateur est capable de déterminer la transparence référentielle de l'appel de la fonction, il effectuera automatiquement ce déplacement produisant ainsi du code plus efficace.

Les langages imposant la transparence référentielle rendent malaisée l'écriture d'opérations qui s'expriment naturellement comme une suite de pas. De tels langages peuvent incorporer des mécanismes pour rendre ces tâches plus faciles tout en retenant leur qualité purement fonctionnelle telles que les monades et les definite clause grammars.

Alors qu'en mathématiques toutes les applications de fonction sont référentiellement transparentes, en programmation impérative ça n'est pas toujours le cas. Par exemple dans le cas d'une fonction sans paramètre qui retourne une chaîne saisie au clavier, la valeur de retour dépend de la valeur saisie, donc de multiples appels de la fonction avec des paramètres identiques (la liste vide) peuvent retourner des résultats différents.

Un appel à une fonction qui utilise une variable globale, ou une variable avec une portée dynamique ou lexicale pour aider à calculer ses résultats, n'est pas référentiellement transparente. Puisque cette variable n'est pas passée comme paramètre mais peut être altérée, les résultats des appels suivants à la fonction peuvent différer même si les paramètres sont identiques. Dans les langages fonctionnels purs, l'affectation n'est pas autorisée, en revanche l'utilisation de monades permet une programmation fonctionnelle pure tout en ayant un mécanisme qui ressemble de près aux variables globales[1].

L'importance de la transparence référentielle est qu'elle permet au programmeur ou au compilateur de raisonner sur le comportement du programme. Cela peut aider à prouver qu'il est correct, à trouver des bogues qui ne peuvent être trouvées par des tests, à simplifier un algorithme, à aider à modifier du code sans le casser, à optimiser le code par le moyen de la mémorisation ou éliminer des sous-expressions communes.

Certains langages de programmation fonctionnelle (comme Haskell) imposent la transparence référentielle pour toutes les fonctions.

Principe de séparation commande-requête

Eiffel, bien que basé sur la programmation impérative, impose une séparation stricte entre les commandes qui peuvent produire des effets de bord et les requêtes qui doivent être référentiellement transparentes. Les requêtes retournent un résultat mais ne changent pas l'environnement. On appelle cette règle le principe de séparation commande-requête qui permet d'aboutir à un style qui sépare clairement les parties référentiellement transparentes des autres. Par exemple dans la manipulation de listes :

my_list.finish         -- Déplace le curseur à la fin de la liste
value := my_list.item -- Obtient la valeur à la position du curseur : référentiellement transparent

Cela affecte même des fonctionnalités impératives comme les entrées :

my_file.read_integer          -- obtient le prochain entier; effet de bord, mais pas de valeur de retour
value := my_file.last_integer -- obtient le dernier entier lu: réferentiellement transparent

Appeler plusieurs fois en série last_integer donne le même résultat à chaque fois.

Autre exemple

Soit deux fonctions, dont l'une rq est référentiellement opaque, et l'autre rt référentiellement transparente :

globalValue = 0;
integer function rq(integer x)
begin
  globalValue = globalValue + 1;
  return x + globalValue;
end
integer function rt(integer x)
begin
  return x + 1;
end

Dire que rt est référentiellement transparent, signifie que pour un n donné rt(n) produira toujours la même valeur. Par exemple, rt(6) = 7, rt(4) = 5, et ainsi de suite. Mais ce n'est pas vrai de rq car il utilise une variable globale qu'il modifie.

Voir aussi

Références

  1. En gros, quand on utilise une monade State en Haskell et qu'on l'applique à Int pour obtenir Stat Int, c'est comme s'il y avait une variable globale de type Int, pas une de moins, pas une de plus. On a donc, à tout moment, grâce au type, une connaissance complète et statique des variables globales que l'on utilise.

Read other articles:

County in New York, United States Not to be confused with Orleans, New York. County in New YorkOrleans CountyCountyCounty Courthouse in Albion FlagSealLocation within the U.S. state of New YorkNew York's location within the U.S.Coordinates: 43°22′N 78°14′W / 43.37°N 78.23°W / 43.37; -78.23Country United StatesState New YorkFounded1824Named forHouse of OrléansSeatAlbionLargest villageMedinaOther citiesHolley, AlbionArea • Total817 sq&...

 

Untuk kegunaan lain, lihat Gula-gula (disambiguasi). Permen rasa buah. Permen (bahasa Inggris: candy) adalah makanan berkalori tinggi yang pada umumnya berbahan dasar gula, air, dan sirup fruktosa.[1] Tingginya kadar gula dalam permen membuatnya diklaim sebagai salah satu penyebab gigi berlubang.[1] Proses pembuatan permen Tekstur permen sangat ditentukan oleh lamanya campuran bahan dididihkan, suhu pendinginan, dan cara penanganan setelah pendinginan.[1] Bila camp...

 

Al-Hajjaj bin YusufAts-TsaqafiSegel dari Al-Hajjaj bin YusufLahirAl-Hajjaj bin YusufAwal Juni 661 M / 40 HTha'if, Hejaz (sekarang Arab Saudi)Meninggal714 M (Umur 53)PekerjaanMenteri Pertahanan, Politisi, GubernurDikenal atasGubernur IrakKerabatMuhammad bin Yusuf (saudara laki-laki) Al-Hajjaj bin Yusuf ats-Tsaqafi (bahasa Arab: : الحجاج بن يوسف, 661 M/ 40 H – 714 M/ 95 H) adalah penguasa, politisi, dan menteri pertahanan dari kekhilafahan Umayyah. Dia merupakan sosok yang kon...

Bandung Barat UnitedNama lengkapBandung Barat UnitedJulukanMaung KulonBerdiri27 Mei 2014; 9 tahun lalu (2014-05-27)StadionStadion Abipraya Rendeh, Kabupaten Bandung Barat, Jawa Barat, IndonesiaManajer Ahmad Dahlan S.SosPelatih Budi HarjaAsisten Pelatih Ende Sunandar Suhada Isep HeryawanLigaLiga 3Kelompok suporterRedboys Army Kostum kandang Kostum tandang Musim ini Bandung Barat United (Aksara Sunda Baku : ᮘᮔ᮪ᮓᮥᮀ ᮘᮛᮒ᮪ ᮅᮔᮤᮒᮨᮓ᮪, Bandung Barat United) a...

 

Karl Hartmann (* 26. März 1857 in Eiserfeld; † 9. Februar 1910 in Betzdorf) war ein deutscher Lehrer sowie Heimat- und Mundartdichter. Inhaltsverzeichnis 1 Leben 2 Leistungen 3 Werke 4 Literatur 5 Weblinks 6 Einzelnachweise Leben Das Heimathaus in Eiserfeld, Elternhaus von Karl Hartmann Karl Hartmann wuchs als Sohn des Bergmanns und Schichtmeisters Johann Heinrich Hartmanns in Eiserfeld auf. Der Vater verstarb früh; die Mutter Sophie Catharine Baumgarten heiratete 1859 den vermögenden Ei...

 

Ch. Comiot Rechtsform Gründung 1898 Auflösung 1904 Sitz Paris, Frankreich Leitung Herr Comiot Branche Automobilindustrie Werbeplakat des Unternehmens, erstellt durch Théophile-Alexandre Steinlen. Ch. Comiot war ein französischer Hersteller von Automobilen.[1] Inhaltsverzeichnis 1 Unternehmensgeschichte 2 Fahrzeuge 3 Literatur 4 Weblinks 5 Einzelnachweise Unternehmensgeschichte Herr Comiot nahm 1897 auf einem De-Dion-Bouton-Motordreirad am Autorennen von Paris nach Dieppe teil und ...

Місто Коюкукангл. Koyukuk Координати 64°52′54″ пн. ш. 157°42′14″ зх. д. / 64.88170000002777726° пн. ш. 157.70400000002777574° зх. д. / 64.88170000002777726; -157.70400000002777574Координати: 64°52′54″ пн. ш. 157°42′14″ зх. д. / 64.88170000002777726° пн. ш. 157.70400000002777574° зх. д....

 

Korean-Air-Lines-Flug 007 Die abgeschossene Boeing 747 im Jahr 1980 Unfall-Zusammenfassung Unfallart Abschuss Ort westlich von Sachalin Datum 1. September 1983 Todesopfer 269 Überlebende 0 Luftfahrzeug Luftfahrzeugtyp Boeing 747-230B Betreiber Korean Air Lines Kennzeichen HL7442 Abflughafen John F. Kennedy International Airport, New York City, New York, Vereinigte Staaten Vereinigte Staaten Zwischenlandung Ted Stevens Anchorage International Airport, Anchorage, Alaska,Vereinigte Staaten...

 

Moldawien ist eine Weiterleitung auf diesen Artikel. Für die rumänische Region siehe Moldau (Region), für das historische Fürstentum siehe Fürstentum Moldau. Republik Moldau (DE/AT)Republik Moldova (CH) Republica Moldova Flagge Wappen Amtssprache Rumänisch[1][2]regional auch Gagausisch, Russisch und Ukrainisch Hauptstadt Chișinău Staats- und Regierungsform parlamentarische Republik Staatsoberhaupt PräsidentinMaia Sandu Regierungschef MinisterpräsidentDorin Recean Par...

Halaman ini berisi artikel tentang roti khas Sisilia dan hidangan roti lapis yang dibuat dengannya. Untuk hidangan kue Paskah dari Afrika Utara, lihat Mofletta. MuffulettaDari kiri atas, searah jarum jam: sandwich dengan muffuletta, muffuletta yang dibungkus, olive salad, muffuletta bundarSajianMakanan utamaTempat asalItaliaDaerahSisiliaBahan utamasatu roti muffuletta,dibumbui olive salad,dilapisi mortadella, salami, keju Swiss, ham, provolone.  Media: Muffuletta Muffuletta adalah je...

 

Lafe McKeeMcKee (kiri) di kartu lobi untukBattling Buckaroo, 1932LahirLafayette S. McKee(1872-01-23)23 Januari 1872Morrison, Illinois, Amerika SerikatMeninggal10 Agustus 1959(1959-08-10) (umur 87)Temple City, California, Amerika SerikatPekerjaanPemeranTahun aktif1893–1948Suami/istriLelah Underwood (1900-1955) (kematiannya) (3 anak)Anak3[1]Catatan [2] Lafayette S. Lafe McKee (23 Januari 1872 – 10 Agustus 1959)[2] adalah seorang pemeran Amerik...

 

Régiment des chasseurs de Franche-Comté Guidon du régiment de Nicolaï dragons de 1729 à 1744 Création 1675 Dissolution 1815 Pays France Allégeance Royaume de France Type régiment Rôle chasseurs à cheval modifier  Le régiment des chasseurs de Franche-Comté est un régiment de cavalerie du Royaume de France, de la République française et du Premier Empire, créé en 1675. Création et différentes dénominations Porte-guidon du régiment de Lanan dragons (à droite) en 1772, ...

This list is incomplete; you can help by adding missing items. (January 2022) The Archer by Eric Aumonier at East Finchley tube station Map all coordinates using: OpenStreetMap Download coordinates as: KML GPX (all coordinates) GPX (primary coordinates) GPX (secondary coordinates) This is a list of public art in the London Borough of Barnet. Arkley Main article: Arkley Image Title / subject Location andcoordinates Date Artist / designer Architect / other Type Designation Notes ...

 

West Frisian dialect group This article relies largely or entirely on a single source. Relevant discussion may be found on the talk page. Please help improve this article by introducing citations to additional sources.Find sources: Stadsfries dialects – news · newspapers · books · scholar · JSTOR (June 2023) StadsfriesTown Frisian, City Frisian, city-FrisianNative toNetherlandsNative speakers45,000 (2009[1])Language familyIndo-Europea...

 

International cricket tour Emirati cricket team in the Netherlands in 2017    Netherlands United Arab EmiratesDates 17 – 20 July 2017Captains Peter Borren Rohan MustafaLA seriesResult United Arab Emirates won the 3-match series 2–1Most runs Stephan Myburgh (113) Muhammad Usman 131Most wickets Logan van Beek (10) Rohan Mustafa (6) The United Arab Emirates cricket team toured the Netherlands in July 2017 to play three List A matches.[1] In the opening match, brothers ...

Municipal and rural in Morelos, MexicoCuautla Heroic and Historic CuautlaMunicipal and ruralCuautla from the Morelos MuseumCuautlaLocation in MexicoCoordinates: 18°48′44″N 98°57′21″W / 18.81222°N 98.95583°W / 18.81222; -98.95583Country MexicoStateMorelosCuautla de las Ampilas1585CuautlaApril 4, 1829Government • PresidentJesús Corona Damián (Juntos Haremos Historia)Area • Municipal and rural153.651 km2 (59.325 sq ...

 

English territorial police force Humberside PoliceMottoServing Our Communities to Make Them Safer and Stronger[1]Agency overviewFormed1974Preceding agenciesHull City Policepart of York and North East Yorkshire Policepart of Lincolnshire Constabularypart of West Yorkshire ConstabularyEmployees4,207[2]Annual budget£217.2 million[3]Jurisdictional structureOperations jurisdictionHumberside, EnglandMap of Humberside Police's jurisdictionSize1,357 square miles (3,510 k...

 

Major The Most HonourableHầu tước WillingdonGCSI GCMG GCIE GBE PCChức vụPhó vương kiêm Toàn quyền Ấn ĐộNhiệm kỳ18/04/1931 – 18/04/1936Tiền nhiệmLãnh chúa IrwinKế nhiệmHầu tước Linlithgow Toàn quyền CanadaNhiệm kỳ05/04/1926 – 04/04/1931Tiền nhiệmTử tước Byng của VimyKế nhiệmBá tước Bessborough More...Thông tin chungSinh12/09/1866Eastbourne, Đông Sussex, AnhMất12/08/1941Ebury Street, Westminst...

Not to be confused with Clarkson University in Potsdam, New York. Clarkson CollegeTypePrivate collegeEstablished1888Religious affiliationEpiscopal ChurchPresidentGary PackStudents1,178LocationOmaha, Nebraska, United StatesCampusUrban and onlineAffiliationsNebraska MedicineWebsiteclarksoncollege.edu Clarkson College is a private college in Omaha, Nebraska focused on the health sciences. The institution was founded in 1888 by Meliora Clarkson following the death of her husband Bishop Robert Cla...

 

Lore Noto Broadway theatrical producer Lore Noto (June 9, 1923 – July 8, 2002), born Lorenzo Noto,[1] was a Broadway theatrical producer of The Yearling,[2] a commercial artist, actor and play writer, but best known as the producer of the world's longest-running musical in history — The Fantasticks.[3][4][5] Early life and military career Noto, born in 1923, began life as a child in a Brooklyn apartment with his Italian immigrant parents and two bro...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!