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.
|