Home » Tutorials » Object Pascal/RTL » Delphi-Crashkurs

Delphi-Crashkurs

Variablen und Variablentypen

Was sind Variablen?

Das Wichtigste in jeder Programmiersprache sind Variablen. Sie versetzen den Programmierer in die Lage, Informationen im Programm abzuspeichern und später wieder abzurufen. Die Quellen für diese Informationen sind dabei vielfältig. Oft werden diese Informationen vom Benutzer (auf einer Vielzahl von Wegen) eingeholt oder aber sie werden (auf verschiedenste Arten) aus bestehenden Informationen gewonnen.
Doch was sind Variablen? Ihr Kontostand ist eine Variable! Eine Variable ist ein Platzhalter, der für einen sich ständig verändernden Wert steht. Ihr Kontostand ändert sich ständig. Und trotzdem wissen Sie genau, welche Zahl ich meine, wenn ich von Ihrem Kontostand rede. In einem Brief, in dem steht „Überweisen Sie mir die Hälfte Ihres aktuellen Kontostandes!“ werden Sie an Stelle des Platzhalters „Kontostand“ den aktuellen Wert einsetzen.
Genauso arbeiten Variablen. Wenn ich eine Gleichung aufschreibe, wie z.B.

a = b + c

so sind die drei Buchstaben Variablen. Ich kann für „b“ den Wert 2 und für „c“ den Wert 3 einsetzen und ich erhalte für „a“ den Wert 5. Aber ich kann für „b“ und „c“ genauso gut zwei andere Werte einsetzen. An der Gleichung ändert das nichts. Die drei Buchstaben fungieren als Platzhalter für irgendwelche Werte, es sind Variablen.

Was sind Variablentypen?

In Delphi kann nicht jede Variable jeden beliebigen Wert annehmen. Eine Variable kann zum Beispiel immer nur für eine ganze Zahl stehen oder immer nur für einen Buchstaben. Niemals wird eine Variable für beides stehen können. Delphi ist in dieser Hinsicht sehr strikt und der Programmierer muss bei jeder Variable genau angeben, von welchem Typ sie sein soll. Es muss also vorher festgelegt werden, ob die Varibale für eine Zahl, einen Buchstaben oder ein Datum steht. Und das gilt dann für diese Variable immer.
Daraus resultierend gibt es eine strikte Trennung des Text-Inhaltes eines Edit-Feldes und dem Wert den dieser Text eventuell repräsentiert. Wenn in einem Programm die Aufforderung erscheint, dass der Benutzer seinen aktuellen Kontostand in ein Edit-Feld eingeben soll, dann ist der Inhalt dieses Edit-Feldes erst einmal eine Zeichenkette und keine Zahl. Denn prinzipiell kann ja jedes beliebige Zeichen in ein Edit-Feld eingegeben werden.
Um diesen Text aber als Zahl zu verarbeiten, um also damit zu rechnen, braucht man eine zweite Variable. Denn einen Text kann man nicht multiplizieren und auch sonst keine Rechenoperationen damit durchführen. Man muss also den Wert, den dieser Text repräsentiert, herausfinden und in einer Variable speichern, um damit dann zu rechnen.
Aber um das zu demonstieren, muss man erst einmal ein paar Variablentypen einführen. Grundlegende Aufgaben, die in jedem Programm vorkommen, sind zum einen das Speichern und Verarbeiten von Zahlen und das Speichern und Verarbeiten von Text bzw. Zeichenketten. Und die Variablentypen, die für diese Aufgaben verwendet werden, werden im Folgenden hier vorgestellt.

Die üblichen Verdächtigen (und ein „richtiges“ Programm)

Wenn in Delphi ein Text gespeichert und verarbeitet werden soll, wird dafür in den allermeisten Fällen der Variablentyp String verwendet. Dies ist eine Aneinanderreihung von bis zu 2^31 Zeichen. Diese Zeichen sind beliebig, es kann sich also um Buchstaben, Zahlen, Leerzeichen oder jedes andere Zeichen, das Sie auf der Tastatur finden (und ein paar mehr) handeln. Sie können auf einen String sowohl als Zeichenkette zugreifen, als auch jedes einzelne Zeichen eines Strings verändern. Wie das geht, wird später noch demonstriert.
Bei Zahlen muss man erst einmal entscheiden, ob man eine ganze Zahl oder eine Zahl mit Nachkommastellen speichern und verarbeiten möchte. Für ersteres verwendet man den Variablentyp Integer und für letzteres den Variablentyp Real. Für beides gibt es je nach Anforderung auch noch andere Datentypen, die beiden genannten sind jedoch sehr gebräuchlich und werden erst einmal ausreichen. Das Speichern von Zahlen ist sehr viel komplizierter als es auf den ersten Blick aussieht, darauf wird jedoch noch später eingegangen.
Um die Verwendung von Variablen und besonders die Verwendung dieser drei Typen deutlich zu machen, eignen sich am Besten ein paar Beispiele. Dazu beginnen Sie ein neues Projekt, dies tun Sie mit „Datei -> Neu -> Anwendung“.
Platzieren Sie folgende Komponenten (die Sie alle im Abschnitt „Standard“ der Komponentenpalette finden) auf der Form:

  1. zwei Edit-Felder nebeneinander
  2. zentriert darunter ein Button
  3. unter dem Button ein Label

So sollte es dann aussehen:

Führen Sie nun einen Doppelklick auf den Button aus. Nun sehen Sie ein Fenster vor sich, in dem Text steht und in dem Sie Text eingeben können. Dies ist der Code-Editor und hier schreiben Sie Ihre Quelltexte. Was es mit dem Doppelklick auf sich hat und mit dem, was Delphi dort schon geschrieben hat, das wird sich später noch klären.
Was dieses Programm tun soll ist Folgendes: zuerst sollen zwei Zahlen ermittelt werden, wobei diese in jeweils einer der beiden Edit-Boxen stehen. Aber sie tun dies natürlich erst einnmal als Text, dieser Text muss dann in die Zahlen umgewandelt werden.
Sind die Zahlen bekannt, so soll die Summe dieser beiden Zahlen berechnet werden und diese in dem Label ausgegegeben werden. Da diese Ausgabe aber wieder ein Text ist, muss die berechnete Summe erst wieder in einen Text umgewandelt werden.
Folgender Quelltext tut dies:

procedure TForm1.Button1Click(Sender: TObject);
var zahl1, zahl2, summe : Integer;
begin
  zahl1 := StrToInt(edit1.text);
  zahl2 := StrToInt(edit2.text);
  summe := zahl1+zahl2;
  label1.caption := IntToStr(summe);
end;

Bitte beachten Sie, dass die erste, die dritte und die letzte Zeile bereits von Delphi generiert wurden, also nicht von Ihnen eingegeben werden müssen. Nachdem Sie diesen Quelltext in Ihrem Programm haben, wird nun geklärt, was im einzelnen gemacht wird.
Die erste Zeile, welche einer Erklärung bedarf, ist die zweite Zeile. Die erste wurde von Delphi generiert und hat also nichts mit unserem speziellen Problem zu tun. Sie ist allgemeiner und wird später erklärt. Also, die zweite Zeile:

var zahl1, zahl2, summe : Integer;

Hier wird aufgelistet, welche Variablen im restlichen Quelltext verwendet werden. Damit Delphi weiß, dass eine solche Auflistung folgt, wird sie mit dem Schlüsselwort var eingeleitet. Selbst dann, wenn die Auflistung über mehr als eine Zeile gehen sollte, wird das Schlüsselwort nur einmal geschrieben.

Schlüsselwörter sind Wörter, welche in der Programmiersprache an sich bereits eine Bedeutung besitzen. Sie dürfen vom Programmierer im Allgemeinen nicht in anderer Bedeutung verwendet werden. Es gibt ein paar Wörter, die nur in einem bestimmten Kontext Schlüsselwörter sind, welche an anderer Stelle dann auch vom Programmierer verwendet werden dürfen. Schlüsselwörter werden von Delphi fett angezeigt.
Nach dem Schlüsselwort „var“ folgen die Namen der Variablen, getrennt durch Kommata. Gleichzeitig muss der Typ der Variablen angegeben werden, dies wird durch einen Doppelpunkt und den Namen des Types gemacht. Jede Anweisung in Delphi wird mit einem Semikolon abgeschlossen, so auch diese Aufzählung.
Noch ein paar Worte zu den Namen von Variablen: Sie sollten die Namen von Variablen immer so wählen, dass Sie genau erkennen können, wozu diese verwendet werden. Dabei sollten Sie sich nicht vor langen Namen scheuen, jedoch können sinnvolle Abkürzungen oft durchaus zu mehr Übersichtlichkeit führen.
Die Möglichkeiten der Namensgebung für Variablen in Delphi sind groß, aber sie sind nicht unbeschränkt. So dürfen Variablennamen beispielsweise nicht mit einer Zahl beginnen, keine Leerzeichen enthalten und auch nicht mit Ausdrücken der Sprache identisch sein. Übrigens sind auch keine Umlaute oder andere Sonderzeichen erlaubt! Diese Einschränkung schließt Delphi 8, aber nicht Delphi 2005 mit ein. Dort gelten andere Regeln, auf die ich hier nicht eingehen möchte.
Nun zu den nächsten beiden Zeilen, von denen ich aber nur eine beschreiben werde, weil die andere praktisch identisch ist:

zahl1 := StrToInt(edit1.text);

Der Doppelpunkt mit einem anschließenden Gleichheitszeichen ist der Zuweisungsoperator in Delphi. Dies sollte nicht mit eine Gleichung verwechselt werden. Nach Anwendung eines Zuweisungs­operators, hat die linke Seite den gleichen Wert wie die rechte Seite. In Worten hieße diese Anwei­sung also „Nimm das, was auf der rechten Seite steht, und schreibe es in die linke Seite.“. Eine Gleichung wäre in Worten eher „Vergleiche die linke und die rechte Seite.“
Die linke Seite dieser Zuweisung ist bereits beschrieben worden: es handelt sich um die Integervariable „zahl1“, also eine Variable, die nur ganze Zahlen speichert. Doch was ist die rechte Seite? Man kann die rechte Seite mal anders aufschreiben:
STRing TO INTeger (edit1.text);
Dies ist die Umwandlung eines Textes in eine Zahl, die ja schon vorher beschrieben wurde. StrToInt ist eine so genannte Funktion. Wie die genau funktionieren kommt später, hier sei nur gesagt, dass man in eine Funktion Werte hineinsteckt, diese irgendwie verarbeitet werden und die Funktion einen Wert zurückgibt.
Bei StrToInt stecken wir den in Edit1 enthaltenen Text hinein. Diesen erreichen wir über den Befehl „edit1.text“ (dazu mehr im Abschnitt über OOP). StrToInt verarbeitet diesen Text und gibt dann einen Integer zurück. Dabei wird die Funktion StrToInt zu einem Platzhalter für ihr Funktionsergebnis, wie eine Variable zum Platzhalter für ihren Wert wird. Am Ende beinhaltet zahl1 den Wert, den der Text in Edit1 repräsentiert.
Mit „zahl2“ funktioniert das genauso, es folgt nun also die Zeile mit der Addition. Die braucht wohl nicht ausführlich erklärt werden; die Werte von „zahl1“ und „zahl2“ werden addiert und der Variable „summe“ zugewiesen, also in ihr gespeichert.
Das Ergebnis soll ja in Label1 angezeigt werden. Der in einem Label, welches z.B. den Namen „label1“ trägt, enthaltene Text wird über

label1.caption

abgerufen und kann auch darüber (über eine Zuweisung) verändert werden. Dies wird in dieser Zeile gemacht:

label1.caption := IntToStr(summe);

Dabei bedarf die rechte Seite wohl nicht mehr ganz so langer Erklärungen: die Funktion IntToStr macht genau das Gegenteil von StrToInt. In IntToStr stecken wir eine (ganze) Zahl, also einen Integer, hinein und bekommen einen Text, also einen String, heraus. In obiger Zeile wird dieser dann dem Inhalt von Label1 zugewiesen: das Ergebnis der Addition wird in Label1 angezeigt.
Damit ist das Programm aber noch nicht ganz fertig. Es hat noch ein paar Schönheitsfehler. Zum einen sind beim Start des Programmes die beiden Edit-Felder nicht leer, das Label ist sichtbar, selbst wenn noch gar nichts berechnet wurde und der Button trägt die Beschriftung „button1“.
Um all dies zu ändern, rufen Sie zuerst wieder die Form1 auf, sodass Sie die Komponenten wieder vor sich sehen. Klicken Sie dann eines der Edit-Felder an. Suchen Sie nun im Objektinspektor nach der Eigenschaft „Text“. Diese ist wahrscheinlich schon standardmäßig markiert. Der Wert dieser Eigenschaft (also das, was rechts neben ihrem Namen steht) sollte momemtan „Edit1“ sein. Markieren Sie diesen Text und löschen Sie ihn. Gehen Sie genauso bei Edit2 vor. Nun sollten die Edit-Felder beide leer sein.
Beachten Sie, dass Sie gerade nur den Text, der in den beiden Edit-Feldern enthalten ist, geändert haben. Dieser ist völlig unabhängig von ihren Namen. Diese haben sich nicht geändert und sind somit immer noch „Edit1“ und „Edit2“.
Als nächstes kümmern Sie sich um den Button. Klicken Sie auch ihn an und suchen Sie nach der Eigenschaft „Caption“. Dies ist die Beschriftung und auch sie sollte im Objektinspektor standardmäßig ausgewählt sein. Ändern Sie sie in „Addieren“. Auch hier bleibt der Name des Buttons unverändert!
Zu guter Letzt muss auch noch der in Label1 enthaltene Text geändert werden, der, wie schon erwähnt, auch hier in „Caption“ enthalten ist. Ändern Sie den Text in „keine Summe“ oder etwas ähnlich sinnvolles. Nun sollte Ihr Programm fertig sein und Sie können es ausführen.
Ich habe in diesem Abschnitt natürlich vieles nur unzureichend erklärt. Dies ist jedoch nicht anders zu machen, da man einfach nicht alles auf einmal erklären kann, aber vieles, was noch nicht richtig erklärt wurde, für ein laufendes Programm notwendig ist. Man könnte dieses Problem umgehen, indem man bis zum bitteren Ende nur Theorie macht und erst dann anfängt, zu programmieren, aber das würde schnell sehr langweilig werden und Ihnen den Spaß verderben.
Ein weiterer wichtiger Datentyp ist übrigens der Datentyp Boolean, dieser wird im Kapitel „Exkurs – Bool’sche Ausdrücke“ näher beleuchtet.

2 Gedanken zu „Delphi-Crashkurs“

  1. Guten Morgen,

    erst einmal vielen Dank für die ausführlichen Erklärungen!

    Im ersten Beispiel zur Darstellung von Zahlen im Rechner müsste es heißen

    4 mal 1 = 4*10^0

    statt

    4 mal 1    = 4*10

     

    1. Vielen Dank für den Hinweis.
      Ich habe es entsprechend korrigiert.
      Auch Deinen weiteren Hinweis habe ich eingearbeiotet.

Kommentare sind geschlossen.