Angular. Ferdinand Malcher
Чтение книги онлайн.
Читать онлайн книгу Angular - Ferdinand Malcher страница 23
return this.age;
}
}
Rückgabetyp void
Der Typ void sagt aus, dass eine Methode keinen Rückgabewert besitzt. Damit hat void in etwa die gleiche Bedeutung wie in vielen weiteren Programmiersprachen wie C# oder Java.
class User {
logout(): void {
// ...
}
}
Listing 4–4 Methoden ohne Rückgabewert
Getter und Setter
In der objektorientierten Programmierung kennt man das Prinzip der Getter- und Setter-Methoden. Diese Methoden haben die Aufgabe, Eigenschaften des Objekts zu lesen bzw. zu setzen. Bei Bedarf kann zusätzlich einfache Logik in den Methoden implementiert werden. ECMAScript 2015 bietet ein ähnliches Konstrukt: Die Schlüsselwörter get und set verstecken die Methoden, indem eine Eigenschaft an diese gebunden wird. Wird die Eigenschaft gelesen, so wird die dazugehörige Getter-Methode aufgerufen. Beim Befüllen der Eigenschaft mit Werten wird die dazugehörige Setter-Methode aufgerufen.
Praktisch benötigen wir Getter und Setter relativ selten, denn üblicherweise greifen wir immer direkt auf die Eigenschaften einer Klasse zu. Wollen wir allerdings beim Zugriff eine Berechnung durchführen und auf einen Methodenaufruf verzichten, so eignen sich Getter und Setter gut, wie das folgende Beispiel zeigt:
class User {
firstname: string;
lastname: string;
get fullname(): string {
return this.firstname + ' ' + this.lastname;
}
set fullname(name: string) {
const parts = name.split(' ');
this.firstname = parts[0];
this.lastname = parts[1];
}
}
const user = new User();
user.fullname = 'Erika Mustermann';
console.log(user.fullname); // Erika Mustermann
console.log(user); // { firstname: 'Erika', lastname: 'Mustermann' }
Listing 4–5 Klasse mit Getter- und Setter-Methoden
Konstruktoren
Der Konstruktor ist eine besondere Methode, die bei der Instanziierung einer Klasse aufgerufen wird. Er muss immer den Namen constructor() tragen. Der Konstruktor eignet sich dazu, Werte zu empfangen, die für die spätere Verwendung benötigt werden. Solche Werte speichern wir meist in gleichnamigen Propertys der Klasse ab.
class User {
private id: number;
constructor(id: number) {
this.id = id;
}
}
const myUser = new User(3);
Listing 4–6 Klasse mit Konstruktor
Kurzschreibweise für den Konstruktor
TypeScript bietet für diese Syntax eine Kurzschreibweise. Wenn wir in der Methodensignatur des Konstruktors für das Argument einen Zugriffsmodifizierer wie public oder private verwenden, so wird das zugehörige Property automatisch deklariert und initialisiert. Das folgende Codebeispiel führt zum selben Ergebnis wie in Listing 4–6 – ist aber wesentlich kürzer.
class User {
constructor(private id: number) {}
}
Listing 4–7 Konstruktor – vereinfachte Initialisierung von Eigenschaften
Einschränkung: Nur ein Konstruktor pro Klasse
In TypeScript ist nur ein Konstruktor pro Klasse zugelassen. Es ist also nicht möglich, wie in Java oder C# einen Konstruktor mit unterschiedlichen Signaturen anzulegen.
Vererbung
Die Funktionalität einer Klasse kann auf andere Klassen übertragen werden. Dieses Konzept kommt aus der objektorientierten Programmierung und heißt Vererbung. Mit dem Schlüsselwort extends kann eine Klasse von einer anderen erben. Am Beispiel der Klasse User wird die Spezifizierung PowerUser erstellt.
class PowerUser extends User {
constructor(id: string, power: number) {
super(id);
}
}
Listing 4–8 Vererbung
Mit super() kann der Konstruktor der Basisklasse ausgeführt werden. Wird eine Klasse von einer anderen abgeleitet, so können auch Methoden der Basisklasse überschrieben werden. Wird eine abgeleitete Klasse instanziiert, so erhält man von außen auch Zugriff auf Eigenschaften und Methoden der übergeordneten Klassen (sofern diese nicht als private oder protected deklariert wurden).
4.5Interfaces
Format eines Konstrukts definieren
Um die Typisierung in unserem Programmcode konsequent umzusetzen, stellt TypeScript sogenannte Interfaces bereit. Interfaces dienen dazu, die Struktur eines Objekts grundsätzlich zu definieren. Wir können explizit bestimmen, welche Teile enthalten sein müssen und welche Typen sie besitzen sollen. Optionale Eigenschaften werden durch ein Fragezeichen-Symbol gekennzeichnet. Im nachfolgenden Beispiel sehen wir, dass das Interface die Angabe eines Vornamens und Nachnamens erfordert.