Deutsch English
Alphabetischer Index
Array-Funktionen
CGI-Funktionen
Datentypen
Datums/Uhrzeit-Funktionen
Debugging
Operatoren
Ramtext-Funktionen
Selektion
Socket-Funktionen
Sonstige-Funktionen
Sprachelemente
  • 'ANWEISUNGEN'
  • 'AUSDRÜCKE'
  • 'BEZEICHNER'
  • DEF
  • IF
  • 'INDEXBESCHREIBUNG'
  • 'KONSTANTEN'
  • MODULE
  • PROCEDURE
  • REPEAT
  • RETURN
  • USES
  • VAR
  • WHILE
    Statistik-Funktionen
    Stream-Funktionen
    String-Funktionen
    System-Funktionen
    Tabellen-Funktionen
    Text-Funktionen
    Volltext-Funktionen
    Zahlen-Funktionen
    Home    Überblick    Suche    Impressum    Kontakt    Mitglieder
    Themenkomplex Sprachelemente
    Funktion IF
    Kurz Bedingte Anweisung
    Syntax IF <log. Ausdruck> THEN <Anweisungen> {ELSIF <log. Ausdruck> THEN <Anweisungen>} [ELSE <Anweisungen>] END
    Parameter log. Ausdruck::= log. Term {OR log. Term}.
    log. Term::=log. Faktor {AND log. Faktor}.
    log. Faktor::=[NOT] Vergleich | (log. Ausdruck).
    Ergebnis
    Siehe auch:
    Beschreibung Die bedingte Anweisung

    Mit der bedingten Anweisung ist es möglich, dem Programm mitzuteilen, unter welchen Bedingungen es etwas tun soll und unter welchen etwas ganz anderes.

    Die einfachste Form der bedingten Anweisung hat folgende Form:

    IF logischer Ausdruck THEN Anweisungen END
    


    Zur Laufzeit des Programm des Programms wird der logische Ausdruck ausgerechnet, und wenn das Ergebnis ,wahr? ist, werden die dem THEN folgenden
    Anweisungen ausgeführt. Andernfalls wird der Programmfluss mit der ersten Anweisung nach dem END fortgesetzt.

    Beispiel:
     PROCEDURE Main
       VAR name : STRING
       cgiwriteln('content-type: text/html')
       cgiwriteln('')
       name:=getquerystring('name')
       IF name<>'' THEN
         cgiwriteln('Guten Morgen '+name)
       END
     ENDPROC
    

    Dieses kleine Programm schaut nach, ob in der URL ein Name übergeben wurde. Im positiven Fall (name<>'') gibt es eine Begrüßungsmeldung aus. Für localhost/cgi-tdb/test.prg?name=Hans lautet die Begrüßung demnach: "Guten Morgen Hans".

    Nun wollen wir das Programm so abändern, dass für den Fall, dass kein Name angegeben wird, die Standardbegrüßung "Hallo unbekannte Welt" erfolgt. Mit dem bisher bekannten Werkzeugen können wir das so erledigen:
    PROCEDURE Main
     VAR name : STRING
       cgiwriteln('content-type: text/html')
       cgiwriteln('')
       name:=getquerystring('name')
       IF name<>'' THEN
         cgiwriteln('Guten Morgen '+name)
       END
       IF NOT name<>''THEN
         cgiwriteln('Hallo unbekante Welt')
       END
    ENDPROC
    

    Das funktioniert zwar, sieht aber nicht besonders elegant aus. Zudem müssen in jedem Fall beide logischen Ausdrücke berechnet werden:

    name<>'' und NOT name<>''

    Für diesen Zweck gibt es eine Erweiterung der bedingten Anweisung:
    IF logischer Ausdruck THEN
       Anweisungen_1
     ELSE
       Anweisungen_2
     END
    

    Auch hier wird der logische Ausdruck berechnet. Wenn er "wahr" liefert, so werden die Anweisungen_1 ausgeführt. Liefert er aber "falsch", so werden die Aweisungen_2 ausgeführt. Damit kann unser Begrüßungsprogramm vereinfacht werden:
    PROCEDURE Main
     VAR name : STRING
       cgiwriteln('content-type: text/html')
       cgiwriteln('')
       name:=getquerystring('name')
       IF name<>'' THEN
         cgiwriteln('Guten Morgen '+name)
       ELSE
         cgiwriteln('Hallo unbekante Welt')
       END
    ENDPROC
    

    Und schon steigen unsere Ansprüche. Wir könnten ja jetzt auf die Idee verfallen, dass das Programm den User "Hans" ganz besonders herzlich begrüßt, während es bei den anderen die Standardfloskeln aus dem obigen Beispiel verwendet. Wir können dieses Probem bereits lösen, wenn wir erkennen, dass in der Definition der
    bedingten Anweisung wiederum Anweisungen vorkommen, die bedingte Anweisung mithin beliebig verschachtelt werden kann. Zur besseren Übersicht verwenden wird das Prinzip der Texteinrückung, bei der jede Verschachtelung immer weiter eingerückt wird:
     PROCEDURE Main
     VAR name : STRING
       cgiwriteln('content-type: text/html')
       cgiwriteln('')
       IF name='Hans' THEN
         cgiwriteln('Einen besonders guten Morgen lieber Hans')
       ELSE
         IF name<>'' THEN
           cgiwriteln('Guten Morgen '+name)
         ELSE
           cgiwriteln('Hallo unbekante Welt')
         END
       END
     ENDPROC
    
    Wenn wir nun mehrere Anwender mit einer jeweils eigenen Floskel begrüßen wollen, wird die Verschachtelung schnell tief und unübersichtlich. Aber auch hier bietet EASY Abhilfe. Für den Fall, dass im ELSE-Zweig einer bedingten Anweisung wiederum genau eine bedingte Anweisung steht, kann dafür einen ELSIF-Zweig (ohne Verschachtelung) verwenden:
       IF logischer Ausdruck_1 THEN
       Anweisungen_1
     ELSIF logischer Ausdruck_2 THEN
       Anweisungen_2
     ELSIF logischer Ausdruck_3 THEN
       Anweisungen_3
     ...
     ELSE
       Anweisungen_sonst
     END
    

    Das Programm prüft zunächst den logischen Ausdruck_1. Nur wenn dieser den Wert "falsch" ergibt, wird der logische Ausdruck_2 berechnet, im "falsch"-Fall der logische Ausdruck_3 usw. Die Anweisungen_sonst nach dem ELSE werden nur ausgeführt, wenn sich bis dahin kein "wahr" ergeben hat, ansonsten werden diejenigen Anweisungen ausgeführt, die zu dem Abschnit gehören, dessen logischer Ausdruck "wahr" ergeben hat. Das klingt kompliziert, ist es aber nicht. Unser Programm sieht demnach so aus:
     PROCEDURE Main
     VAR name : STRING
       cgiwriteln('content-type: text/html')
       cgiwriteln('')
       name:=getquerystring('name')
       IF name='Hans' THEN
         cgiwriteln('Einen besonders guten Morgen lieber Hans')
       ELSIF name<>'' THEN
         cgiwriteln('Guten Morgen '+name)
       ELSE
         cgiwriteln('Hallo unbekante Welt')
       END
     ENDPROC
    

    tdbengine chat
    irc.tdbengine.org
    #tdbengine

       Copyright © 2003-2004 tdb Software Service GmbH
       Alle rechte vorbehalten. / All rights reserved
       Letzte Änderung: 21.10.2004
    {Fehler für :execmacro{execmacro="sessionspy"}