Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Wirkung (Informatik)

In der theoretischen Informatik bezeichnet eine (spezifizierte) Wirkung die Veränderung des Zustands, in dem sich eine abstrakte Maschine befindet.

Inhalt5 Abschnitte
  1. 1. Grundidee
  2. 2. Spezifizierte und unspezifizierte Wirkungen
  3. 3. Rein funktionale Programmierung
  4. 4. Beispiel für referenzielle Transparenz
  5. 5. Funktional, aber nicht rein funktional

Grundidee

In der theoretischen Informatik bezeichnet eine Wirkung die Veränderung des Zustands, in dem sich eine abstrakte Maschine befindet. Wenn diese Veränderung Teil der beschriebenen Maschine ist, spricht der Artikel von einer spezifizierten Wirkung. Manchmal wird dafür auch der Ausdruck Seiteneffekt verwendet.

Ausdrücke und Funktionen können wirkungsbehaftet oder wirkungsfrei sein. Wirkungsbehaftete Ausdrücke können den Zustand verändern oder andere Effekte auslösen. Wirkungsfreie Ausdrücke verändern den Zustand nicht; dazu gehören in Hochsprachen etwa mathematische Funktionen wie Sinus, Kosinus oder Quadratwurzel.

Spezifizierte und unspezifizierte Wirkungen

Eine Variable repräsentiert zu jedem Zeitpunkt des Programmablaufes einen ganz bestimmten Wert. Die Gesamtheit aller Variablen und ihrer Werte definiert den Programmzustand einer abstrakten Maschine. Dieser Zustand kann nur durch Operationen mit spezifizierten Wirkungen verändert werden.

Von spezifizierten Wirkungen unterscheidet der Artikel unspezifizierte Wirkungen. Sie liegen außerhalb der Betrachtung des Systems. Je nach Definition kann zum Beispiel die Bildschirmausgabe dazugehören. Solche Effekte werden für die abstrakte Maschine gegebenenfalls nicht berücksichtigt. Funktionen, die mit Ein- oder Ausgabe von Daten zu tun haben, gehören in der Regel zu den Funktionen mit unspezifizierten Wirkungen.

Rein funktionale Programmierung

In rein funktionalen Programmiersprachen hat die Auswertung eines Ausdrucks niemals eine spezifizierte Wirkung. Auch wenn ein Ausdruck ein Ergebnis liefert, gilt diese Ausgabe eines Ergebnisses hier nicht als spezifizierte Wirkung.

Solche Sprachen besitzen keine Anweisungen, keine Variablen und keine Wertezuweisungen, sondern nur Ausdrücke. Deshalb treten keine Zustandsänderungen im Sinne der Definition auf. Die Programmiersprache ist damit zustandslos und wirkungsfrei.

Diese Eigenschaft heißt referenzielle Transparenz. Sie bedeutet, dass der Wert eines Ausdrucks nur von seiner Umgebung abhängt, nicht vom Zeitpunkt der Auswertung und nicht von einer bestimmten Auswertungsreihenfolge. Als Beispiele für gänzlich wirkungsfreie Sprachen nennt der Artikel Haskell, Elm und reines Lisp (pure Lisp).

Beispiel für referenzielle Transparenz

Das Beispielprogramm in Lisp- oder Scheme-ähnlicher Präfixnotation lautet: (if (= a 0) (+ a 1) (* a 2)). Es liefert abhängig von einer Bedingung eines von zwei möglichen Berechnungsergebnissen zurück.

Dabei wird das Ergebnis keiner Variable zugewiesen. Die Reihenfolge, in der die einzelnen Funktionen if, =, + und * ausgewertet werden, hat keinen Einfluss auf das Ergebnis. Jeder Ausdruck kann an jeder Stelle durch seinen Wert ersetzt werden. Genau das veranschaulicht referenzielle Transparenz.

Funktional, aber nicht rein funktional

Nicht jede funktionale Programmiersprache ist rein funktional. In Sprachen wie Scheme können Prozeduraufrufe die Werte von Variablen verändern. Das ist eine spezifizierte Wirkung. Sie können außerdem Bildschirmausgaben auslösen, was eine unspezifizierte Wirkung sein kann.

Dadurch geht die referenzielle Transparenz verloren. Scheme ist deshalb nach dem Artikel keine rein funktionale, sondern nur eine funktionale Sprache. Um wirkungsbehaftete Prozeduren in der für Lehrzwecke eingesetzten Sprache Scheme kenntlich zu machen, werden sie mit einem Ausrufezeichen markiert, zum Beispiel bei der Variablenzuweisung (set! a 2).

Lernvideos zu Wirkung (Informatik)

Weiterlesen

Theoretische Informatik Ihre Inhalte sind die Automatentheorie, die Theorie der formalen Sprachen, die Berechenbarkeits- und Komplexitätstheorie, aber auch die Logik und formale … Übersetzungsschwierigkeit Übersetzungsschwierigkeiten, umgangssprachlich auch Übersetzungsfallen genannt, sind Fehlerquellen beim Übersetzen oder Dolmetschen zwischen natürlichen … Funktion (Programmierung) Eine Funktion (englisch function) ist in der Informatik und in verschiedenen höheren Programmiersprachen die Bezeichnung eines Programmkonstrukts, … Programmiersprache Bei deklarativen Programmiersprachen ist der Ausführungsalgorithmus schon vorab festgelegt und wird nicht im Quelltext ausformuliert/beschrieben, sondern es … Auswertung (Informatik) Auswertung (engl. evaluation als Beschreibung, Analyse und Bewertung) bezeichnet in der Informatik den Vorgang, der einem Ausdruck (eventuell in einem … Eingabe (Computer) Die Begriffe Eingabe, Verarbeitung und Ausgabe sind grundlegend für die elektronische Datenverarbeitung und werden als EVA-Prinzip bezeichnet. Alle gängigen … Ausgabe (Computer) Die Begriffe Eingabe, Verarbeitung und Ausgabe sind grundlegend für die elektronische Datenverarbeitung und werden als EVA-Prinzip bezeichnet. Alle gängigen … Höhere Programmiersprache Eine höhere Programmiersprache ist eine Programmiersprache zur Abfassung eines Computerprogramms, die in Abstraktion und Komplexität von der Ebene der … Quadratwurzel Hierbei handelt es sich um einen Algorithmus ähnlich dem gängigen Verfahren der schriftlichen Division. Intervallschachtelung: Dieses Verfahren ist recht … Variable (Programmierung) In der Programmierung ist eine Variable ein abstrakter Behälter für einen Wert, der bei der Ausführung eines Computerprogramms auftritt. Funktionale Programmierung Funktionale Programmierung ist ein Programmierparadigma, in dem Funktionen nicht nur definiert und angewendet werden können, sondern auch wie Daten … Anweisung (Programmierung) Anweisungen sind üblicherweise Zuweisungen, Kontrollanweisungen (wie Sprünge, Schleifen und bedingte Anweisungen) und Prozeduraufrufe. Abhängig von der …