12.1.8 Datentypen


Bezug zum Kerncurriculum:
Ich kann zwischen primitiven Datentypen und Objektreferenzen unterscheiden.
Ich verwende geeignete Variablentypen zur Speicherung von Werten.


In JavaScript werden Variablen wie folgt angelegt:

let zahl = 10;
let name = 'Bob';
let status = true;

JavaScript ist eine untypisierte Programmiersprache, denn beim Anlegen einer Variable wird nicht festgelegt, welcher Typ von Daten in der Variablen gespeichert wird.

In diesem Kapitel werden Variablentypen gebaut, die nur erlaubte Daten speichern. Dazu wird eine geeignete Objektschablone entworfen und mit Operationen ausgestattet, so dass auch geprüft werden kann, ob der richtige Datentyp gespeichert wird. Es soll auch zurückgemeldet werden können, ob die richtige Daten übergeben wurden.

Eine typisierte Variable ist ein Objekt, in welchem neben dem eigentlichen Wert auch Operationen zur Entgegennahme des Werts, zur Prüfung und zur Fehlerbehandlung enthalten sein können.

Eine ganze Zahl ist eine Zahl ohne Stellen hinter dem Komma. Sie kann positiv und negativ sein. Für den Datentyp "datentypGanzzahl" wird eine Objektschablone festgelegt. An den Constructor wird ein Wert übergeben und in der internen Variablen "wert" gespeichert. Das Schlüsselwort "this." muss dem Variablennamen vorangestellt werden, da hier eine Objektschablone angelegt wird.

class datentypGanzzahl {
  constructor(value) {
    this.wert = value;
  }
}

Der Datentyp datentypGanzzahl soll prüfen, ob der übergebene Wert tatsächlich eine ganze Zahl ist. Dazu wird die Operation setGanzzahl(value) in die Objektschablone eingebaut:

class datentypGanzzahl {
  constructor(value) {
    this.wert = null;
    this.setGanzzahl(value);
  }
  setGanzzahl(value) {
    if (Number.isInteger(value)) {
      this.wert = value;
    } else {
      this.wert = null;
    }
  }
}

Mit Number.isInteger(value) wird geprüft, ob der übergebene Wert eine ganzeZahl ist:

  • Wenn ja, dann wird der übergebene Wert in der internen Variable this.wert gespeichert.
  • Wenn nein, dann wird in der internen Variablen null gespeichert.

Da der Datentyp frei gestaltet werden kann, werden interne Variablen für den Erfolg oder Misserfolg der Prüfung und eine Rückmeldung für die Ausgabe an den Benutzer in der Objektschablone gespeichert. Zusätzlich werden noch Operationen für die Rückgabe der gespeicherten Werte festgelegt. Damit sieht der datentypGanzzahl wie folgt aus:

class datentypGanzzahl {
  constructor(value) {
    this.wert = null;
    this.erfolg = false;
    this.meldung = '';
    this.setGanzzahl(value);
  }
  setGanzzahl(value) {
    if (Number.isInteger(value)) {
      this.wert = value;
      this.erfolg = true;
      this.meldung = 'Erfolg: Zahl ist eine Ganzzahl!';
    } else {
      this.wert = null;
      this.erfolg = false;
      this.meldung = 'Misserfolg: Übergebener Wert ist keine Ganzzahl!';
    }
  }
  getGanzzahl() { return this.wert; }
  getMeldung() { return this.meldung; }
  getStatus() { return this.erfolg; }
}

Mit folgender Anweisung wird eine neue Variable vom Typ datentypGanzzahl angelegt:

let zahl1 = new datentypGanzzahl(34);

Der Wert von "zahl1" kann mit folgender Anweisung an eine andere Variable übergeben werden:

let zahl2 = zahl1.getGanzzahl();

In der Konsole kann mit folgender Anweisung eine Rückmeldung ausgegeben werden:

console.log(zahl1.getStatus(), zahl1.getMeldung(), zahl1.getGanzzahl()); 

Damit sieht das gesamte Programm wie folgt aus:

class datentypGanzzahl {
  constructor(value) {
    this.wert = null;
    this.erfolg = false;
    this.meldung = '';
    this.setGanzzahl(value);
  }
  setGanzzahl(value) {
    if (Number.isInteger(value)) {
      this.wert = value;
      this.erfolg = true;
      this.meldung = 'Erfolg: Zahl ist eine Ganzzahl!';
    } else {
      this.wert = null;
      this.erfolg = false;
      this.meldung = 'Misserfolg: Übergebener Wert ist keine Ganzzahl!';
    }
  }
  getGanzzahl() { return this.wert; }
  getMeldung() { return this.meldung; }
  getStatus() { return this.erfolg; }
}

let zahl1 = new datentypGanzzahl(34);
console.log(zahl1.getStatus(), zahl1.getMeldung(), zahl1.getGanzzahl()); 

let zahl2 = zahl1.getGanzzahl();
console.log(zahl2);

zahl1.setGanzzahl(101.3);
console.log(zahl1.getStatus(), zahl1.getMeldung(), zahl1.getGanzzahl()); 

In einem neuen Fenster starten: Datentyp Ganzzahl

Eine Dezimalzahl ist eine Zahl, die Ziffern ungleich Null hinter dem Komma haben kann. Mit isNaN(value) kann geprüft werden, ob value keine Zahl ist. "isNaN" steht für "is Not a Number".

Enwickeln Sie den Datentyp "datentypDezimalzahl" mit Hilfe der Vorlage "datentypGanzzahl", in welchem Dezimalzahlen gespeichert werden können.

Eine Zeichenfolge wird "String" genannt und enthält beliebige Zeichen. Eine Zeichenfolge wird immer in Anführungszeichen gesetzt. Mit typeof value === "string" kann geprüft werden, ob value eine Zeichenfolge ist.

Enwickeln Sie den Datentyp "datentypString" mit Hilfe der Vorlage "datentypGanzzahl", in welchem Zeichenfolgen gespeichert werden können.

Ein Wahrheitswert wird "Boolean" genannt und enthält entweder den Wert true (wahr) oder den Wert false (falsch). Mit typeof value === "boolean" kann geprüft werden, ob value ein Wahrheitswert ist.

Enwickeln Sie den Datentyp "datentypWahrheitswert" mit Hilfe der Vorlage "datentypGanzzahl", in welchem die beiden Zustände "true" und "false" gespeichert werden können.