Referenz Transparenz

Die referenzielle Transparenz besagte that der Wert Eines Ausdrucks in Einem Quelltext nur von Wadenfänger Umgebung abhängt und nicht vom ZeitPunkt Wadenfänger Auswertung. Das ist das Gewicht Ihrer eigenen Eigenschaft der Anmelder Programmparadigmas .

In der mathematischen Validität möchte ich einen Geltungsbereich in den Werth sehen. Stirbt dies in Imperativen, werden Programmreden nicht erwähnt , da das Programm Mermaid (z. B. das Endergebnis) aus einem der implizierten Zustände (z. B. dem Speicherinhalt) abhängt.

x = x + 1

In der üblichen mathematischen Deutung beschreibt dieses Schweigen der falschen Aussage, dass es kein x ist , die Gleichheit wahr ist. In vielen Imperative Programmiersprachen, ETWA sterben auf der C -Syntax basierenden Sprachen C ++ und Java , hingegen ist das Gleichheitszeichen wo Zuweisungsoperator . Dort Stellt sterben Zeile Eine gelbe anweisung dar: Je Once, war in der Speicherzelle für x Steht, Wird ein Wert auf der Seite rechts berechnet und das Plan Ergebnis der Link Seite zugewiesen. Sölch Nebeneffekte erschweren die Mathematischen Beweis der Richtige Heit ( „Liefert das Programm das WIRKLICH, war es soll?“) Erheblich.

In den Erläuterungen gilt das Prinzip „Scharnier hinge das Prinzip“, die Referenzworte Transparenz und als Folge daraus das Substitutionsprinzip . Danach kann ein Ackdruck immer durch einen andre Wichen Wert ersetzt werden, ohne dass dies Auswirkungen auf die Programmsemantik hat. Das Ziel von Sölch Programmtransformationen sind Ersetzung von sterben Aufwand Durch einfach zu berechnende Ausdrücke.

Das Prinzip der Referenz Transparenz wirt aber auch Probleme auf. So ist ein einfaches Beispiel für ein optimales Ergebnis. eine Funktion – wie getcharin C – ist nicht erlaubt. Jedes Mal wenn der Rückgabewert von der Eingabe des Benutzers. Damage entstünde Kommunikationsprobleme mit der Umgebung.

So wurde z. B. in den Funktionsprogrammen Haskell- Aktionen, die mit der Umgebung verbunden werden können, als Werte des Datentyps IO. Mittels spezieller Aktionscodes können komplexe Strukturen beschrieben werden. Jedes Haskell-Programm definiert seine Variablen main, die die Aktionspläne der gemeinsamen Programme sind. Die Aktion wurde im mainWert von eingebettet durchgeführt.