Optionen und weiterführende Links



In der Datenbank befinden sich derzeit 477 Specials. Alle Specials anzeigen...

Befehl ist Befehl

Befehl ist Befehl

Ein Programm ist im wesentlichen eine Abfolge von Befehlen

ermittle die Nummer des Thumbnails, auf das der User geklickt hat
suche das große Bild mit dieser Nummer heraus
zeige dieses große Bild in einem Pop-Up-Window an

Leider versteht der durchschnittliche Computer kein Deutsch, sondern nur bestimmte Programmiersprachen. Also müßt Ihr Eure Programme auch in einer solchen Programmiersprache schreiben

var number = getNumberOfClicked();
var bigPic = getPicture(number);
showPic(bigPic);

Außerdem sind Computer ziemlich pingelig, was Rechtschreibfehler angeht. Bei Programmen spricht man auch von Syntaxfehlern. Das liegt daran, daß Computer von Haus aus dumm sind: Wenn in Eurem Befehl irgendwo ein Tippfehler drin ist, kann der Rechner nur «Den Befehl 'plint' kenne ich nicht!» sagen. Daß es richtig 'print' heißen müßte, weiß der Rechner nicht.

Allerdings sind die Grundprinzipien (fast) aller Programmiersprachen sehr ähnlich. Daher sind die Beispiele in diesem Abschnitt nicht in irgendeiner realen Programmiersprache formuliert, sondern in sogenanntem Pseudocode. Das macht es leichter, die wichtigen Prinzipien zu zeigen, ohne durch irgendwelche Syntax-Details Verwirrung zu stiften.

Einen Befehl in einem Programm nennt man ein Statement. Das Beispiel oben setzt sich also aus drei Statements zusammen. Als Trennung zum nächsten Statement schließt man jedes Statement mit einem Semikolon (Strichpunkt, ';') ab. Prinzipiell kann man mehrere Statements in eine Zeile schreiben, normalerweise aber hat jedes Statement eine Zeile für sich.

Neben dem eigentlichen Code findet Ihr in vielen Programmen Kommentare. Das sind einfach Anmerkungen, um den Code besser zu verstehen. Der Computer ignoriert sie. Gekennzeichnet werden Kommentare in den meisten (uns interessierenden) Sprachen mit '//' (der Rest der Zeile wird ignoriert) oder mit '/*' und '*/' (alles zwischen diesen Symbolen wird ignoriert).

/* Zeige das große Bild zu dem Thumbnail,
   auf das geklickt wurde. */
// ermittle Nummer des Thumbnails, auf das geklickt wurde
var number = getNumberOfClicked();
// suche das große Bild mit dieser Nummer
var bigPic = getPicture(number);
showPic(bigPic); // zeige dieses Bild an

Kommentare helfen nicht nur anderen, die Eure Codes warten oder erweitern müssen. Sie sind auch sehr hilfreich, wenn Ihr ein halbes Jahr später nachvollziehen müßt, was Ihr da einmal zusammenprogrammiert habt. Daher solltet Ihr Euch von Anfang an angewöhnen, Eure Codes ausführlich zu kommentieren. Einige sind sogar der Meinung, daß die Kommentare mindestens den gleichen Raum einnehmen sollten wie die eigentlichen Codes.

Von Fächern, Typen und Zeichenketten

Ein wichtiges Thema beim Programmieren sind Variablen. Eine Variable könnt Ihr Euch vorstellen als ein «Fach» im Computer, in das Ihr Werte hineinschreiben, verändern und wieder auslesen könnt.

meine_variable = 16;
print "Der Wert liegt im Moment bei "+meine_variable+".";
meine_variable = meine_variable + 5;
print "Der Wert liegt im Moment bei "+meine_variable+".";

Dieser Codeschnippsel erzeugt folgende Ausgabe

Der Wert liegt im Moment bei 16.
Der Wert liegt im Moment bei 21.

Beim Namen einer Variablen gibt es ein paar Einschränkungen: Ihr könnt nur Buchstaben, Ziffern und den Unterstrich ('_') verwenden, und das erste Zeichen darf keine Ziffer sein. Außerdem unterscheiden die meisten Programmiersprachen Groß- und Kleinschreibung: meine_variable' und 'meine_Variable' sind nicht dasselbe. Ihr dürft auch keine reservierten Schlüsselwörter als Variablennamen verwenden. Wenn also die Sprache selbst das Wort 'if' ('falls') verwendet, könnt Ihr keine Variable namens 'if' benutzen.

Der Name einer Variable sollte wenigstens in etwa zeigen, welchen Zweck die Variable hat. Das mag zwar etwas mehr Tipparbeit sein, als einfach 'a', 'b', 'c' zu verwenden, aber es erleichtert das Lesen des Codes sehr. Im bereits bekannten Beispiel

var number = getNumberOfClicked();
var bigPic = getPicture(number);
showPic(bigPic);

enthät 'number' die Nummer des Bildes, und 'bigPic' speichert das große Bild. So etwas nennt man sprechende ariablennamen.

In einigen Sprachen müssen Variablen vor der ersten Verwendung deklariert werden. Dabei wird im Arbeitsspeicher der Platz für die Variable reserviert. Die Deklaration geschieht typischerweise durch das Voranstellen eines festen Schlüsselworts oder der Typbezeichnung der Variable

var meine_variable = 5; // Deklaration mit einem festen Schlüsselwort
int die_andere_variable = 8; // Deklaration mit der Typbezeichnung

Hinter dem Typ einer Variablen verbirgt sich einfach nur folgendes: Eine Variable, die eine Zahl enthält, kann nicht auf einmal einen Text enthalten; und eine Textvariable kann nicht plötzlich einen Verweis auf eine Datei aufnehmen. Daher ist jede Variable von einem bestimmten Typ. Die wichtigsten Variablentypen sind

Integer
In einer Integer-Variablen könnt ihr ganze Zahlen speichern, sowohl positive als auch negative. Eine Integer-Variable kann also 5, -8 oder -100 aufnehmen, aber nicht 2.35. Viele Programmiersprachen kennen mehrere Integer-Typen, die sich in ihrer Breite unterscheiden. Damit ist der Bereich gemeint, aus dem die Werte kommen können. Üblich ist ein Intervall von -65 536 bis +65 536. Als Typbezeichnung wird auch gerne die Kurzform int verwendet.
Fließkomma
Fließkomma-Zahlen sind Dezimalbrüche, also beispielsweise 3.14, 6.023 oder -8.15. Warum da Kommata fließen, hängt mit der internen Speicherung der Werte zusammen. Das soll uns hier aber nicht näher interessieren. Natürlich könnt Ihr auch in einer Fließkomma-Variablen den Wert 5 speichern, dann müßt Ihr ihn aber meist als 5.0 schreiben. Auch hier gibt es oft verschiedene Typen mit verschiedener Breite. Typische Schlüsselwörter für Fließkomma-Variablen sind float, real oder double.
String
Strings speichern keine Zahlen, sondern Zeichenketten, also Texte. Begrenzt werden Strings mit Anführungszeichen, entweder doppelten(") oder einzelnen (')
String eine_Stringvariable = "Der Text in der Variablen.";
In einem String können nahezu alle Zeichen vorkommen, nur bei einigen Zeichen müßt ihr aufpassen. Wo endet beispielsweise dieser String
var variable = "Darf ein String Anführungszeichen (") enthalten?";

In vielen Programmiersprachen gibt es noch weitere Typen, aber praktisch jeder diese zusätzlichen Typen läßt sich mit Hilfe der drei vorgestellten Typen «simulieren». Beispielsweise gibt es oft boolsche Variablen (Schlüsselwort boolean). Die enthalten Wahrheitswerte, also einfach «wahr» ('true') oder «falsch» ('false'). Fehlen explizite boolsche Variablen, könnt Ihr einfach ints mit den Werten 0 oder 1 benutzen.

In praktisch jeder Sprache kann man Variablenwerte in Werte eines anderen Typs umwandeln. Dabei sind verschiedene Sprachen unterschiedlich streng: Einige wandeln viel implizit um, ohne daß sich der User darum kümmern muß

var text = "8";
var zahl = 3;
zahl = zahl + text;

Dabei können allerdings merkwürdige Effekte auftreten. Enthält die Variable 'zahl' in obigem Beispiel jetzt die Zahl 11 oder den String "38" ("3" + "8")? Daher ist es in streng typisierten Sprachen häufig leichter, Fehler zu finden, weil die meisten Typumwandlungen dem Programmierer obliegen


String text = "8";
int zahl = 3;
zahl = zahl + (int)text; // ergibt 11
text = (String)zahl + text; // ergibt "38"

Noch mehr zu Variablen

Ihr bekommt einen Wert in eine Variable hinein mit Hilfe einer Zuweisung

var variable = 8; // belege 'variable' mit dem Wert 8

Dabei solltet Ihr darauf achten, daß Ihr den Zuweisungsoperator nicht mit dem Operator für Vergleiche verwechselt. Der eine belegt eine Variable mit einem Wert, der andere liefert einen Wahrheitswert (true oder false)

var zahl = 8; // weist 'zahl' den Wert 8 zu
zahl == 5; // ergibt false, weil 8 nicht gleich 5 ist.
// Der Wert von 'zahl' bleibt unverändert!

In einigen Sprachen wird auch ':=' als Zuweisungsoperator benutzt und das einfache '=' als Vergleichsoperator.

Der Begriff des Operators ist schnell erklärt: Ein Operator verknüft einen oder mehrere Werte und liefert einen neuen Wert. Bekannte Operatoren, die mit Zahlen arbeiten, sind die vier Grundrechenarten

zahl = andere_zahl + 5; // Addition
zahl = andere_zahl - 3; // Substraktion
zahl = andere_zahl * 2; // Multiplikation
zahl = andere_zahl / 4; // Division

Ein Operator kann verschiedene Funktionen haben, wenn man sie im Zusammenspiel mit verschiedenen Typen benutzt. Bei Zahlen beispielsweise steht '+' für die normale Addition, bei Strings aber für die Konkatenation

var zahl = 3 + 7; // 'zahl' hat jetzt den Wert 10
// 'text' hat jetzt den Inhalt 'der text'
var text = "der " + "text";

Einige Operatoren sollen hier noch kurz vorgestellt werden, zuerst die Vergleichsoperatoren

  • '==' steht für 'ist gleich'
  • '!=' steht für 'ist ungleich'
  • '<' steht für 'ist kleiner als'
  • '>' steht für 'ist größer als'
  • '<=' steht für 'ist kleiner oder gleich'
  • '>=' steht für 'ist größer oder gleich'

Alle Vergleichsoperatoren liefern einen Wahrheitswerts zurück.

Die Verknüpfung von Wahrheitswerten geschieht mit den sogenannten logischen Operatoren. Davon sind besonders drei wichtig

  • '&&' steht für 'und'. '&&' ist genau dann 'true', wenn beide verknüpften Wahrheitswerte 'true' sind.
  • '||' steht für 'oder'. '||' ist genau dann 'true', wenn mindestens einer der verknüpften Wahrheitswerte 'true' sind.
  • '!' steht für 'nicht'. '!' dreht einen Wahrheitswert um, macht also 'true' zu 'false' und umgekehrt.

Einige Beispiele

// genau dann wahr, wenn 'zahl' gleich 5 oder gleich 8 ist
(zahl == 5) || (zahl == 8);
// genau dann wahr, wenn 'zahl' gleich 5 und gleich 8 ist (also nie)
(zahl == 5) && (zahl == 8);
// genau dann wahr, wenn 'zahl' größer als 10 ist, aber nicht gleich 15
(zahl > 10) && !(zahl == 15);

Viele Sprachen kennen bei den logischen Operatoren die sogenannte unvollständige Auswertung.

  • a && b; // wenn a==false, wird b gar nicht mehr ausgewertet. Das ganze kann nur false werden.
  • a || b; // wenn a==true, wird b auch nicht mehr ausgewertet. Das ganze wird sowieso true.

Das ist insbesondere dann hilfreich, wenn einer der beiden verknüpften Wahrheitswerte nur umständlich oder in bestimmten Fällen auch gar nicht ermittelt werden kann. Nehmen wir folgendes Beispiel: Der User gibt den Namen einer Bilddatei an, die angezeigt werden soll. Das Programm muß prüfen, ob die Datei tatsächlich existiert, und ob es auch eine Bilddatei ist (hier beschränken wir uns auf JPEG-Dateien). Der Dateityp-Test schlägt aber dann fehl, wenn die Datei nicht existiert. Also kann diese Bedingung problematisch werden

isJPEG(dateiname) && exists(dateiname)

Besser ist die umgekehrte Formulierung

exists(dateiname) && isJPEG(dateiname)

Wenn die Datei nicht existiert, wird die erste Bedingung false, und der Dateityp-Test wird gar nicht erst ausgeführt.

Zwei Operator-Varianten können einiges an Tipparbeit sparen: Zum einen die Inkrement- und Dekrement-Operatoren

zahl = 3;
// hat die gleiche Wirkung wie zahl = zahl + 1; 'zahl' ist jetzt 4.
zahl++;
// hat die gleiche Wirkung wie zahl = zahl - 1; 'zahl' ist jetzt wieder 3
zahl--;

Diese beiden Operatoren können nur auf Integer-Variablen angewandt werden.

Außerdem gibt es für bestimmte Zuweisungen Kurzformen

zahl += 3; // entspricht zahl = zahl + 3
zahl *= 2; // entspricht zahl = zahl * 2
text += "zusatz"; // entspricht text = text + "zusatz",
// hängt also "zusatz" an den String in 'text' an

Für welche «normalen» Operatoren es solche Kurzformen gibt, hängt von der Programmiersprache ab.



Special vom: 16.01.2003
Autor dieses Specials: Henning Kockerbeck
Die weiteren Unterseiten dieses Specials:
Die reine Lehre - HTML
Stilvoll - CSS
Kleiner Grundkurs Programmieren
Jetzt wird's dynamisch - JavaScript
Die andere Seite der Dynamik - PHP
Neue Gefilde - XML
Weiterführende Links
Zurück zur Hauptseite des Specials


?>