jesteś tutaj
329
Typy, równość, konwersje i cały ten jazz
Mamy numer telefonu zapisany
w formacie:
Masz napisać kod, który go
zaakceptuje lub odrzuci. Aby numer
został zaakceptowany, musi się
składać z siedmiu cyfr od 0 do 9,
a w środku musi mieć minus.
“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) !== IJ-ij) {
return false;
}
} else if (isNaN(phoneNumber.charAt(i))) {
return false;
}
}
return true;
}
Wawrzyniec używa właściwości length,
by sprawdzić długość łańcucha.
Korzysta także z metody charAt, aby
sprawdzić poszczególne znaki łańcucha.
Najpierw upewnia się,
że znak o indeksie 3
jest minusem.
Specyfikacja
0Y^OV+O\YX
Następnie sprawdza, czy znaki
o indeksach do 0 do 2 i od 4 do 7
są cyframi.
Wojna o fotel
(albo jak dobra znajomość typów może zmienić Twoje życie)
Dawno temu, w firmie zajmującej się tworzeniem oprogramowania dwóch
programistów dostało specyfikację i kazano im „napisać to”. Naprawdę
Denerwujący Kierownik Projektu zmusił obu programistów do rywalizacji,
obiecując, że ten, który wykona zadanie jako pierwszy, otrzyma jeden z tych
fantastycznych foteli Aeron™, jakich używają wszyscy programiści w Dolinie
Krzemowej. Zarówno Bartek, hardcorowy haker skryptowy, jak i Wawrzyniec,
dyplomowany programista, wiedzą, że zadanie będzie proste jak przysłowiowa
kaszka z mleczkiem.
Wawrzyniec, siedząc w swoim boksie, pomyślał: „Co ten kod musi
robić?
Musi się upewnić, że łańcuch będzie dostatecznie długi, musi się upewnić,
że środkowym znakiem będzie minus oraz musi się upewnić, że wszystkimi
pozostałymi znakami są cyfry. Mogę w tym celu użyć właściwości
length
.
Wiem także, że poszczególne znaki mogę pobierać przy użyciu metody
charAt
.
W międzyczasie Bartek, siedząc w swoim boksie i popijając kawę, pomyślał
tak: „Co ten kod musi robić?”. A potem pomyślał jeszcze: „Łańcuch znaków
jest obiektem i ma dużo metod, z których mogę skorzystać, by ułatwić sobie
weryfikację numeru telefonu. Przejrzę je i błyskawicznie zaimplementuję ten
kod. W końcu obiekt to tylko obiekt”. Czytaj dalej, aby przekonać się jak
Bartek i Wawa napisali swoje programy, no i oczywiście po to, by znaleźć
odpowiedź na intrygujące zapewne pytanie,
który z nich wygrał fotel Aeron?
W boksie Wawy
Wawa zaczął pisać kod, wykorzystując metody obiektów łańcuchów znaków.
Faktycznie, napisał go błyskawicznie.
330
Rozdział 7.
Stosowanie łańcuchów znaków i operacje na nich
W boksie Bartka
Bartek napisał kod sprawdzający dwie liczby i znak minusa.
Chwileczkę! Wprowadzono zmiany w specyfikacji
„No dobrze, technicznie rzecz biorąc, Wawa, to ty byłeś pierwszy, bo Bartek
szukał w dokumentacji, jak działają te jego wszystkie metody — powiedział
kierownik projektu — ale w międzyczasie dodaliśmy do specyfikacji tylko jedną
malutką zmianę. Nie będzie stanowiła najmniejszego problemu dla takich
zdolnych programistów jak wy”.
„Gdybym dostał choćby dziesięć groszy za każdym razem, kiedy
to słyszę,
byłbym milionerem” — pomyślał Wawrzyniec, wiedząc, że zmiany specyfikacji,
które nie nastręczają problemów, są czystą fikcją. „Mimo to Bartek wygląda
na dziwnie spokojnego. O co chodzi?” — Wawrzyniec wciąż wierzył swojej
opinii, że rozwiązanie Bartka, choć ciekawe, jednak nie zda egzaminu. Był
przekonany, że w następnej rundzie wygra i dostarczy kod jako pierwszy.
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;
}
Bartek zaczyna podobnie jak
Wawrzyniec.
Jednak korzysta ze swojej znajomości
metod obiektów łańcuchów znaków.
Używa metody substring, by utworzyć
łańcuch zawierający trzy pierwsze
znaki początkowego łańcucha...
...oraz drugiego łańcucha zawierającego
znaki o indeksach od 4 do końca łańcucha
początkowego.
Następnie w jednej
instrukcji warunkowej
sprawdza wszystkie
warunki określające, czy
numer jest prawidłowy.
Co ciekawe, świadomie bądź nie bazuje tu na
konwersji typów, by zamienić łańcuch na liczbę,
a następnie, używając funkcji isNaN, sprawdza,
czy to, co uzyskał, jest liczbą. Chytrze!
Mamy numer telefonu zapisany
w formacie:
Masz napisać kod, który go
zaakceptuje lub odrzuci. Aby numer
został zaakceptowany, musi się
składać z siedmiu cyfr od 0 do 9,
a opcjonalnie może zawierać minus.
“123-4567”
To zostało dodane do specyfikacji.
WYSIL
SZARE KOMÓRKI
Chwileczkę… Czy możesz wskazać jakieś
błędy, które mogą wynikać ze sposobu
użycia funkcji isNaN zastosowanego
przez Bartka?
Get Programowanie w JavaScript Rusz głową! 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.