This is documentation for Mathematica 4, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.1)

 Documentation /  Mathematica /  Das Mathematica Buch /  Die Prinzipien von Mathematica /  Modularität und die Benennung von Dingen /

Blöcke und lokale WerteKontexte

2.6.7 Blöcke im Vergleich zu Modulen

Wenn Sie in Mathematica ein Programm schreiben, sollten Sie stets darauf achten, es so zu konstruieren, daß seine Einzelteile so unabhängig wie möglich sind. Dann ist das Programm für Sie verständlicher, einfacher zu warten und zu erweitern.

Eine der Hauptmethoden, um sicherzugehen, daß sich verschiedene Teile eines Programms nicht gegenseitig stören, besteht darin, den Variablen nur einen bestimmten „Gültigkeitsbereich" zu geben. Mathematica unterstützt zwei Grundmechanismen zur Beschränkung des Gültigkeitsbereichs von Variablen: Module und Blöcke.

Beim Schreiben konkreter Programme sind Module weit üblicher als Blöcke. Wenn Sie jedoch Gültigkeitsbereiche für interaktive Berechnungen festlegen müssen, sind Blöcke häufig geeigneter.

Mathematicas Gültigkeitsbereich-Mechanismen für Variablen

Die meisten traditionellen Programmiersprachen benutzen einen als „lexikalischen Gültigkeitsbereich" bezeichneten Mechanismus für Variablen, der dem Mathematica-Modul-Mechanismus entspricht. Einige symbolische Programmiersprachen, wie beispielsweise LISP, unterstützen auch „dynamische Gültigkeitsbereiche", dies entspricht Mathematica-Blöcken.

Wenn ein lexikalischer Gültigkeitsbereich benutzt wird, werden die Variablen als lokal bezüglich eines bestimmten Abschnitts des Codes in einem Programm behandelt. Bei dynamischen Gültigkeitsbereichen gelten die Werte von Variablen als lokal bezüglich eines Teils der Ausführungsgeschichte des Programms.

In Compiler-Sprachen wie C gibt es eine sehr klare Trennung zwischen „Code" und „Ausführungsgeschichte". Durch die symbolische Natur von Mathematica ist diese Unterscheidung etwas weniger klar, weil „Code" im Prinzip auch dynamisch während der Ausführung eines Programms aufgebaut werden kann.

Module[vars, rumpf] behandelt die Form des Ausdrucks rumpf zu dem Zeitpunkt, wenn das Modul ausgeführt wird, als den „Code" eines Mathematica-Programmes. Wenn dann irgendwelche der vars in diesem „Code" explizit erscheinen, werden diese als lokal angesehen.

Block[vars, rumpf] berücksichtigt die Form des Ausdrucks rumpf nicht. Stattdessen benutzt der Block während der gesamten Evaluierung von rumpf lokale Werte für die vars.

Dies definiert m mit Hilfe von i.

In[1]:= m = i^2

Out[1]=

Im Block wird während der gesamten Evaluierung von i + m der lokale Wert für i benutzt.

In[2]:= Block[{i = a}, i + m]

Out[2]=

Hier wird nur das i, das explizit in i + m erscheint, als lokale Variable behandelt.

In[3]:= Module[{i = a}, i + m]

Out[3]=

Blöcke und lokale WerteKontexte