Standardwerte
Oft hat ein fehlendes Argument einen offensichtlichen Wert. Wenn Kira ohne etwas Besonderes angreift, schlägt sie mit der Kraft 10 zu. Bei einem optionalen Parameter müsstest du selbst auf undefined prüfen. Ein Standardwert ist kürzer, und du kennst ihn aus JavaScript:
function angreifen(monster: string, kraft: number = 10): string {
return `Kira trifft den ${monster} mit Kraft ${kraft}`;
}
console.log(angreifen("Goblin"));
console.log(angreifen("Troll", 25));Das gibt aus:
Kira trifft den Goblin mit Kraft 10
Kira trifft den Troll mit Kraft 25Ein Parameter mit Standardwert ist ebenfalls optional: Der Aufruf darf ihn weglassen. Anders als bei kraft?: number ist er innerhalb der Funktion aber nie undefined. Fehlt das Argument, ist kraft gleich 10. Sein Typ innerhalb der Funktion ist also einfach number, und du kannst ohne jede Prüfung damit rechnen.
Den Typ kannst du sogar weglassen. Aus kraft = 10 schließt TypeScript, dass kraft eine Zahl ist, genau wie bei let kraft = 10;. Beide Formen siehst du in echtem Code. Die Aufrufe werden in beiden Fällen geprüft:
function angreifen(monster: string, kraft = 10): string {
return `Kira trifft den ${monster} mit Kraft ${kraft}`;
}
console.log(angreifen("Wolf", "stark"));main.ts(5,31): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.Und der Standardwert selbst muss zum Typ passen: kraft: number = "10" ergibt Type 'string' is not assignable to type 'number'.
Was wählst du? Einen Standardwert, wenn es einen Wert gibt, der zu den meisten Aufrufen passt. Einen optionalen Parameter mit ?, wenn ein fehlender Wert etwas anderes bedeutet, wie bei dem Gast ohne Titel in der vorigen Übung, der mit einem anderen Text begrüßt wird.
Typische Fehler:
- Ein Fragezeichen und ein Standardwert zusammen:
kraft?: number = 10ergibtParameter cannot have question mark and initializer.Der Standardwert macht den Parameter schon optional, lass das?also weg. - Parameter mit Standardwerten vor den erforderlichen. Bei
function angreifen(kraft = 10, monster: string)ergibt der Aufrufangreifen("Goblin")den FehlerExpected 2 arguments, but got 1.Argumente gehen der Reihe nach in die Parameter, setze die Parameter mit Standardwerten also ans Ende.
So schreibst du es:
Anweisungen
- 1
Die meisten Gäste trinken Wasser zum Essen. Gib dem Parameter
getraenkden Standardwert"Wasser". - 2
Die meisten Gäste bestellen auch nur eine Portion. Gib
anzahlden Standardwert1. Gib dann am Ende des Programmsbestellen("Brot")aus. Das Programm gibt aus:1x Pilzsuppe mit Wasser 2x Wildschweinbraten mit Apfelwein 1x Brot mit Wasser