In diesem Kurs führe ich dich in kleinen Schritten in die Grundlagen der Programmierung ein. Wir nutzen dazu die Anfängerfreundliche Hochsprache "Processing" (ein Java Dialekt). Das hier Erlernte ist aber auf alle Hochsprachen und in weiten Teilen auch auf Scriptsprachen übertragbar.
Was sind Variablen?
Mit Hilfe von Variablen können wir uns Daten merken bzw. im Programm speichern. Variablen werden im Hauptspeicher des Rechners gespeichert, sie werden also nach Beendigung des Programms gelöscht und bleiben somit nicht dauerhaft erhalten.
Im unteren Beispiel merken wir uns eine Zahl, z.b. um sie anschließend für eine Rechenaufgabe zu nutzen. Variablen in Hochsprachen werden immer unter Angabe des Datentyps deklariert, im Beispiel wird der Typ "int" verwendet, für Integer bzw. Ganzzahl. Die erstmalige Angabe einer neuen Variable im Programm nennt man "Deklaration", das anschließende Zuweisen eines Wertes heißt "Initialisierung". Deklaration und Initialisierung können getrennt voneinander oder in einem Zug hintereinander erfolgen.
Warum sind da auch ganze Sätze und was bedeutet das Semikolon?
Im oberen Quellcode sind auch ganz normal geschriebene Sätze enthalten. Diese sind mit // als Kommentar gekennzeichnet und werden deshalb vom Compiler ignoriert. Wären die Sätze nicht auf diese Weise gekennzeichnet, würde es beim Kompilieren des Codes zu einem Fehler kommen, denn die Syntax (die Schreibweise) entspricht nicht der Art, wie Programmcode in Processing bzw. Java geschrieben wird.
Sicher ist dir auch schon aufgefallen, dass jede Anweisung in Processing bzw. Java mit einem ; abgeschlossen wird. Das ist auch in vielen anderen Sprachen so, aber nicht in jeder Programmiersprache. In JavaScript zum Beispiel können Anweisungen auch ohne ein Semikolon am Ende stehen.
Variablen verwenden
Da wir Variablen ja nicht einfach ohne Grund anlegen, verwenden wir sie im nächsten Schritt. Nachfolgend werden 2 Ganzahlen zunächst in Variablen gespeichert und dann für eine Addition verwendet. Das Ergebnis wird wiederum in einer Variable gespeichert.
Werbung (Affiliate - ich bekomme eine kleine Provision, dein Preis ändert sich nicht)
Ergebnisse der Berechnung in der Konsole ausgeben
Entwicklungsumgebungen, so auch die Processing IDE, verfügen über eine Art Textausgabe um Informationen und Daten während des Programmablaufs für den Programmierer auszugeben. Diese Textausgabe nennt sich Konsole. In Processing können wir mit den Anweisungen print und println in die Konsole schreiben.
In der IDE wird der Wert 15, welcher in der Variable d gespeichert ist, nun mehrmals ausgegeben. Da in Zeile 5 zunächst nur print() - also die Ausgabe ohne Zeilenumbruch - verwendet wird, werden die ersten beide Zahlen direkt hintereinander gedruckt. Nach der ersten Zahl erfolgt ein Umbruch, da diese Zahl mit println (für print line) ausgegeben wurde.
Was sind Datentypen?
Wir haben bereits den Datentypen int kennengelernt, dieser steht für eine Ganzzahl, also eine Zahl ohne Komma. Der Datentyp bedeutet aber auch, dass die darin gespeicherte Zahl eine bestimmten Wert einhalten muss. Nicht jede Zahl kann einfach als int gespeichert werden.
Ein Datentyp bestimmt also welche Art von Daten in einer Variable gespeichert werden können. Ausser dem Datentypen int für Ganzzahlen zwischen -2 147 483 648 und 2 147 483 647, gibt es noch weitere Datentypen. Man unterscheidet dabei grundsätzlich zwischen primitiven und komplexen Datentypen.
Die Nachfolgende Auflistung zeigt dir die 8 primitiven Datentypen:
Datentyp | Beschreibung | Speicherplatz | Wertebereich |
---|---|---|---|
byte | Ganzzahl | 1 Byte (8 Bit) | -128 bis 127 |
short | Ganzzahl | 2 Byte (16 Bit) | -32.768 bis 32.767 |
int | Ganzzahl | 4 Byte (32 Bit) | -2.147.483.648 bis 2.147.483.647 |
long | Ganzzahl | 8 Byte (64 Bit) | -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 |
float | Fließkommazahl | 4 Byte (32 Bit) | Ca. ±3.4E38 (7 Stellen Genauigkeit) |
double | Fließkommazahl | 8 Byte (64 Bit) | Ca. ±1.7E308 (15 Stellen Genauigkeit) |
char | Einzelnes Zeichen | 2 Byte (16 Bit) | '\u0000' (0) bis '\uffff' (65.535) |
boolean | Wahrheitswert | 1 Bit (abhängig von der JVM) | true oder false |
Um zu verstehen, warum die verschiedenen Datentyp unterschiedlich viel Speicherplatz benötigen, müssen wir uns kurz ansehen, wie Computer überhaupt Daten speichern.
Werbung (Affiliate - ich bekomme eine kleine Provision, dein Preis ändert sich nicht)
Kleiner Exkurs: Wie werden Daten überhaupt im Computer verarbeitet?
Dieses Thema wird in diesem Kurs nur grundlegend behandelt, Vertiefung findest Du z.b. auf Wikipedia: Dualsystem
Zunächst muss man wissen, dass die Schaltkreise eines Computer nur 2 Zustände kennen: Strom fließ oder nicht. Ein Computer nutzt zur Speicherung von Daten technisch gesehen grundsätzlich nur diese zwei Zustände an oder aus.
Ein Computer arbeitet also digital: das bedeutet etwa „in Stufen erfolgend, in Ziffern darstellend“ bzw. „zahlenmäßig“.
Mit Hilfe der zwei Zustände an oder aus bzw. 0 und 1 werden also einfach gesagt jegliche Daten dargestellt und gespeichert. Auch Buchstaben und andere Zeichen werden so dargestellt, denn sie werden von Zahlenwerten repräsentiert.
Um Zahlenwerte darzustellen, kennen und verwenden die meisten Menschen das Zehnersystem. Aber auch andere Zahlensysteme können Zahlenwerte darstellen.
Es gibt aber auch noch andere Zahlensysteme, die im Grund ganz genauso funktionieren, der Unterschied ist einzig die Basis und damit die Anzahl der Nennwerte: im Dualsystem 2 Nennwerte, im Dezimalsystem 10 Nennwerte, im Hexadezimalsystem 16 Nennwerte und im Octalsystem 8 Nennwerte.
Dezimalsystem | Duales System (Binär) | Hexadezimalsystem | Oktalsystem |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 8 | 10 |
9 | 1001 | 9 | 11 |
10 | 1010 | A | 12 |
11 | 1011 | B | 13 |
12 | 1100 | C | 14 |
13 | 1101 | D | 15 |
14 | 1110 | UND | 16 |
15 | 1111 | F | 17 |
16 | 10000 | 10 | 20 |
17 | 10001 | 11 | 21 |
18 | 10010 | 12 | 22 |
19 | 10011 | 13 | 23 |
20 | 10100 | 14 | 24 |
21 | 10101 | 15 | 25 |
22 | 10110 | 16 | 26 |
23 | 10111 | 17 | 27 |
Ein Computer nutzt also das Dualsystem oder Binärsystem um Zahlen zu speichern.
Und da kommt wieder der unterschiedliche Bedarf an Speicherplatz für die verschiedenen Datentypen ins Spiel. Umso größer der gespeicherte Wert, desto mehr Stellen werden benötigt, um die Dualzahl darzustellen. Dabei steht jede Stelle für 1 Bit, 8 Bit werden als 1 Byte bezeichnet.
Daraus ergibt sich, dass mit Hilfe von einem Byte, Zahlen von 0 bis 255 dargestellt werden können. Das sind also 256 verschiedene Zahlenwerte. Die Dualzahl für 255 ist nämlich 11111111, also 8 Stellen = 1 Byte bzw. 8 Bit.
Ein Vergleich mit der obigen Tabelle der 8 primitiven Datentypen in Processing bzw. Java zeigt allerdings, das der Datentyp Byte Zahlen von -128 bis 127 speichern kann. Das liegt daran, dass sich der Wertebereich auf den negativen und positiven Bereich aufteilt. Man bezeichnet dies als "signed", mit Vorzeichen.
Unterschiedliche Datentypen verwenden
Der nachfolgende Code zeigt die Deklaration von Variablen der acht primitiven Datentypen.
Der Datentyp String
Um Zeichenketten darstellen zu können gibt es den Typen "String". Strings sind endliche viele Zeichen (Buchstaben, Steuerzeichen, Sonderzeichen, Ziffern) aus einem definierten Zeichensatz.
String ist kein primitiver Datentyp, sondern eine Klasse. Eine Variable vom Typen String verweist daher immer ein Objekt der Klasse String. Dazu später mehr im Abschnitt "Grundlagen der Objektorientierten Programmierung" dieses Kurs.
Da Strings Klassen sind, wird der Typ String in Java groß geschrieben.
Verbinden von Strings und Zahlen
Zeichenketten können mit anderen Zeichenketten oder Zahlen zusammengefügt werden. Dies nennt man Konkatenation, dies bedeutet soviel wie "aneinanderhängen". Dabei werden Zeichenketten durch das "+" zusammengefügt.
Aufgaben und Quizfragen
Wie geht es im nächste Teil weiter?
Wir haben einige Datentypen kennengelernt und wie man sie verwendet. Manchmal ergibt sich im Laufe des Programms die Notwendigkeit eine Variable eines bestimmten Typs in einen anderen Typen umzuwandeln. Darum geht es in der nächsten Folge des Tutorials.