MINT lernen

Statische und dynamische Typen

Zehn interaktive Übungen zu Datentypen, statischer und dynamischer Typisierung und impliziter Umwandlung — von AFB I bis AFB III.

Dein Fortschritt:
0 / 0 Aufgaben
1

Übungsaufgaben

Zehn interaktive Übungen zum Klicken, Ziehen und Knobeln — von AFB I bis AFB III. Jede Übung gibt dir sofort Rückmeldung, und nach dem Prüfen erklärt eine kurze Notiz die Lösung.

A1
Welcher Datentyp?
AFB I

Ordne jeden Wert seinem Datentyp zu.

Ziehe jede Karte in den passenden Korb — oder wähle sie mit Enter aus und drücke dann die Ziffer des Korbs (0 legt sie zurück).
1int (ganze Zahl)
2float/double (Kommazahl)
3String (Text)
4boolean (Wahrheitswert)
Anführungszeichen machen jeden Wert zum String — auch "42" und "false". 2.0 ist wegen des Punkts eine Kommazahl, obwohl der Wert ganzzahlig ist. true (Java, JavaScript) und False (Python) sind Wahrheitswerte.
A2
Stimmt's? — Fünferserie
AFB I

Fünf Behauptungen über statische und dynamische Typisierung.

5 Aussagen nacheinander. Eine falsche Einschätzung reicht — dann startest du die Serie mit „Neue Runde“ neu.
Aussage 1 von 5

Statisch: Typ an der Variable, Prüfung vor dem Lauf. Dynamisch: Typ am Wert, Prüfung während des Laufs. Beide Arten haben Datentypen.
A3
Steht der Typ vorher fest?
AFB I

In welchen Zeilen steht der Typ der Variable alter schon vor dem Programmstart fest?

Mehrere Antworten sind richtig. Markiere alle zutreffenden und klicke dann auf „Prüfen“.
Achtung bei let alter = 15;: In Rust ist das statische Typisierung mit Typinferenz — der Compiler legt den Typ als ganze Zahl fest. In JavaScript ist dieselbe Zeile dynamisch typisiert. Entscheidend ist die Sprache, nicht das Aussehen der Zeile. Auch Go leitet mit := den Typ ab und prüft ihn beim Kompilieren.
A4
Gleiche Zeichen, andere Ergebnisse
AFB II

Verbinde jeden Ausdruck mit seinem Ergebnis.

A5
Mix: Typen und Übersetzer
AFB II

Verbinde Typisierung mit dem, was du in 3.1.2 über Compiler und Interpreter gelernt hast. Ein Wort bleibt übrig.

Wort anklicken, dann Lücke anklicken (oder umgekehrt) — mit Tab und Enter geht es genauso. Ein Klick auf eine gefüllte Lücke legt das Wort zurück.

Ein Java-Programm wird vor dem Start vom übersetzt. Dabei prüft er auch alle — passt ein Wert nicht zur Variable, startet das Programm gar nicht. Deshalb heißt Java typisiert. Ein Python-Programm führt der Anweisung für Anweisung aus; ein Typfehler wird erst zur gemeldet, wenn die Zeile an der Reihe ist.

„Assembler“ bleibt übrig: Assembler kennt keine Datentypen wie int oder String — dort gibt es nur Bitmuster in Registern und Speicherzellen.
A6
Rechnen mit Text
AFB II

Was gibt diese JavaScript-Zeile aus?

JavaScript
console.log("4" * 2 + "1");
Rechne selbst und trage das Ergebnis ein — Enter prüft direkt.
Trick: Die Ausgabe ist 81 — nicht 9. Von links: "4" * 2 wandelt den Text in eine Zahl um, weil * nur für Zahlen passt: 8. Dann 8 + "1": Bei + mit einem String verkettet JavaScript, es entsteht der Text "81".
A7
Ohne TypeError ans Ziel
AFB II

Das Python-Programm soll das Alter abfragen und ausgeben, wie alt man nächstes Jahr ist (z. B. „Nächstes Jahr bist du 15“). Bringe die Zeilen in eine Reihenfolge, in der kein TypeError auftritt.

Ziehe die Karten in die richtige Reihenfolge — mit der Tastatur: ↑/↓ verschiebt, Shift+↑/↓ wechselt nur den Fokus.
1alter = alter + 1
2print(text)
3eingabe = input("Alter? ")
4text = "Nächstes Jahr bist du " + str(alter)
5alter = int(eingabe)
input liefert immer einen String. Vor dem Rechnen muss int() ihn in eine Zahl umwandeln, vor dem Verketten macht str() wieder Text daraus. Stünde alter + 1 vor der Umwandlung, gäbe es einen TypeError.
A8
Typen im Wandel
AFB III

In Python kann eine Umwandlung den Typ eines Werts ändern. Verfolge das Programm.

Python
a = 7
b = a / 2
c = str(a) * 3
d = int(c) + 1
e = len(c) + b
Rechne die Kette Schritt für Schritt: Erst wenn ein Schritt stimmt, wird der nächste freigeschaltet. Enter prüft.
  1. Wert von b
  2. Wert von d
  3. Wert von e
  4. Wie viele verschiedene Datentypen kommen in a bis e vor?
/ liefert in Python immer eine Kommazahl: b = 3,5 (float). str(7) * 3 ergibt den Text "777", int("777") + 1 = 778. len("777") = 3, plus 3,5 ergibt 6,5. Typen: int (a, d), float (b, e), str (c) — also drei.
A9
Was meldet der Java-Compiler?
AFB III

Die Zeilen stehen im main-Teil eines Java-Programms. Drei Zeilen lehnt der Compiler mit einem Typfehler ab.

Klicke genau die fehlerhaften Zeilen an — die richtigen musst du stehen lassen.
anzahl * preis ist erlaubt: int wird dabei ohne Verlust zu double. name + anzahl ist String-Verkettung und ergibt "Mia3". Die drei Fehler findet der Compiler vor dem Start — deshalb läuft das Programm erst, wenn alle behoben sind.
A10
Eine Variable, viele Umwandlungen
AFB III

Welchen Wert gibt das JavaScript-Programm am Ende aus?

JavaScript
let p = "20";
p = p - 5;
p = p + 5;
p = p + "5";
p = p - 5;
console.log(p);
Schiebe den Regler auf deine Antwort — Pfeiltasten bewegen ihn feiner. Nach dem Prüfen siehst du den Trefferbereich.
0 300
"20" - 5 = 15 (Zahl, weil - umwandelt). 15 + 5 = 20 (beides Zahlen). 20 + "5" = "205" (Verkettung, jetzt ein String). "205" - 5 = 200 (wieder eine Zahl). Der Typ von p wechselt dreimal — bei statischer Typisierung wäre das unmöglich.