Sie sind hier 301
Typen, Gleichheit, Umwandlung und der ganze Rest
Nehmen Sie eine Telefonnummer in
folgendem Format:
und schreiben Sie eine Funktion,
die ihre Gültigkeit überprüft. Um
akzeptiert zu werden, sollte die
Nummer aus 7 Ziffern von 0 bis 9
bestehen und nach der dritten Zahl
einen Bindestrich besitzen.
»123-4567«
function validate(phoneNumber) {
if (phoneNumber.length !== 8) {
return false;
}
for (var i = 0; i < phoneNumber.length; i++) {
if (i === 3) {
if (phoneNumber.charAt(i) !== '-') {
return false;
}
} else if (isNaN(phoneNumber.charAt(i))) {
return false;
}
}
return true;
}
Larry hat die length-Eigenschaft des
String-Objekts benutzt, um die Anzahl
der enthaltenen Zeichen zu ermitteln.
Mithilfe der charAt-Methode können die
einzelnen Zeichen im String untersucht werden.
Zuerst wird überprüft, ob das Zeichen
mit Index 3 ein Bindestrich ist.
Krieg der Stühle
(oder: Wie das Wissen um Datentypen Ihr Leben verändern kann)
Es war einmal eine Softwareschmiede. Zwei Programmierer erhiel-
ten die gleiche Spezifikation und sollten »das mal eben bauen«. Der
Wirklich Nervige Projektmanager zwang beide zu einem Wettbewerb
und versprach demjenigen, der als Erster abliefert, einen coolen
Aeron™-Stuhl, wie ihn die ganzen Jungs aus dem Silicon Valley
haben. Brad, der Hardcore-Hacker, und Larry (frisch von der Uni)
wussten: Die Aufgabe wird ein Spaziergang.
Larry sitzt an seinem Arbeitsplatz und überlegt: »Was muss dieser
Code tun? Er muss sicherstellen, dass der String die richtige Länge
hat, das vierte Zeichen ein Bindestrich ist und alle übrigen Zeichen
Zahlen sind. Dann kann ich die length-Eigenschaft verwenden und
mit der charAt-Methode auf die einzelnen Zeichen zugreifen.«
Brad nimmt erst mal einen Schluck Kaffee und denkt: »Welche Din-
ge muss der Code tun? Ein String ist ein Objekt mit vielen Metho-
den, die ich zur Validierung der Telefonnummer benutzen kann. Nur
kurz noch mal nachlesen, dann ist die Sache in null Komma nichts
umgesetzt. Schließlich ist ein Objekt auch nur ein Objekt.« Lesen Sie
weiter, um zu sehen, wie Brad und Larry ihre Programme geschrie-
ben haben und wer am Ende den Aeron bekam.
Die Spezifikation
Der Stuhl, um
den es geht
Larry hat sich entschieden, den Code anhand von String-
Methoden umzusetzen. Das Programm war schnell fertig:
An Larrys Arbeitsplatz
Und dann überprüft er, ob die
Zeichen null bis zwei und vier bis
sechs Zahlen sind.
302 Kapitel 7
Strings benutzen und manipulieren
Brads Code testet auf zwei Zahlen und einen
Bindestrich:
function validate(phoneNumber) {
if (phoneNumber.length !== 8) {
return false;
}
var first = phoneNumber.substring(0,3);
var second = phoneNumber.substring(4);
if (phoneNumber.charAt(3) !== "-" || isNaN(first) || isNaN(second)) {
return false;
}
return true;
}
Brad beginnt genau wie Larry ...
Aber er benutzt sein Wissen
um die String-Methoden.
Anhand der substring-Methode
erzeugt er einen String, der die
Zeichen 0 bis 3 enthält.
Das Gleiche macht er von Zeichen
4 bis zum Ende des Strings.
Dann überprüft er alle
Bedingungen für die
korrekte Telefonnummer
in einer Anweisung.
.
Nehmen Sie eine Telefonnummer in
folgendem Format:
und schreiben Sie den Code, um sie
zu akzeptieren oder abzulehnen.
Um angenommen zu werden, sollte
die Nummer aus 7 Ziffern von 0 bis
9 bestehen und in der Mitte einen
optionalen Bindestrich besitzen.
»123-4567«
An Brads Arbeitsplatz
Die Spezifikation wurde
erweitert
Einen Moment! Die Spezifikation hat sich verändert.
»Okay, Larry, technisch gesehen hast du gewonnen, weil Brad zuerst die nöti-
gen Methoden nachschlagen musste«, sagte der Manager. »Wir mussten die
Spezifikation aber noch ein wenig erweitern. Für euch Superprogrammierer
sollte das ja kein Problem sein.«
Larry dachte nur: »Ich wünschte, ich bekäme immer, wenn dieser Satz
kommt, einen Euro«, denn er wusste, dass es Spezifikationsänderungen ohne
Probleme nicht gab. »Hmm, trotzdem wirkt Brad ziemlich gelassen. Warum
nur?« Larry blieb dennoch bei seiner Meinung, dass Brads Vorgehen zwar
ausgefallen, aber trotzdem nur Angeberei wäre. Und dass er den Code auch
diesmal schneller fertig haben und erneut gewinnen würde.
Ob er es weiß oder nicht, er verlässt sich hier
auf einige Typumwandlungen, um einen String in
eine Zahl zu konvertieren und dann mit isNaN zu
überprüfen, ob es sich um eine Zahl handelt. Schlau!
Gibt es mögliche
Bugs, die durch Brads
Verwendung von isNaN
auftreten könnten?
Kopf-
nuss

Get JavaScript-Programmierung von Kopf bis Fuß now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.