Werttreu

Werttreu

Die Referenzielle Transparenz besagt, dass der Wert eines Ausdrucks in einem Quelltext nur von seiner Umgebung abhängt und nicht vom Zeitpunkt seiner Auswertung. Dies ist eine wichtige Eigenschaft des deklarativen Programmierparadigmas.

In der Mathematik gilt, dass ein und dieselbe Variable an verschiedenen Stellen ihres Geltungsbereichs immer den gleichen Wert hat. Dies gilt in imperativen Programmiersprachen nicht, da die Programmsemantik (z. B. Endergebnis) von einem impliziten Zustand (z. B. Speicherinhalt) abhängt.

x = x + 1

Formal analysiert ist diese Gleichung eine nicht lösbare Aussage, was heißt, es existiert kein x, das die Gleichung wahr macht. Trotzdem ist diese Zeile in imperativen Programmiersprachen möglich. Je nachdem, was in der Speicherzelle für x steht, wird die rechte Seite damit erzeugt und die linke Seite berechnet.

Möchte man aber Programmeigenschaften mathematisch beweisen (z. B. liefert das Programm wirklich das, was es soll), dann dürfen solche Nebeneffekte nicht auftreten. In der deklarativen Programmierung gilt hingegen das Prinzip der referenziellen Transparenz und als Konsequenz daraus das Substitutionsprinzip. Danach kann ein Ausdruck immer durch einen anderen gleichen Wertes ersetzt werden ohne dass dies Auswirkungen auf die Programmsemantik hat. Das Ziel von solchen Programmtransformationen ist die Ersetzung von aufwändig durch einfach zu berechnende Ausdrücke.

Das Prinzip der referenziellen Transparenz wirft aber auch Probleme auf. So ist das einfache Auslesen eines mit der Tastatur eingegeben Zeichens nicht direkt möglich; solch eine Funktion - wie getchar in C - ist nicht erlaubt. Jedes Mal wäre der Rückgabewert abhängig von der Eingabe des Benutzers. Damit entstünden Kommunikationsprobleme mit der Umgebung.

So werden z. B. in Haskell Aktionen, die mit der Umgebung interagieren können, als Werte des Datentyps IO beschrieben. Mittels spezieller Operatoren können aus elementaren Aktionsbeschreibungen komplexe Beschreibungen konstruiert werden. Jedes Haskell-Programm definiert eine Variable main, deren Wert eine Aktionsbeschreibung des gesamten Programms ist. Aktionen können ausgeführt werden, indem ihre Beschreibung in den Wert von main eingebettet wird.


Wikimedia Foundation.

Игры ⚽ Нужна курсовая?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Funktionale Programmiersprache — Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf mit, ihn zu verbessern, und entferne anschließend diese Markierung. Funktionale Programmierung ist ein Programmierparadigma. Programme… …   Deutsch Wikipedia

  • Funktionionale Programmierung — Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf mit, ihn zu verbessern, und entferne anschließend diese Markierung. Funktionale Programmierung ist ein Programmierparadigma. Programme… …   Deutsch Wikipedia

  • Funktionale Programmierung — ist ein Programmierstil, bei dem Programme ausschließlich aus Funktionen bestehen. Dadurch werden die aus der imperativen Programmierung bekannten Nebenwirkungen vermieden. Die funktionale Programmierung entspringt der akademischen Forschung. In… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”