Elementy j zyka JavaScript
Transkrypt
Elementy j zyka JavaScript
Do dyspozycji mamy cztery typy danych: liczby, warto ci logiczne, ła cuchy znaków, warto NULL. Słu y do reprezentowania wszelkiego rodzaju liczb. Odmiennie ni w innych j zykach programowania, jak np. C++, gdzie do reprezentacji liczb słu y co najmniej kilka typów danych, tutaj u ywamy tylko jednego — liczbowego. Liczby całkowite — zarówno dodatnie, jak i ujemne — mo emy przedstawi w postaci dziesi tnej, szesnastkowej lub ósemkowej. System dziesi tny jest nam wszystkim znany; u ywamy w nim dziesi ciu cyfr. Przypomnijmy jednak pokrótce podstawy dwóch pozostałych systemów. W systemie szesnastkowym podstaw jest oczywi cie 16. Zatem do zapisu liczb w tym systemie nie wystarczy nam cyfr arabskich (0 – 9), których jest tylko dziesi . U ywamy wi c dodatkowo sze ciu liter: od A do F. Od zera do dziewi ciu liczymy identycznie jak w znanym nam systemie dziesi tnym. Dalej jednak zamiast liczby dziesi pojawia si litera A, potem B i tak dalej do F (co odpowiada 15 w systemie dziesi tnym). Po F nast puje 10. W systemie ósemkowym natomiast, skoro podstaw jest liczba 8, u ywamy 8 cyfr — od 0 do 7. Po liczbie 7 nast puje 10, potem 11 i tak dalej do 17, po której nast puje 20. Odpowiadaj ce sobie liczby w systemie dziesi tnym, szesnastkowym i ósemkowym przedstawia tabela 3.1. Reprezentacja liczb w ró nych systemach 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 10 8 8 11 9 9 12 10 A 13 11 B 14 12 C 15 13 D 16 14 E 17 15 F 20 16 10 Wró my jednak do reprezentacji liczb w JavaScripcie. Liczby dziesi tne zapisujemy w sposób tradycyjny, czyli np. 45, –124, 860. Liczby w systemie szesnastkowym musimy poprzedzi znakami 0x lub 0X, np. szesna cie zapiszemy jako 0x10 (lub 0X10), dwadzie cia jeden jako 0x15 (lub 0X15). W systemie ósemkowym przed liczb dodajemy po prostu zero, np. 010 (osiem dziesi tnie), 024 (dwadzie cia dziesi tnie). Drugi typ liczb reprezentowanych w JavaScripcie to liczby zmiennopozycyjne, czyli z cz ci ułamkow . Mo e to by klasyczny sposób zapisu z kropk dziesi tn , np. 1.274, –56,8 b d zapis wykładniczy typu 2E3, –123E–2 itp. Nie b dziemy si tutaj zagł bia w dalsze niuanse reprezentacji liczb. Warto tylko pami ta , e zakres liczb, tzn. najwi ksza i najmniejsza warto , które mog one przyjmowa , jest zale ny od systemu, na którym pracujemy. ! " Zmienne tego typu mog przyjmowa tylko dwie warto ci: TRUE i FALSE (prawda i fałsz). B d one u ywane przy konstruowaniu wyra e logicznych, porównywania danych, wskazania, czy dana operacja zako czyła si sukcesem. Dla osób znaj cych C czy C++ uwaga: warto ci TRUE i FALSE nie maj przeło enia na warto ci liczbowe, jak w przypadku wymienionych j zyków. #$ % S to oczywi cie dowolne ci gi znaków zawartych pomi dzy znakami cudzysłowów lub apostrofów. Mog zawiera znaki specjalne. Przykładami mog by : "Kot ma Al ", "liczby pierwsze: 1 3 5... ". !& '()) Jest to pewien specjalny typ danych, który oznacza po prostu nic (null). Warto przez niektóre funkcje. Bli ej zapoznamy si z ni w dalszej cz ci ksi ki. ta jest zwracana * Poznali my ju typy danych, czas zapozna si ze sposobami deklarowania i wykorzystania zmiennych. Zmienne s to konstrukcje programistyczne, które pozwalaj nam przechowywa dane. Ka da zmienna na swoj nazw , która j jednoznacznie identyfikuje. Zwykle (w wi kszo ci j zyków programowania) zmienna musi mie okre lony typ danych, który jest jej przypisany na stałe. Czasami, np. w j zyku programowania Pascal, musi by jawnie zadeklarowana przed u yciem. Poniewa jednak JavaScript jest stosunkowo prostym j zykiem skryptowym, nie ma narzuconych takich ogranicze . Zmiennych bowiem nie musimy (aczkolwiek mo emy) deklarowa przed u yciem; ka da zmienna mo e te przyjmowa dane z dowolnego typu opisanego wy ej. Co wi cej, typ danych przypisywanych zmiennej mo e si równie zmienia . Wszystko stanie si ja niejsze po wykonaniu pierwszego wiczenia. + Zadeklaruj dwie zmienne, przypisz im dowolne ci gi znaków i wyprowad je na ekran za pomoc funkcji write(). <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript var zmienna1 = "Mój komputer"; var zmienna2 = 30.7; document.write ("<H3>" + zmienna1 + " ma dysk o pojemno ci " + zmienna2 + " GB.</H3>"); // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Po wczytaniu takiej strony na ekranie uka e si napis „Mój komputer ma dysk o pojemno ci 30.7 GB” (rysunek 3.1). Przeanalizujmy wi c, co si tutaj stało. Zadeklarowali my dwie zmienne o nazwach zmienna1 i zmienna2. Zmiennej zmienna1 przypisali my ci g znaków „Mój komputer”, zmiennej zmienna2 natomiast warto liczbow , dodatni liczb zmiennoprzecinkow 30.7. Zmiennych tych u yli my jako argumentów funkcji write(). Musieli my równie tak poł czy poszczególne ła cuchy tekstowe, aby otrzyma jeden, który ukazał si na ekranie. Do tego celu u yli my operatora + (plus). Nazywa si to ł czeniem lub bardziej fachowo konkatenacj ła cuchów znakowych. , % Wyprowadzenie na ekran warto ci dwóch zmiennych Przekonajmy si teraz, e w JavaScripcie naprawd mo na zmienia typ danych przechowywanych w zmiennej. + - Zadeklaruj jedn zmienn . Przypisz do niej dowolny ła cuch znaków i wyprowadzi na ekran. Nast pnie przypisz tej samej zmiennej warto liczbow i równie wyprowad na ekran. <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript var zmienna1 = "Mój komputer"; document.write ("<H3>" + zmienna1 + " ma dysk o pojemno ci "); zmienna1 = 30.7; document.write (zmienna1 + " GB.</H3>"); // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Efekt b dzie taki sam jak na rysunku 3.1. W stosunku do skryptu z poprzedniego wiczenia obecny kod jest dłu szy i chyba mniej przejrzysty, niemniej w niektórych sytuacjach u ycie jednej zmiennej do kilku ró nych funkcji mo e by przydatne. Warto zwróci te uwag , e lepiej byłoby nadawa zmiennym nazwy, które w jaki sposób symbolizowałyby ich przeznaczenie. Przy tak prostych skryptach, jak w dwóch powy szych wiczeniach, nie ma to zapewne wielkiego znaczenia. Jednak przy bardziej skomplikowanych programach, z wi ksz ilo ci zmiennych, takie nazewnictwo doprowadzi do sytuacji, w której nie b dziemy w stanie zorientowa si , o co nam w programie chodziło. + Wy wietl na ekranie okno pozwalaj ce u ytkownikowi na podanie np. jego imienia. <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript prompt ("Podaj swoje imi : "); // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Po wczytaniu tego skryptu na ekranie pojawi si okno dialogowe z pytaniem o imi . Okno to b dzie miało nieco inny wygl d w ró nych przegl darkach, ale zawsze b dzie pozwalało na wprowadzenie danych przez u ytkownika. Wygl d okna w przegl darce Internet Explorer widoczny jest na rysunku 3.2, natomiast w przegl darce Netscape Navigator na rysunku 3.3. , % Efekt działania funkcji prompt() w przegl darce Internet Explorer , % Efekt działania funkcji prompt() w przegl darce Netscape Navigator Niestety w takiej wersji, jak w powy szym wiczeniu, skrypt nie potrafi nic zrobi z odpowiedzi u ytkownika. Nale y wi c go odpowiednio zmodyfikowa . + . Wy wietl na ekranie okno dialogowe pozwalaj ce na podanie przez u ytkownika imienia. Nast pnie wyprowad na ekran napis powitalny zawieraj cy podane imi . <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript var imie = prompt ("Podaj swoje imi :"); document.write ("Cze " + imie + "!"); // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Zadeklarowali my zmienn o nazwie imie, której przypisali my warto zwracan przez funkcj prompt(). Nast pnie wypisali my warto tej zmiennej, razem z tekstem powitania na ekran. Nie musimy jednak wcale deklarowa zmiennej, aby uzyska taki sam efekt. Wystarczy, e wywołanie funkcji prompt() umie cimy w argumencie funkcji write(). + / Wy wietl na ekranie okno dialogowe pozwalaj ce na podanie przez u ytkownika swojego imienia. Nast pnie, nie u ywaj c zmiennych, wyprowad na ekran napis powitalny zawieraj cy podane imi . <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript document.write ("Cze " + prompt ("Podaj swoje imi :") + "!"); // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Kod ten jest co prawda mniej czytelny, ni gdyby my u yli zmiennej pomocniczej, uzyskali my jednak bardziej zwi zły zapis. We wszystkich powy szych przykładach w okienku dialogowym jako warto domy lna pojawia si napis „Undefined” (rysunki 3.1, 3.2, 3.3). Nie jest to po dany przez nas efekt; na szcz cie mo na to zmieni . Je li chcemy, aby warto ci domy ln było co innego, dowolny napis lub liczba, musimy poda j jako drugi argument funkcji prompt(). + 0 Spowoduj, aby w oknie dialogowym wywoływanym przez funkcj prompt() nie pojawiała si warto „Undefined”, lecz pusty ła cuch znaków (rysunek 3.4). , % . Okno wprowadzania danych z pustym ła cuchem znaków jako warto ci domy ln <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript document.write ("Cze " + prompt ("Podaj swoje imi :", "") + "!"); // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> 1 % % Funkcja prompt() zwraca warto podan przez u ytkownika lub je li nie podał on adnej, warto domy ln , tylko w przypadku naci ni cia przycisku OK. Je eli jednak u ytkownik wcisn ł przycisk Anuluj (Cancel), zwrócona zostanie warto null. W taki przypadku na ekranie uka e si napis Cze null!. Wida to na rysunku 3.5. Tego jednak chcieliby my unikn . Pomog nam w tym instrukcje warunkowe. , % / Efekt wci ni cia przycisku Anuluj (Cancel) + 2 Wy wietl na ekranie okno dialogowe pozwalaj ce na podanie przez u ytkownika imienia. Wyprowad na ekran napis powitalny zawieraj cy podane imi . W przypadku gdy u ytkownik naci nie przycisk Anuluj (Cancel), ma pojawi si stosowny komunikat (rysunek 3.6). , % 0 Komunikat pojawia si po wci ni ciu przycisku Anuluj (Cancel) po wywołaniu funkcji prompt() <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript var imie = prompt ("Podaj swoje imi :", ""); if (imie == null) { document.write ("<H3>Czemu wcisn łe przycisk Anuluj? Nie chcesz poda imienia?"); } else { document.write ("Cze " + imie + "!"); } // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> swojego Mamy tu kilka nowych elementów wymagaj cych wyja nienia. Na pocz tku deklarujemy zmienn imie i przypisujemy jej od razu warto zwrócon przez funkcj prompt(). Jest to ci g znaków wprowadzony przez u ytkownika lub warto null. Nast pnie za pomoc konstrukcji if...else sprawdzamy, czy warto zmiennej imie jest równa null. Je li tak, wykonujemy ci g instrukcji zapisany pomi dzy nawiasami { } po instrukcji if. W przeciwnym przypadku wykonujemy instrukcje z bloku po wyst puj cego po instrukcji else. Ogólna konstrukcja if...else wygl da nast puj co: if (warunek logiczny) { instrukcje do wykonania, je li warunek jest prawdziwy } else { instrukcje do wykonania, je li warunek nie jest prawdziwy } W powy szym wiczeniu warunkiem logicznym jest (imie == null). Jest to porównanie warto ci zmiennej imie i warto ci null. Je eli s one równe, warunek jest prawdziwy. Tzn. ma on warto logiczn TRUE i wykonywany jest blok instrukcji wyst puj cy po if. Je eli warto ci te nie s równe (np. imie = „Anna”), warunek ten ma warto logiczn FALSE i wykonywany jest blok instrukcji wyst puj cy po else. W tym miejscu małe wyja nienie dla osób, które do uruchomienia ostatniego skryptu u yły jednej ze starszych wersji przegl darki Internet Explorer (wersje poni ej 4). Otó skrypt w tym przypadku nie zadziałał tak jak powinien. Wczesne wersje tego programu po wci ni ciu przycisku Anuluj (Cancel) nie zwracały warto ci null, ale pusty ła cuch znaków (zapisujemy go jako ""). Oczywi cie po klikni ciu przycisku OK, gdy nic nie zostało wpisane w okienku dialogowym, równie zwracany był pusty ci g znaków. Mieli my wi c identyczn reakcj na dwa ró ne zdarzenia, co uniemo liwiało wykrycie wci ni cie przycisku Anuluj (Cancel). Na szcz cie ten problem został usuni ty i w nowych wersjach przegl darki ju nie wyst puje. 3 Operacje dokonywane na zmiennych mo emy podzieli na: operacje arytmetyczne, operacje bitowe, operacje logiczne, operacje przypisania, operacje porównania, operacje na ła cuchach znaków. 3 Operacje arytmetyczne to standardowe dodawanie, odejmowanie, mno enie oraz dzielenie. Zapisujemy je za pomoc znanych z matematyki znaków: +, –, *, /. + 4 Zadeklaruj kilka zmiennych, wykonaj na ich standardowe operacje arytmetyczne i wyprowad wyniki na ekran. <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript var zmienna1 = 12; var zmienna2 = 5; var zmienna3 = zmienna1 + zmienna2 document.write (zmienna3 + " " + (zmienna1 + 4) + " " ); zmienna3 = zmienna1 / 3; document.write (zmienna3 + " " + zmienna1 * zmienna2); // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Wynikiem działania tego skryptu, nikt nie powinien chyba mie adnych w tpliwo ci, b dzie ci g liczb: 17 16 4 60. Podkre lenia wymaga jedynie to, e wyra enie zmienna1 + 4 musi by uj te w nawiasy. Dlaczego tak si dzieje, stanie si jasne przy wykonywaniu wicze dotycz cych operacji na ła cuchach znakowych. Do operatorów arytmetycznych nale y równie znak %. Nie oznacza on jednak obliczania procentów, ale tzw. dzielenie modulo (reszt z dzielenia). Zakładaj c dane jak w wiczeniu 3.8, wyra enie zmienna1 % zmienna2 przyjmie warto 2 (12%5 = 2). Do dyspozycji mamy równie operator zmiany znaku oraz inkrementacji i dekrementacji. Zmiany znaku dokonujemy poprzez dostawienie znaku minusa (–), np. po wykonaniu wyra enia zmienna1 = –zmienna1 warto ci zmiennej zmienna 1 stanie si –12 (równie przy zało eniu danych jak w wiczeniu 3.8). Du o ciekawszym operatorem jest operator inkrementacji, czyli zwi kszenia warto ci. Powoduje on przyrost warto ci zmiennej o jeden. Operator ten, zapisywany jako „++”, mo e wyst powa w dwóch formach: przyrostkowej b d przedrostkowej. Tzn. je li mamy zmienn , która nazywa si np. x, forma przedrostkowa b dzie wygl da : ++x, natomiast przyrostkowa x++. Oba te wyra enia zwi ksz warto zmiennej x o jeden, jednak wcale nie s sobie równowa ne. Otó operator x++ zwi ksza warto zmiennej po jej wykorzystaniu, natomiast ++x przed jej wykorzystaniem. I w brew pozorom takie rozró nienie mo e by bardzo pomocne podczas pisania programów. Nast pne wiczenie, zwi zane z operatorem inkrementacji, b dzie nietypowe. + 5 Przeanalizuj poni szy kod. Nie wczytuj skryptu do przegl darki, ale zastanów si , jaki b dzie wy wietlony ci g liczb. Nast pnie, po uruchomieniu skryptu, sprawd swoje przypuszczenia. <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript var x = 12; var y; /*1*/document.write (++x); /*2*/document.write (" "); /*3*/document.write (x++); /*4*/document.write (" "); /*5*/document.write (x); /*6*/document.write (" "); /*7*/y = x++; /*8*/document.write (y); /*9*/document.write (" "); /*10*/y = ++x; /*11*/document.write (y); // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Wynikiem b dzie ci g znaków „13 13 14 14 16”. Zatem, jak to wszystko działa (dla ułatwienia opisu wiersze skryptu zostały ponumerowane)? Otó w wierszu oznaczonym numerem 1 najpierw zwi kszana jest warto zmiennej x o 1 (czyli x = 13), a nast pnie ten wynik jest wy wietlany. W linii numer 3 najpierw jest wy wietlana aktualna warto zmiennej x (czyli 13), a nast pnie jest ona zwi kszana o 1 (czyli x = 14). W wierszu nr 5 jest wy wietlana aktualna warto zmiennej x, czyli 14. W wierszu siódmym zmiennej y jest przypisywana warto zmiennej x, a nast pnie zmienna x jest zwi kszana o 1 (czyli y = 14, x = 15). W wierszu dziesi tym najpierw jest zwi kszana warto zmiennej x o 1 (czyli x =16), a nast pnie warto ta jest przypisywana zmiennej y (czyli y = 16 i x = 16). Na pocz tku mo e wydawa si to troch skomplikowane, ale po dokładnym przeanalizowaniu i samodzielnym wykonaniu kilku własnych wicze operator ten nie powinien sprawia adnych kłopotów. Operator dekrementacji działa analogicznie, z tym e zamiast zwi ksza warto ci zmiennych, zmniejsza je. Oczywi cie zawsze o jeden. + 6 Zmie kod z wiczenia 3.9 tak, aby operator ++ został zast piony operatorem --. Nast pnie przeanalizuj jego działanie i sprawd , czy otrzymany wynik jest taki sam jak na ekranie przegl darki. <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript var x = 12; To zdaje si do wyrzucenia. Nało yły si dwa kody. var y; document.write document.write document.write document.write document.write document.write y = x--; document.write document.write y = --x; document.write // Koniec kodu </SCRIPT> <BODY> </BODY> </HTML> (--x); (" "); (x--); (" "); (x); (" "); (y); (" "); (y); JavaScript --> 3 Operacje tego typu s wykonywane oczywi cie na bitach, w arytmetyce binarnej. Zestawienie tych operacji przedstawione jest w tabeli 3.2. - Operacje bitowe , 7 bitowe AND & bitowe OR | XOR ^ przesuni cie bitowe w lewo << przesuni cie bitowe w prawo >> przesuni cie bitowe w prawo z wypełnieniem zerami >>> 3 Operacje przypisania s dwuargumentowe i powoduj przypisanie warto ci argumentu prawostronnego do argumentu lewostronnego. Najprostszym operatorem tego typu jest oczywi cie klasyczny znak równo ci. Oprócz niego mamy jeszcze do dyspozycji operatory ł cz ce klasyczne przypisanie z innym operatorem arytmetycznym b d bitowym. Operacje przypisania 8 "% 3 8 "% X += Y - X = X +Y * X –= Y X = X –Y X *= Y X=X*Y X /= Y X=X/Y X %= Y X=X%Y X <<= Y X = X << Y X >>= Y X = X >> Y X >>>= Y X = >>> Y X &= Y X=X&Y X |= Y X=X|Y X ^= 3 Y X=X^Y " Argumentami operacji logicznych tego typu musz by wyra enia posiadaj ce warto logiczn , czyli TRUE lub FALSE (prawda i fałsz). Np. wyra enie 10 < 20 jest niew tpliwie prawdziwe (10 jest mniejsze od 20), zatem jego warto logiczna jest równa TRUE. W grupie tej wyró niamy trzy operatory: logiczne: AND (&&), logiczne OR (||) i logiczna negacja — NOT (!). AND (iloczyn logiczny) działa w taki sposób, e daje wynik TRUE tylko wtedy, je li oba argumenty maj warto TRUE. Logiczne OR daje natomiast wynik TRUE wtedy, gdy przynajmniej jeden z argumentów ma warto TRUE. Logiczne NOT jest po prostu negacj , tzn. zmienia warto argumentu na przeciwny: Operacje porównania porównuj dwa argumenty. Wynikiem porównania jest warto TRUE (je li jest ono prawdziwe) lub FALSE (je li jest fałszywe). Argumentami mog by zarówno warto ci numeryczne, jak i ła cuchy znaków. Do dyspozycji mamy operatory porównania przedstawione w tabeli 3.4. . Operacje porównania 3 * == Zwraca TRUE, je li argumenty s sobie równe. != Zwraca TRUE, je li argumenty s ró ne. < Zwraca TRUE, je li argument prawostronny jest wi kszy od lewostronnego. > Zwraca TRUE, je li argument prawostronny jest mniejszy od lewostronnego. >= Zwraca TRUE, je li argument prawostronny jest mniejszy lub równy lewostronnemu. <= Zwraca TRUE, je li argument prawostronny jest wi kszy lub równy lewostronnemu. + Wy wietl na ekranie okno dialogowe pozwalaj ce na podanie przez u ytkownika swojego imienia. Wyprowad na ekran napis powitalny zawieraj cy podane imi . W przypadku, gdy u ytkownik naci nie przycisk Anuluj (Cancel) lub nie poda imienia i wci nie przycisk OK, ma si pojawi stosowny komunikat. <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript var imie = prompt ("Podaj swoje imi :", ""); if ((imie == null) || (imie == "")){ document.write ("Dlaczego nie podałe swojego imienia?"); } else{ document.write ("Cze " + imie + "!"); } // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Znaczenie konstrukcji if ((imie == null) || (imie == "")) jest nast puj ce: je eli zawarto zmiennej imie równa jest warto ci null lub warto zmiennej imie równa jest pustemu ła cuchowi znaków, całe wyra enie przyjmuje warto TRUE, zatem jest wykonywany blok instrukcji po if. Je eli jednak u ytkownik podał jak i warto zmiennej imie nie jest równa ani null, ani pustemu ci gowi znaków, wykonujemy blok instrukcji wyst puj cy po else. W ten sposób jednocze nie wykorzystali my instrukcje porównania i instrukcje logiczne. 3 7 $ % Wyst puje tu tylko jeden operator, mianowicie + (plus). Powoduje on znan ju nam z wcze niejszych wicze , konkatenacj , czyli ł czenie ła cuchów znakowych. Np. wynikiem działania operacji: var napis = "Idziemy do " + "kina" b dzie oczywi cie przypisanie zmiennej napis ci gu znaków „Idziemy do kina". Co jednak ciekawe, a tej wła ciwo ci zwykle nie posiadaj zwykle inne j zyki programowania, mo na równie do siebie dodawa zmienne tekstowe oraz liczbowe np. po wykonaniu var x = "Mam " + 100 + " złotych" zmienna x b dzie zawierała ci g znaków „Mam 100 złotych". + - Dokonaj konkatenacji ła cucha znakowego oraz dowolnej liczby. Wynik wy wietl na ekranie. <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript x = "Mam " + 100 + " złotych" document.write (x); // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Ponownie wró my teraz do wiczenia 3.8. Pojawił si w nim m.in. nast puj cy fragment kodu: <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript var zmienna1 = 12; var zmienna2 = 5; var zmienna3 = zmienna1 + zmienna2 document.write (zmienna3 + " " + (zmienna1 + 4) + " " ); zmienna3 = zmienna1 / 3; document.write (zmienna3 + " " + zmienna1 * zmienna2); // Koniec kodu JavaScript --> </SCRIPT> Pisałem wtedy, i wyra enie zmienna 1 + 4 musi by uj te w nawiasy. Dzieje si tak dlatego, e w przeciwnym wypadku zmienna1 najpierw zostanie przekształcona na ła cuch znaków, a nast pnie do tego ła cucha zostanie dodana czwórka. Dałoby na ekranie wynik 124 (12 i 4) zamiast spodziewanych 16. Mo na tego unikn poprzez zrezygnowanie z tworzenia jednego ła cucha znakowego jako argumentu funkcji write(), zast puj c go list argumentów. + U ywaj c listy argumentów funkcji write() przekształci nast powało niepo dane ł czenie ła cuchów znakowych. kod z wiczenia 3.8, tak by nie <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript var zmienna1 = 12; var zmienna2 = 5; var zmienna3 = zmienna1 + zmienna2 document.write (zmienna3, " ", zmienna1 + 4, " " ); zmienna3 = zmienna1 / 3; document.write (zmienna3 + " " + zmienna1 * zmienna2); // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> 1 % % " Instrukcja przetwarzania warunkowego pozwala, w niektórych przypadkach, na wygodne zast pienie bloku if...else. Konstrukcja wygl da nast puj co: (wyra enie warunkowe)?warto 1:warto 2 Nale y rozumie to w sposób nast puj cy: je eli warunek jest spełniony, tzn. wyra enie warunkowe ma warto TRUE — cało przyjmuje warto warto 1, w przeciwnym przypadku warto 2. Najłatwiej zrozumie ten zapis, wykonuj c kolejne wiczenie. + . Wy wietl okno dialogowe umo liwiaj ce podanie przez u ytkownika dowolnej liczby. Korzystaj c z instrukcji przetwarzania warunkowego, sprawd , czy liczba jest ujemna czy nieujemna. Wynik wy wietl na ekranie. <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript var x = prompt ("Podaj liczb :", ""); var jaka = (x < 0)? "ujemna":"nieujemna"; document.write ("Ta liczba jest " + jaka); // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> W powy szym przykładzie najpierw prosimy u ytkownika o podanie dowolnej liczby. Nast pnie stosujemy poznane wła nie wyra enie warunkowe, które, o ile x < 0, przypisuje zmiennej jaka ci g znaków ujemna, a w przeciwnym przypadku ci g znaków nieujemna. + / Zmie kod z wiczenia 3.14 w taki sposób, aby zamiast wyra enia warunkowego u y bloku instrukcji if...else. <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript var x = prompt ("Podaj liczb :", ""); var jaka; if (x < 0) jaka = "ujemna"; else jaka = "nieujemna"; document.write ("Ta liczba jest " + jaka); // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Je li kto lubi nieco bardziej skomplikowany kod, mo e rozwi za zadania z powy szych dwóch wicze bez u ycia jakichkolwiek zmiennych. Cało zapisa w jednego tylko wiersza kodu (nie licz c oczywi cie znaczników HTML), wła nie dzi ki u yciu wyra enia warunkowego. + 0 Wy wietl okno dialogowe umo liwiaj ce podanie przez u ytkownika dowolnej liczby. Nie u ywaj c zmiennych, ani bloku if...else sprawd , czy liczba jest ujemna czy nieujemna. Wynik wy wietl na ekranie. <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript document.write ("Ta liczba jest " + (((prompt ("Podaj liczb ",""))<0)?"ujemna":"nieujemna")); // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Powy szy skrypt w pierwszej chwili mo e wydawa si jest jasny. Wystarczy go jednak spokojnie przeanalizowa . Wszystkie elementy potrzebne do zrozumienia zostały ju omówione, a funkcjonalnie odpowiada on programom z dwóm poprzednich wicze . Oczywi cie z takim upraszczaniem zapisu nie nale y przedobrzy . Mo e si bowiem okaza si , e po kilku dniach sami nie b dziemy mogli go zrozumie . Niemniej w tym przypadku, stopie skomplikowania nie jest du y, natomiast zdecydowanie oszcz dzamy na ilo ci zmiennych. Wykonajmy teraz skrypt obliczaj cy pierwiastki równania kwadratowego o zadanych przez u ytkownika parametrach. Jak pami tamy ze szkoły delt równania w postaci A*x^2+B*x+C = 0 otrzymujemy ze wzoru: B^2-4*A*C. Je eli delta jest wi ksza od zera, mamy dwa pierwiastki: x1 = (-B+√delta)/2*A i x2 = (-B-√delta)/2*A. Je eli delta jest równa zero, istnieje tylko jedno rozwi zanie, mianowicie x = -B/2*A. W przypadku trzecim, delta mniejsza od zera, w zbiorze liczb rzeczywistych rozwi za nie ma. + 2 Napisz skrypt obliczaj cy pierwiastki równania kwadratowego o parametrach zadanych przez u ytkownika. Wyniki wy wietl na ekranie (rysunek 3.7). , % 2 Efekt działania skryptu rozwi zuj cego równania kwadratowe <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nie obsługuj cymi JavaScriptów var A = prompt ("Podaj parametr A równania kwadratowego: Ax^2 + Bx + C = 0",""); var B = prompt ("Podaj parametr B równania kwadratowego: Ax^2 + Bx + C = 0",""); var C = prompt ("Podaj parametr C równania kwadratowego: Ax^2 + Bx + C = 0",""); var delta = B * B - 4 * A * C; if (delta < 0){ document.write ("To równanie nie ma rozwi za w zbiorze liczb rzeczywistych!"); } else{ if (delta == 0){ document.write ("Rozwi zaniem jest liczba: x = ", - B / 2 * A) } else{ document.write ("<H3>Rozwi zaniem s liczby: x1 = ", ((- B + Math.sqrt (delta)) / (2 * A))); document.write (" i x2 = ", ((- B - Math.sqrt (delta)) / (2 * A))); } } // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Powy szy skrypt działa prawidłowo, warto mo e jednak pokusi si o wy wietlenie, oprócz wyniku, tak e samego równania, którego parametry wprowadził u ytkownik. Nie jest to wcale banalne, gdy je li chcemy, aby cało wygl dała porz dnie, trzeba b dzie zastosowa kilka instrukcji warunkowych. + 4 Napisz skrypt obliczaj cy pierwiastki równania kwadratowego o parametrach zadanych przez u ytkownika. Wy wietl na ekranie równanie oraz jego rozwi zania (rysunek 3.8). , % 4 Skrypt wy wietlaj cy równanie kwadratowe o zdanych parametrach oraz jego rozwi zania <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nie obsługuj cymi JavaScriptów var A = prompt ("Podaj parametr A równania kwadratowego: Ax^2 + Bx + C = 0",""); var B = prompt ("Podaj parametr B równania kwadratowego: Ax^2 + Bx + C = 0",""); var C = prompt ("Podaj parametr C równania kwadratowego: Ax^2 + Bx + C = 0",""); var delta = B * B - 4 * A * C; var rownanie = ""; if (A != 0){ rownanie = (A == 1)?"x^2 ":A + "*x^2 "; } if (B != 0) { if (A != 0) rownanie += (B == 1)?"+ x ":((B < 0)?B + "*x ":"+ " + B + "*x "); else rownanie += (B == 1)?"x ":((B < 0)?B + "*x ":B + "*x "); } if (C != 0){ if ((A == 0) && (B == 0)) rownanie += C; else rownanie += (C < 0)?C:"+ " + C; } rownanie += " = 0"; document.write("Równanie: " + rownanie +"<BR><BR>"); if (delta < 0){ document.write ("To równanie nie ma rozwi za } w zbiorze liczb rzeczywistych!"); else{ if (delta == 0){ document.write ("Rozwi zaniem jest liczba: x = ", - B / 2 * A) } else{ document.write ("Rozwi zaniem s liczby: x1 = ", ((- B + Math.sqrt (delta)) / (2 * A))); document.write (" i x2 = ", ((- B - Math.sqrt (delta)) / (2 * A))); } } // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Jak wida , skrypt jest teraz bardziej skomplikowany. Wyja nienia mo e wymaga wiersz: rownanie += (B == 1)?"+ x ":((B < 0)?B + "*x ":"+ " + B + "*x "); Pierwsze wra enie — bardzo skomplikowanie, niemniej jest to jedynie zagnie d one wyra enie warunkowe poznane w wiczeniu 3.14. Ogólna konstrukcja takiego wyra enia wygl dała nast puj co: (wyra enie warunkowe)?warto 1:warto 2 W naszym przypadku warto 2 zast piona została po prostu przez kolejne wyra enie warunkowe. Schematycznie mo na przedstawi jako: (wyra enie warunkowe 1)?warto 1:((wyra enie warunkowe 2)?warto 3:warto 4) Mimo e skrypt jest teraz dosy skomplikowany, nie oznacza to, e nie mo na go jeszcze usprawni . Przede wszystkim nale ałoby sprawdza , czy na pewno równanie podane przez u ytkownika jest równaniem kwadratowym, tzn. czy parametr A nie jest równy zero. Je li tak, nie nale y oblicza delty. Warto te zainteresowa si , czy u ytkownik nie wcisn ł przy podawaniu parametrów przycisku Anuluj (Cancel). Kod wy wietlaj cy samo równanie te mo na usprawni . W tej chwili, np. je li parametr B równy jest jeden, nie wy wietlamy jedynki, a tylko „ +B” , je li jednak B jest równe –1, wy wietlane jest -1 * B. Te poprawki pozostawmy jednak jako zadanie do samodzielnego wykonania. 9 P tle to wyra enia programowe słu ce do wykonywania powtarzaj cych si czynno ci. Np. je li chcieliby my 150 razy wypisa na stronie To jest moja strona domowa, pomijaj c sensowno takiej czynno ci, wklepanie w skrypcie 150 razy document.write („To jest moja strona domowa”) byłoby niew tpliwie uci liwe. P tle pozwalaj na automatyzacj takiej czynno ci. 9 : P tla typu for ma składni nast puj c : for (wyra enie pocz tkowe; wyra enie warunkowe; wyra enie modyfikuj ce){ blok instrukcji } Wyra enie pocz tkowe jest stosowane do zainicjalizowania zmiennej u ywanej jako licznik ilo ci wykona p tli. Wyra enie warunkowe okre la warunek, jaki musi by spełniony, aby dokona kolejnego przej cia w p tli, wyra enie modyfikuj ce u ywane jest zwykle do modyfikacji zmiennej b d cej licznikiem. + 5 U yj p tli typu for do wy wietlenia na ekranie dowolnej sekwencji napisów (rysunek 3.9). , % 5 Zastosowanie p tli typu for do wy wietlania sekwencji napisów <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript for (var i = 1; i <= 150;i++){ document.write ("To jest moja strona"); } // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Kod nale y rozumie nast puj co: dopóki warto zmiennej i jest mniejsza b d równa 150, zwi kszaj i o 1 oraz wykonuj instrukcj document.write („To jest moja strona"). Efekt działania widoczny jest na rysunku 3.9. P tle tego typu mo na zmodyfikowa , tak aby pozby si wyra enia modyfikuj cego. Dokładniej przenie je do wn trza p tli w sposób nast puj cy: for (wyra enie pocz tkowe; wyra enie warunkowe;){ blok instrukcji wyra enie modyfikuj ce } + -6 Zmodyfikuj p tle typu for tak, aby wyra enie modyfikuj ce znalazło si w bloku instrukcji. <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript for (var i = 1; i <= 150;){ document.write ("To jest moja strona"); i++; } // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Wa n rzecz jest, aby pami ta o redniku wyst puj cym po wyra eniu i <= 150 — jest on bowiem niezb dny dla prawidłowego funkcjonowania całego skryptu. W podobny sposób mo na te „ pozby si ” wyra enia pocz tkowego, przenosz c je jednak nie do wn trza p tli, a przed ni . + - Usu wyra enie pocz tkowe poza p tl for. <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript var i = 1; for (;i <= 150;){ document.write ("To jest moja strona"); i++; } // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Skoro zaszli my ju tak daleko w pozbywaniu si wyra e steruj cych, usu my równie wyra enie warunkowe. Jest to jak najbardziej mo liwe. + -- Umie wyra enia: warunkowe i modyfikuj ce we wn trzu p tli, natomiast wyra enie pocz tkowe przenie poza p tl . <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript var i = 1; for (;;){ document.write ("To jest moja strona"); if (i++ >= 150) break; } // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Nale y zwróci tutaj uwag na dwie sprawy. Po raz kolejny zauwa redniki w wyra eniu for — tym razem dwa, oba s niezb dne, inaczej skrypt nie zadziała. Wa ne jest równie odwrócenie kierunku nierówno ci. W wiczeniu 3.20 było bowiem i++ <=150, obecnie jest i++ >= 150. W pierwszym przypadku sprawdzali my warunek, czy p tla ma by dalej wykonywana, w drugim sprawdzamy, czy p tla ma si zako czy . Na to zako czenie pozwala nowa instrukcja break. Po jej napotkaniu nast puje przerwanie wykonywanie p tli, niezale nie od stanu zmiennej steruj cej (w naszym przypadku i). Drug instrukcj pozwalaj c na modyfikacj zachowania p tli jest continue. Po jej napotkaniu nast puje przerwanie bie cej iteracji i rozpocz cie kolejnej. Mówi c pro ciej nast puje przeskok na pocz tek p tli. + - Wy wietl na ekranie wszystkie liczby pomi dzy 1 a 1 000 podzielne przez 2 (rysunek 3.10). Skorzystaj z p tli for i instrukcji continue. , % 6 Efekt działania skryptu wypisuj cego liczby podzielne przez dwa <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript for (var i = 1; i <= 1000; i++){ if ((i % 2) != 0) continue; document.write (i + " "); } // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> Oczywi cie do realizacji zadania z wiczenia 3.22 nie jest konieczna instrukcji continue. Wystarczy skorzysta tylko z instrukcji if. Sama p tla wygl dałaby wtedy nast puj co: for (var i = 1; i <= 1000; i++){ if ((i % 2) == 0) document.write (i + " "); } 9 P tla typu while ma składni nast puj c : while (wyra enie warunkowe){ blok instrukcji } Wyra enie warunkowe musi by spełnione, eby wykonana została kolejna iteracja. + -. U yj p tli typu while do wy wietlenia na ekranie dowolnej sekwencji napisów (tak jak na rysunku 3.9). <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <SCRIPT LANGUAGE = "JavaScript"> <!-- Ukrycie przed przegl darkami nieobsługuj cymi JavaScript i = 0; while(i++ < 150){ document.write ("To jest moja strona"); } // Koniec kodu JavaScript --> </SCRIPT> <BODY> </BODY> </HTML> W p tli while mo na oczywi cie równie stosowa instrukcje break i continue.