6. Anweisungen
 
zurück
6.6 Block-Anweisung


Eine Blockanweisung (block_statement <BNF>) dient der Strukturierung einer Anweisungs-folge in Blöcke. Damit wird vor allem bezweckt, temporäre Daten dann zu vereinbaren, wenn sie gebraucht werden, und Ausnahmen lokal abzufangen.

Ein Block besteht aus einem optionalen Vereinbarungsteil und einem Anweisungsteil. Optional kann ein Ausnahmebehandler folgen. Textuell beginnt ein Block mit einem optionalen Blockbezeichner, gefolgt von dem optionalen Schlüsselwort "declare". Der
Block endet mit dem Schlüsselwort "end", wiederum gefolgt von einem optionalen Blockbezeichner.

[BLOCKBEZEICHNER:]
[declare
-- lokale VARIABLEN deklarieren]
begin
-- Anweisungen, die ausgeführt werden sollen
[exception
-- Ausnahmebehandler]
end [BLOCHBEZEICHNER];


Folgendes ist bei einem Block zu beachten:

Jedem Block sollte ein Bezeichner voran- und nachgestellt werden. Dies erleichtert das Verständnis der Bedeutung des Blocks sowie das Erkennen von Blockanfang und Blockende.

Wird zur Programmlaufzeit eine Blockanweisung ausgeführt, werden zuerst die dort vereinbarten Da-tenobjekte erzeugt. Erst dann werden die Anweisungen des Blocks ausgeführt. Ist die Ausführung der Blockanweisung beendet, werden die erzeugten Datenobjekte wieder gelöscht, und das Programm wird mit der ersten Anweisung nach "end <Blockbezeichner>;" fortgesetzt, es sei denn, es wird eine Ausnahme ausgelöst.

Ausnahmen, die während der Ausführung eines Blockes auftreten, können innerhalb des Blockes behandelt werden, ohne daß dies zu einem Abbruch des umgebenden Programms führt.


Beispiel 1:

VERTAUSCHE:
declare
   ZWISCHENERGEBNIS: MY_INTEGER;
begin
   ZWISCHENERGEBNIS:=X;
   X:=Y;
   Y:=ZWISCHENERGEBNIS;
end VERTAUSCHE;


Im Block "VERTAUSCHE" wird zuerst die Variable "ZWISCHENERGEBNIS" erzeugt.

Anschließend werden die drei Wertzuweisungen ausgeführt, um - mit Hilfe von "ZWISCHENERGEBNIS" - die Werte der globalen Variablen "X" und "Y" zu vertauschen.
Die Programmausführung wird anschließend mit der ersten Anweisung nach "VERTAUSCHE" fortgesetzt.

Die Variable "ZWISCHENERGEBNIS" ist eine lokale Variable des Blocks "VERTAUSCHE", da sie im Vereinbarungsteil dieses Blockes deklariert wurde. Sie kann nur innerhalb dieses Blockes gelesen oder geschrieben werden, d. h. nur durch Anweisungen, die zwischen "VERTAUSCHE:" und "end VERTAUSCHE;" stehen. Außerhalb dieses Blockes ist sie unbekannt und kann nicht verwendet werden.


Beispiel 2:

AEUSSERER_BLOCK:
declare
   Z: MY_INTEGER:=10;
begin
   INNERER_BLOCK:
   declare
      Y, Z: MY_INTEGER;
   begin
      -- Wertzuweisung 1
      Z:=20;
      -- Wertzuweisung 2
      AEUSSERER_BLOCK.Z:=11;
   end INNERER_BLOCK;
   -- Wertzuweisung 3
   Z:=Z+1;
   -- Wertzuweisung 4, illegal
   Y:=Z;
end AEUSSERER_BLOCK;


Ist eine Variable gleichen Namens in der umgebenden Programmeinheit deklariert, wird ihre Deklaration durch die lokale Deklaration verdeckt, d. h., daß Wertzuweisungen an die lokale Variable nichts an dem Wert der gleichnamigen globalen Variable ändern.

Ist die umgebende Programmeinheit aber ein weiterer Block, kann die globale Variable nach Voranstellen des Block-bezeichners vor den Variablennamen geändert werden.

Im Beispiel ist die Variable "Z" lokal in "INNERER_BLOCK" vereinbart. Eine gleichnamige Variable existiert in der um-gebenden Programmeinheit "AEUSSERER_BLOCK" und ist dort mit dem Wert "10" initialisiert.

Durch Wertzuweisung 1 bleibt der Wert weiterhin 10, da nur der Wert der lokalen Variable "Z" von "INNERER_BLOCK" verändert wird.
Durch Wertzuweisung 2 hingegen wird der Wert von "Z" aus "AEUSSERER_BLOCK" von "10" auf "11"verändert. Möglich ist das durch Voranstellen des Blockbezeichners vor den Variablennamen "Z". Der Wert von "INNERER_BLOCK.Z" bleibt weiterhin auf "20".
Für Wertzuweisung 3 wird von "AEUSSERER_BLOCK.Z" ausgegangen. Der Wert "11", den diese Variable durch Wert-zuweisung 2 erhalten hat, wird auf "12" inkrementiert. Wertzuweisung 4 schließlich ist illegal, da nach Verlassen von "INNERER_BLOCK" die Variable "Y" nicht mehr definiert ist. ist. zuweisung 2 erhalten hat, wird auf "12" inkrementiert. Wertzuweisung 4 schließlich ist illegal, da nach Verlassen von "INNERER_BLOCK" die Variable "Y" nicht mehr definiert ist.


 
zurück
 Index   Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.