Cauta rapid aici ↑

JAVASCRIPT -- GENERAL

Internetul este intr-o continua schimbare. Acest fapt se datoreaza permanentei fluctuatii din toate domeniile vietii actuale, dar cu toate acestea Internetul reprezinta o sursa de informatii destul de importanta. Rezulta din aceasta ca dinamica lumii reale se reflecta in ritmul de evolutie a aplicatiilor Web. Schimbarile de pe Internet sunt stimulate in primul rand de catre societatea utilizatorilor de retea si de realizatorii site-urilor Web.

Nu demult atunci cand auzeam de notiuni pline de mister, precum HTTP, HTML sau WWW cei mai multi dintre noi reactionau cu surprindere, ba poate chiar cu panica. Astazi ele nu mai reprezinta pentru noi nici un fel de secrete. Avand deja experienta ca utilizatori, putem sa le explicam fara nici o problema si totodata sa punem in practica mecanismele care se ascund in spatele acestor notiuni.

Pana acum, pe tot parcursul cursului, am subliniat de nenumarate ori imensa popularitate a Internetului care stimuleaza in mod active dezvoltarea acestuia. Cu toate acestea o asemenea stare de fapt are in afara multor calitatii si un mic defect. Ritmul alert al schimbarilor face ca site-urile sa apara rapid dar sa dispara la fel de repede. Asa se intampla cu paginile de Internet sau cu tehnologiile folosite la schimbul de informatii, insa si autorii paginilor Web renunta adesea la stocarea lor.

Cu siguranta mutora dintre noi li s-a intamplat adresa site-ului preferat, pentru ca ulterior sa constate ca site-ul vizitat de nenumarate ori nu mai exista sau ca in cel mai bun caz a fost mutat pe un alt server la o alta adresa. Cu aceiasi situatie ne putem intalni atunci cand in timpul folosirii anumitor resurse la distanta browserul ne informeaza despre necesitatea instalarii unui program suplimentar fara de care vizitarea in continuare a site-ului nu va fi posibila.

Pe de alta parte interesul imens al utilizatorilor de Internet ii oblige pe realizatorii paginilor de Web sa caute in permanenta solutii care sa ofere interfete cat mai attractive site-urilor intretinute de ei la costuri cat mai mici cu putinta. Din pacate nu exista un mod universal de incurajare a vizitatorilor sa acceseze anumite site-uri Web iar unul din motivele de baza il reprezinta diversitatea receptorilor.

Cele doua module anterioare ale cursului descriau limbajul Perl si ne permiteau sa dobandim cunostinte in domeniul scrierii de aplicatii CGI. Aceasta tehnologie este deosebit de folositoare si totodata deloc complicate, astfel incat permite construirea rapida a unor solutii interesante care influenteaza in mod decisive atractivitatea site-ului nostrum. Trebuie avut in vedere ca aceasta comunicare prin interfata CGI se bazeaza pe schimbul de informatii dintre calculatorul nostrum si server, lucru destul de greu si nu intotdeauna necesar. In anumite aplicatii metodele mai usoare pot fi mai practice si totodata mult mai eficace. In acest modul ne vom ocupa de o tehnologie foarte utilizata, care actioneaza pe partea de client - adica pe calculatorul pe care lucreaza browserul. Limbajul Java Script, pentru ca despre el este vorba permite cu un effort minim transformarea unei pagini Web neatractive si statice intr-una dinamica, colorata si care atrage atentia asupra profesionalismul autorului.

In primul capitol al acestui modul vom descrie conceptul de programare orientate pe obiect. In continuare vom prezenta istoria aparitiei si dezvoltari acestui limbaj, vom descrie elementele sale component si vom atinge subiectul compatibilitatii limbajului Java Script (sintaxa, structura datelor, instructiunii si obiectele de baza). In partea practica vom face cunostinta cu DHTML, adica modul de manipulare a elementelor, pana acum statice, ale site-urilor Web. Dup ace vom face cunostinta cu continutul modulului si cu numeroasele exemple din cuprins, veti putea construe pagini Web dinamice si interesante.

Programarea orientata pe obiect

Modul clasic de construire a programelor de calculator este programarea structurala. Aceasta modalitate a aparut in anii ’60 ca raspuns la criza dezvoltarii programarii si avea ca sarcina sa asigure o transparenta mai mare a aplicatiilor construite. Acest efect a fost obtinut prin introducerea structurilor in limbajele de programare precum functii, procedurii sau module care aduceau ordine si claritate in codul scris haotic pana atunci. Unul dintre cele mai populare limbaje structurate de programare este Pascal. Programand in Pascal trebuie sa fim constienti de faptul ca acesta este un limbaj imperativ, ceea ce nu inseamna intotdeauna prezentarea fidela a realitatii.

Cu toate acestea, programarea structurala este oarecum abstracta, realitatea inconjuratoare fiind mai degraba perceputa prin prisma obiectelor. Foarte importanta este in acest caz calitatea umana de a face abstractie de detalii. Ea ne permite sa recunoastem o cladire fara sa tinem cont de caramizile, lemnul si tabla din care este construita sau sa percepem calculatorul ca pe un intreg, nu ca pe o multime de circuite si cabluri de conectare. Oameni, animale, plante, mobile, calculatoare, case, autovehicule -- toate sunt percepute de noi ca obiecte cu rol si trasaturi caracteristice care pot fi descrise prin comportament si actiuni. Cunostintele de acest fel au stat si la baza construirii unor definitii formale pe care le cunosc programatorii.

Obiectele sunt entitati abstracte definite in limbajul de programare care corespund elementelor din lumea reala. Ele sunt caracterizate de datele care le descriu (atribute) si metode (proceduri si functii) care sunt folosite pentru manipularea acestor date.

Programarea orientata pe obiect (POO) permite modelarea obiectelor lumii relae cu ajutorul corespondentilor virtuali prin intermediul limbajelor de programare. Este un mod mult mai intuitiv de construire a programelor decat programarea structurata care descrie obiectele caracterizate cu ajutorul atributelor si metodelor. In plus asa cum se intampla in lumea reala obiectele pot interactiona unele cu altele, fapt care usureaza foarte mult crearea modelelor asociate.

In limbajele de programare clasice, cea mai mica unitate din program este procedura sau functia.

In programarea orientata pe obiect, cea mai mica unitate din program o reprezinta clasa. Ea constituie baza de construire a unei asa zise instante, adica a unor noi obiecte de un anumit fel.

Un avantaj al abordarii orientate pe obiect este posibilitate refolosirii unor obiecte odata ce au fost construite. Aceasta practica permite economisirea timpului necesar pentru construirea aplicatiei si are o influenta pozitiva asupra sigurantei acesteia. Clasa folosita de mai multe ori este de obicei bine conceputa si astfel probabilitatea existentei unei erori de programare se reduce.

De programarea orientata pe obiect se leaga alte trei notiunii care apar in toate limbajele de programare si anume: mostenire, incapsularea si polimorfismul.

Pentru modelarea realitati in abordarea orientata pe obiect sunt folosite legaturile logice dintre clase. Una dintre cele mai importante tipuri de legaturi este mostenirea.

Mostenirea reprezinta faptul ca atributele si metodele unei clase sunt folosite pentru construirea unei noi clase, iar cea din urma este completata cu date, functii si metode specifice care ii sunt proprii numai acesteia.

Incapsularea reprezinta gruparea codului care descrie datele si metodele diferitelor obiecte. Ea permite, de asemenea, ascunderea informatiilor. In practica inseamna ca obiectele comunica intre ele cu ajutorul unor metode cunoscute in timp ce detaliile privind executia anumitor instructiuni sunt ascunse in interiorul obiectelor.

Cunoasterea acestor detalii nu are o influenta fundamentala asupra rezultatului operatiilor efectuate, fapt asemanator cazului in care se foloseste tastatura calculatorului fara a fi necesare cunostintele despre semnalele electrice transmisa de tastatura catre calculator pentru a scrie in mod corect un text. O calitate de baza a incapsularii este faptul ca ea asigura obiectele impotriva folosirii necontrolate a anumitor atribute in acelasi timp, lucru care ar putea avea consecinte catastrofale.Este suficient pentru comparatie sa ne inchipuim situatia in care doua sisteme electronice dintr-o masina au hotarat, in acelasi timp, camasina trebuie sa vireze brusc, unul hotarand ca trebuie virat spre stanga din cauza ca pe drum exista un obstacol, iar cel de al doilea ca trebuie virat la dreapta din cauza unui tir aflat in depasire.

Polimorfismul se refera la faptul ca aplicatiile constuite pot fi extinse . Metodele din obiectele-copii au denumiri identice ca cele din obiectele-mama, desi realizeaza acelasi instructiuni.

In acest mod programatorul atunci cand apeleaza o metoda a unei anumite clase din ierarhia de mostenire nu trebuie sa gandeasca carei clase ii apartine obiectul respectiv. Cunoscand deja bazele principiilor de programare orientate pe obiect ne putem ocupa de un limbaj concret folosit la construirea de programe pe partea de client.

De ce avem nevoie de JavaScript?

Popularitatea imensa a Web-ului a dus la inceputul anilor ’90 la cresterea interesului fata de proiectarea unor site-uri Web cat mai atractive. Pe masura ce pagina web este mai interesanta, originala si interactioneaza mai mult cu utilizatorul tot mai multe persoane vor fi interesate de informatiile prezentate. Un numar foarte mare de persoane care sa utilizeze o anumita pagina web reprezinta visul tuturor realizatorilor de site-uri Web, iar cand aceasta este o pagina comerciala, cresterea popularitatii ei va duce cu siguranta la cresterea interesului pentru produsul respectiv. A aparut asadar intrebarea: „Ce se poate face pentru ca o pagina de internet sa iasa in evidenta dintre alte milioane de pagini?”.

Aparitia limbajului JavaScript

Firma Netscape Communications Corporation a luat parte inca de la inceput la dezvoltarea dinamica a Web-ului. In cursa penru locul 1, Netscape a inceput sa preia conducerea dupa construirea browserului Netscape Navigator distribuit in mod gratuit (pentru uz personal). Curand dupa aceea Netscape a construit limbajul denumit LiveScript care trebuia sa permita trasformarea documentelor statice in documente mai interactive. LiveScript a fost implementat in primele versiuni ale browserului Netscape Navigator bucurandu-se de o mare popularitate si avand un succes enorm. In acelasi timp inginerii firmei SunMicrosystems nevoiti sa-si adapteze propriile programe la standardele diferitelor interfete de programare, au elaborat limbajul Java.

In urma intelegerii dintre Netscape Communiactions Corporation si SunMicrosystems precum si a imbinarii ideii LiveScript cu structura limbajului Java a aparut un mediu denumit „Moch”, destinat construirii de aplicatii de retea iar in final construirii paginilor Web dinamice. Acesta a avut un caracter deschis si a fost independent de platforma de programare. Dupa finalizarea proiectului specificatiile construite au fost publicate de catre ambele firme in decembrie 1995 sub denumirea de JavaScript in versiunea 1.0. De noua tehnologie sau aratat interesate si alte firme care au dorit sa foloseasca limbajul JavaScript pentru produsele lor. Firma Microsoft a anuntat ca limbajul JavaScript poate fi folosit de catre browserul Internet Explorer.

Firma Microsoft a avut anumite dificultati in folosirea JavaScript, deoarece primele implementari ale acestui limbaj denumit Jscript au fost destul de iluzorii in browserul Internet Explorer 3.0. Acest lucru a obligat firma Microsoft sa foloseasca versiunea standard JavaScript universal folosita, in schimb IE a ramas echipat cu posibilitatea de punere in functiune a scripturilor in limbajul VBScript (Visual Basic Script) care este o solutie Microsoft. Sintaxa si posibilitatile lui sunt foarte apropiate de JavaScript. Noi insa ne vom concentra atentia in continuare asupra tehnologiei JavaScript datorita amplei sale utilizari.

Ce este JavaScript?

JavaScript este un limbaj de programare orientat pe obiect independent de sintemul operational folosit in calculatorul dat.

Aceasta inseamna ca executia fisierului ar trebui sa fie posibila indiferent de mediul sub care lucreaza browserul, Microsoft,Linux,UNIX sau Mac OS iar rezultatul actiunii este identic in toate cazurile enumerate. Punctul forte al acestui limbaj este faptul ca acesta este un limbaj interpretat deoarece interpretorul se afla in interiorul browserului, actiunea scripturilor depinzand numai de tipul si actiunea browserului, lucru despre care vom vorbi in curand.

Aurorii limbajului au evidentiat trei componente ale sintaxei acestuia destinate diferitelor aplicatii. Nucleul JavaScript cuprinde obiecte elementare, precum si elementele de baza ale limbajului, cum ar fi operatorii, instructiunile si expresiile. Este tratat ca un fel de model, el putand fi completat cu obiecte suplimentare.

Tocmai prin introducerea completarilor a aparut o componenta suplimentara: Java Script pe partea de client. Acesta contine dezvoltarile limbajului care permit colaborarea scripurilor cu browserele. Client-side JavaScript poseda, pe langa obiectele suplimentare, asa zisul model obiectual al documentului.

In schimb JavaScript pe parte de srever, care reprezinta cea de-a treia componenta a limbajului si-a gasit utilizarea in aplicatiile care actioneaza nu in browsere, ci pe paginile de internet ale furnizorilor de servicii. Acest lucru este facilitat de un grup specializat de obiecte, raspunzatoare printre altele de comunicarea cu bazele de date, de urmarirea sesiunilor utilizatorului, precum si de manipularea fisierelor care se gasesc pe server. Aparitia acestei componente provine din faptul ca firma Netscape a construit LiveScript concomitent cu programarea pentru serverele Web.

Pentru a folosi scriptul pe pagina web, trebuie sa folosim urmatorul tag in limbajul HTML:

<script type=”text/javascript”>

<!--Aici ar trebui sa se afle sursa programului in limbajul JavaScript -->

</script>

Comentariul intern al tag-ului nu este intamplator. El reprezinta o asigurare impotriva greselilor legate de tratarea incorecta a programelor JavaScript de catre versiunile mai vechi ale browserelor.

Un mod alternativ si in acelasi timp mai eficient de folosire a programului JavaScript pe pagina web este introducerea codului acestuia intr-un fisier separat cu extensia.js si ulterior includerea lui intr-unul dintre fisierele site-ului. Pentru a informa browserul despre localizarea fisierului pe server trebuie folosit parametrul SRC al tag-ului respectiv. Tagul <script> trebuie plasat in sectiunne <head> a fisierului, lucru care asigura accesibilitatea programului JavaScript in intregul document HTML.

In exemplul de mai jos codul scriptului se gaseste in fisierul ’script.js’ care se gaseste in acelasi director de pe server ca si fisierul care il include:

<script type=”text/javascript” src=”script.js”></script>

JavaScript si Java

Java si JavaScript sunt doua limbaje diferite, in ciuda asemanarii denumirilor. Java este un limbaj de programare dezvoltat, orientat pe obiect, folosit de catre programatorii cu experienta. Se caracterizeaza printr-o mare eficacitate, functionalitate si independenta fata de mediul pe care este folosit. In schimb JavaScript este un limbaj specializat destul de usor de utilizat, orientat pe obiect, folosit in principal de catre autorii paginilor HTML pentru stabilirea componentelor diferitelor obiecte, precum formularele, imagini sau chiar meniuri dinamice. Scripturile construite in limbajul JavaScript sunt interpretate in momentul incarcarii paginii de catre browser, lucru care nu ramane fara efect asupra eficientei actiunii lor. Trebuie insa recunoscut ca JavaScript poate usura intr-o masura foarte mareserverul web prin realizarea anumitor functii foarte des folosie, precum validarea datelor introduse de catre utilizator.

O comparatie mai formala a limbajelor Java si JavaScript va este prezentata in tabelul urmator:

JavaScript

Java

Este interpretat pe calculatorul clientului de catre browser. Codul sursa nu este compilat.

Codul Java este compilat sub forma de coduri de bytes care sunt preluate de la server si puse in functiune de Java pe partea de client.

JavaScript este un limbaj care se bazeaza pe obiecte definite de la bun inceput. Foloseste prototipizarea. Nu exista diferenta clara intre tipurile de obiecte. JavaScript nu permite adaugarea unor noi clase sau folosirea unor mecanisme cunoscute din alte limbaje obiect, precum mostenire. Proprietatile si metodele pot fi adaugate obiectului in mod dinamic.

Este un limbaj de programare orientat catre obiect. Clasele si obiectele si instantele lor sunt diferentiate, fiind posibila mostenirea in cadrul intregii ierarhii de clase. Nu este posibila adaugarea dinamica la clase a atributelor si a metodelor.

Codul este integrat si adaugat la codul existent in limbajul de descriere al paginii HTML.

Applet-urile folosite pe paginile web sunt in mod clar separate de structura paginii descrise cu ajutorul limbajului HTML.

Nu trebuie declarate tipurile de variabile (lb. Engl.loose typing).

Este obligatorie declararea tipurilor de variabile (lb. Engl. Strong typing).

Foloseste doar trei tipuri de date : logice (boolean), numerice si string (siruri de caractere). Nu exista posibilitatea de adaugare de catre programator a unor noi tipuri de date.

In afara unei game destul de largi de date de baza, exista posibilitatea de construire a unor tipurii proprii de date care rezulta din proprietatile de obiect ale Java.

Referirile la obiecte sunt verificate in timpul executiei programului (asa zisa legare dinamica - lb.engl.dynamic binding).

Referirile la obiecte sunt verificate din momentul interpretarii (asa zisa legare statica - lb.engl.static binding).

JavaScript este mai incet, deoarece codul este interpretat de browser.

Java este mai rapid deoarece codul este deja interpretat in momentul punerii in functiune a aplicatiei sau a apletului.

JavaScript -- avantaje si dezavantaje

Una din calitatile de baza ale limbajului Java Script este faptul ca datorita lui paginile web capata un plus de „personalitate”. In plus, datorita unei sintaxe deosebit de simple se poate insera foarte usor cu ajutorul lui un buton activ pe pagina web, se poate deschide o noua fereastra, un formular sau poate fi construit chiar si un joc nu foarte complicat. Datorita lui este posibila si relativ usoara verificarea datelor introduse de catre utilizator in formularul din documentul HTML, modificarea aspectului paginii si a ferestrelor browserelor, manipularea layer-elor sau contruirea unor alte programe mici complet functionale care actioneaza pe partea de client. Spre deosebire de applet-uri a caror actiune este limitata la un anumit spatiu al ferestrei browserului, scripturile se pot referi practic la intreg document HTML. Este un limbaj destul de simplu de invatat, desi, daca dorim sa cunoastem cu exactitate posibilitatile sale trebuie sa acordal ceva timp invatatului. In acelasi timp constructia lui „libera” face ca un programator ambitios sa poata face intradevar multe.

In ciuda acestor calitati, acest limbaj are si anumite dezavantaje. In primul rand, simplitatea scripturilor care reprezinta pe de o parte un avantaj, nu permite realizarea unor operatii mai complicate din cauza unui numar mic de functii si metode incorporate. In ceea ce priveste acest tip de aplicatii, se potriveste mai degraba applet-ului Java.

In al doilea rand, deoarece scripturile sunt legate de paginile HTML, codul lor nu poate fi ascuns in fata altor navigatori si practic oricine poate copia orice script din document si il poate insera in pagina proprie.

In al treilea rand, anumite script-uri fac ca paginile sa fie incarcate in browser mai incet decat altele care nu au scripturi. In sfarsit, din cauza ca JavaScript se dezvolta si evolueaza in continuare in mod dinamic, lipsesc de pe piata instrumente bune care ar putea ajuta programatorul in munca sa. Acest lucru se refera in primul rand in programele care permit urmarirea corectitudinii realizarii scripturilor. Autorul trebuie sa incerce singur daca programul construit de el functioneaza corect si dupa aceea sa intuiasca eventual care a fost aparitia unei erori. La toate aceste neajunsuri mai putem adauga diferentele dintre optiunile puse la dispozitie si deservirea unor anumite functii in timpul folosirii celor mai populare browsere existente pe piata. In anumite cazuri acest lucru duce la necesitatea recunoasterii versiunii browserului si scrierii de diverse scripturi pentru fiecare dintre ele.

Mediul de programare

In prezent, cand din ce in ce mai multe persoane se ocupa de construirea de aplicatii, practic orice limbaj de programare poseda un help sub forma de instrumente care usureaza si eficientizeaza munca programatorului. Dupa cum am mai amintit nu trebuie sa ne echipam cu un interpretor suplimentar al limbajului JavaScript. Este suficient sa dispunem de un browser relativ nou echipat cu posibilitatea de deservire a acestui limbaj. Tocmai datorita lui vom putea sa observam rezultatele muncii noastre.

JavaScript nu cere un mediu specializat pentru editarea si testarea aplicatiilor. Acest lucru rezulta din din simplitatea acestui limbaj datorita careia poate fi scris un program complex si functional intr-un editor simplu de fisiere text. Anumiti editori (Dreamweaver CS6) ofera chiar facilitati speciale pentru programatorii JavaScript, precum colorarea diferitelor cuvinte ale codului.

Exista un numar mare de programe care usureaza foarte mult munca programatorului, chiar prin preluarea unor sarcini ale acestuia. Aceste aplicatii contin un set de facilitati, cum ar fi posibilitatea selectari anumitor parametri pentru un anumit element sau obiect. Un avantaj important al acestor programe este rapiditatea cu care putem insera noul script pe pagina proprie. Pretul pe care il platim pentru aceasta comoditate, in afara costurilor financiare, este lipsa unei influente mai mari asupra modului de actiune al programului.

SINTAXA

Numim sintaxa a limbajului de programare multimea de principii elementare care descriu modul in care trebuie scrise programele in acest limbaj. Sintaxa cuprinde de obicei aspecte precum regulile de denumire a variabilelor, folosire comentariilor sau modul de scriere a instructiunilor.

In programele JavaScript, spre deosebire de Perl, marimea literelor in denumirile cuvintelor cheie, instructiunilor, obiectelor, functiilor si variabilelor are importanta, limbajul fiind case-sensitive. Acest lucru necesita o consecventa in folosirea denumirilor de variabile, functii etc. deoarece in caz contrar scripturile noastre vor genera erori.

Orice instructiune in Java Script poate (dar nu trebuie) sa se termine cu punct si virgula. O metoda alternativa de separare a instructiunilor care se succed este scrierea lor pe randuri diferite. Totusi, pentru a mentine lizibilitatea programului, sugerez folosirea primei metode.

Cateodata se intampla ca un fragment de program sa necesite o descriere suplimentara care sa explice un cod compilat sau autorul doreste sa „elimine” pentru moment un fragment de program fara stergerea lui, pentru o eventuala refolosire. In acest caz, este suficient sa folosim comentariul. In limbajul Java Script sunt permise doua tipuri de comentarii: liniare si in bloc. In schimb, nu este permisa imbricarea comentariilor.

In final este necesar sa facem cateva observatii referitoare la modul de formatare al codurilor programelor scrise. Cu toate ca JavaScript nu impune nici un fel de principii referitoare la structurile si aspectul codului programului, practica de programare dovedeste fara echivoc ca un cod scris „neglijent” in orice limbaj de programare nu este recomandabil.

Efortul depus in analizarea programelor care seamana cu hieroglifele egiptene in ceea ce priveste dificultatea la citirea unui text scris, nu este proportional cu beneficiile iar acestea sunt mult mai mari in cazul construirii unui program ingrijit si clar. Avand in vedere ca adesea ne intoarcem de mai multe ori la un program gata scris, precum si faptul ca munca webmasterului este rareori una solitara, atunci merita sa acordam putin timp imbunatatirii esteticii codului programului construit. La fel de importanta este inserarea comentariilor care descriu actiunea anumitor instructiuni iar in cazul aplicatiilor foarte dezvoltate, chiar tinerea unei evidente a schimbarilor produse sau a versiuni actuale a programului intr-un fisier separat, atasat programului. Sa retinem ca exagerarea nu este intotdeauna cea mai buna solutie iar toate principiile enumerate mai sus au ca scop usurarea muncii noastre.

Elementele limbajului JavaScript

Tipuri de date

Una dintre componentele de baza ale limbajului de programare sunt tipurile de date accesibile in timpul aplicatiei. Fara ele construirea programelor nu ar fi posibila. In limbajul JavaScript sunt accesibile trei tipuri de date de baza: numerice, string (siruri de caractere) si tipul boolean. Un lucru important este faptul ca JavaScript permite construirea unor tipuri de date complexe pe baza celor trei grupe enumerate mai sus.

Un alt element deosebit de important al limbajului sunt obiectele. JavaScript ofera obiecte specializate pentru folosirea timpului si a datei, precum si pentru lucrul cu expresiile regulate. Un capitol separat trebuie acordat obiectelor specifice aplicatiilor pentru paginile web care ne intereseaza cel mai mult.

Valori numerice

Numerele sunt cel mai simplu si totodata cel mai folosit tip de date. In JavaScript, spre deosebire de majoritatea limbajelor de programare, nu este important daca sunt folosite numere intregi sau numere cu virgula, toate valorile numerice sunt reprezentate in formatul „cu virgula”. Variabilele care nu sunt initializate cu nici o valoare de inceput, au valoarea implicita 0.

Siruri de caractere

Acestea pot fi siruri de litere, cifre, spatii etc. In programul scris in limbajul JavaScript, sirurile de caractere trebuiesc incadrate intre ghilimele si apostrofuri, insa acestea nu pot fi folosite in combinatie. Acest lucru inseamna ca daca la inceputul sirului avem ghilimele, atunci sirul trebuie sa aibe la sfarsit acelasi semn. Variabilele care nu au fost initializate cu nici o valoare de inceput au valoarea „” (sir vid).

Cu toate ca pot fi folosite atat apostrofuri, cat si ghilimele, este mai sigur sa folosim prima forma, aceasta din cauza ca ghilimelele sunt folosite in documentele HTML, in care vom insera scripturile noastre. Folosirea aceleiasi notatii in programele JavaScript duce in cel mai bun caz la ignorarea unor anumite parti de cod, iar in cel mai rau caz poate sa nu permita afisarea corecta a continutului paginii pe Internet.

Folosirea caracterelor „escape”

In afara de literele, cifrele si semnele de puctuatie folosite de obicei, sirurile pot contine secvente de caractere cu o insemnatate specifica. Este vorba de asa zisele caractere „escape”.

Caracterele „escape” sunt niste secvente speciale, compuse din cateva elemente, semne reprezentative, a caror scriere directa intr-un anumit limbaj de programare nu este posibila.

Un exemplu tipic de folosire a caracterelor escape este trecerea la rand nou. Pentru a face aceasta, trebuie sa ne folosim de secventa \n care poate fi folosita in orice program.

Valori booleene

Tipurile de date cu care am facut cunostinta pana cum au cuprins practic un numar limitat de valori. Variabilele de tip boolean se deosebesc in mod destul de evident de cele prezentate pana acum. Ele pot primi doar doua valori: „true” si „false”. In acest fel valorile logice isi gasesc aplicabilitate acolo unde rezultatul unei anumite actiuni ar trebui sa fie complet exprimat prin una dintre valorile true sau false.

Tablouri

In majoritatea limbajelor de programare, structurile de baza sunt tablourile, adica multimi de date ordonate. JavaScript se diferentiaza prin faptul ca tablourile din acest limbaj pot contine orice tip de date, printre care si alte tablouri si/sau obiecte. In cazul in care elementele tablourilor sunt date elementare, atunci vorbim de un tablou cu o singura dimensiune. Numim tablou cu mai multe dimensiuni un tablou ale carui elemente sunt alte tablouri.

Tablourile amintesc putin de foile de calcul in care apar una sau mai multe coloane. Fiecare linie din tablou are un anumit numar (index) care este identificatorul lui unic. Cu ajutorul indexului ne referim la urmatoarele linii ale tabloului. Prima linie are indexul 0, nu 1. Merita retinut acest lucru, deoarece ignorarea acestui amanunt important este de multe ori cauza unor erori in programele scrise.

Exista mai multe moduri de a defini un tablou. Cel mai des folosit se rezuma la atribuirea unei liste de valori, cuprinse in parantezele patrate [] variabilei care desemneaza tabloul respectiv.

Valori nedefinite

In limbajul JavaScript exista un tip special de valori, denumit ndefined, adica valoare nedefinita. Aceste tipuri de valori sunt folosite cel mai adesea atunci cand variabila la care se face referinta nu exista sau nu i-a fost atribuita nici o valoare. Ne putem intalni cu aceasta si atunci cand dorim sa folosim o proprietate inexintenta a unui obiect.

Dificultatea folosirii valorilor nedefinite consta in faptul ca este relativ greu sa scriem un cod JavaScript care sa o trateze in mod clar. Cu toate ca undefined nu inseamna acelasi lucru cu valoare nula, pentru simplificare putem presupune ca este chiar asa (mai ales ca JavaScript trateaza cele doua valori ca fiind la fel de importante).

Valoarea null

Valoarea null este definita in JavaScript prin cuvintele cheie „null”. Aceasta valoare indica faptul ca variabila data nu are atribuita o valoare concreta dar nu este nedefinita. In cazul folosirii obiectelor, „null” indica faptul ca obiectul la care sa facut referire nu exista.

Valoarea nula este folosita adeseori in situatia in care programatorul doreste sa fie sigur ca valoarea initiala a variabilei folosite nu va fi intamplatoare.

In timpul efectuarii operatiilor aritmetice, valoarea null este tratata ca 0. In cazul operatiilor cu variabile logice, null inseamna fals.

Conversia tipurilor de date

O caracteristica destul de importanta a limbajului JavaScript este faptul ca acesta nu obliga programatorul sa indice in mod direct tipul de variabila declarata. Tipurile de date sunt convertite automat in timpul executiei programelor. Limbajul de programare care poseda o astfel de proprietate se numeste limbaj de control dinamic al tipurilor.

Conversia este un mecanism foarte comod cu ajutorul careia JavaScript va automatiza o parte a muncii noastre, dar cu siguranta nu ne va putea ghici gandurile. In consecinta, in cazul in care intentiile noastre vor fi diferite de modul in care JavaScript manipuleaza acest tip de valori, nu vom obtine rezultatele scontate.

In timpul conversiei automate a tipurilor, un rol important il joaca operatorii. De descrierea amanuntita a operatorilor ne vom ocupa putin mai tarziu.

Variabilele

Variabilele sunt denumiri simbolice, asociate unor valori care apartin unui anumit tip. Acestea permit depozitarea si manipularea datelor folosite in program. Denumirile variabilelor trebuie sa indeplineasca anumite conditii. Identificatorii variabilelor limbajului JavaScript sunt siruri de caractere formate din litere mari, mici si din cifre. Aceste siruri trebuie sa inceapa cu litera sau cu liniuta de subliniere „ _”.

Declararea variabilelor

O variabila in limbajul JavaScript poate fi declarata in doua moduri:

  • Atribuind variabilei o valoare oarecare
  • Folosind cuvantul cheie -- var

Cu toate ca nu exista necesitatea cuvantului „var”, este bine ca el sa fie folosit deoarece atunci toate variabilele pot fi declarate la inceputul programului, lucru care permite eliminarea declaratiilor inutile si minimalizarea numarului de potentiale erori legate de denumirea variabilelor.

Evaluarea

Fiecarei variabile careia nu i sa atribuit o valoare de inceput i se atribuie valoare undefined. Modul in care valoarea aceasta va fi interpretata de catre browser depinde in primul rand de metodele de declarare a acestei variabile. In cazul in care a fost trecut cu vederea cuvantul „var”, incercarea de citire a valori genereaza eroare. In cazul in care variabila a fost declarata folosind cuvantul „var”, rezultatul evaluarii va fi o valoare nedefinita.

Domeniul

Deoarece scripturile folosite pe paginile de Internet au cel mai adesea o structura destul de libera, merita sa ne indreptam atentis asupra domeniului lor, adica a cadrului in care sunt folosite. Principiul general spune ca variabilele definite in afara functiilor sunt variabile globale, in timp ce variabilele declarate in interiorul procedurilor si functiilor sunt variabile locale. In cazul in care denumirile variabilelor globale si locale sunt acelasi, in corpul metodelor rolul principal il joaca variabilele locale. Acest fenomen depinde de domeniul de vizibilitate al variabilelor.

Expresii

Folosind operatorii, variabilele, constantele putem construi expresii. Acestea sunt succesiuni de entitati de genul celor amintite, construite in conformitate cu regulile limbajului respectiv. O expresie poate fi ulterior prelucrata de catre interpretor in asa fel incat calcularea valorii ei sa fie posibila. In limbajul JavaScript avem de a face cu doua tipuri de expresii. Primele dintre ele atribuie valori variabilelor iar cel de-al doilea tip este reprezentat de expresii care au o anumita valoare la evaluare.

Operatorii

Avem deja la dispozitie constante si variabile carora suntem in stare sa le atribuim anumite valori. Putem sa construim expresii cu ajutorul lor. Pentru a efectua acum operatiuni cu acestea este absolut necesar sa facem cunostinta cu operatorii pe care ii putem folosi in programele JavaScript.

Operatorii aritmetici

Operatorii aritmetici reprezinta grupul de operatori cel mai numeros si mai des folosit dintre toti cei pe care ii putem folosi in scripturile noastre. Argumentele lor sunt intotdeauna variabile si/sau valori numerice. Lista opertaorilor aritmetici va este prezentata in tabelul urmator.

OPERATORUL OPERATIE EXEMPLU DE FOLOSIRE REZULTATUL
+ Adunare 2.5+7 9.5
- Scadere 10-4 6
* Inmultire 5*7 35
/ Impartire 20/5 4
% Modulo 20%3 2
++ Incrementare i=3;i++ i=4
-- Decrementare i=3;i-- i=2
- Negare i=-3; j=-i j ==3

Operatorii de atribuire

In JavaScript sunt accesibili cativa operatorii de atribuire. In afara de operatorul elementar „=”, care atribuie variabilei din partea stanga valoarea care se afla in partea dreapta, exista de asemenea operatorii mai complecsi de atribuire. Acestia permit, odata cu atribuirea efectuarea anumitor operatii aritmetice. Modul de efectuare a operatiilor standard realizate cu ajutorul operatorilor de atribuire va este ilustrat in exemplele de mai jos.

        x = 1 //variabila x are valoare 1
        x += 2 //atribuim lui x vechea sa valoare, marita cu 2. Variabila are valoarea 3
        y = 10
        y -= 5 //scadem din y valoarea 5. Variabila y are valoarea 5
        z = 2
        z *= 3 //inmultirea cu 3. Variabila are valoarea 6
        a = 12
        a /= 4 //impartirea prin 4. Variabila are valoarea 3
        b = 16
        b %= 5 //impartirea modulo 5. Variabila are valoarea 1
    

Operatorii de comparare (relationali)

Scriind programe in limbajul JavaScript trebuie sa verificam relatiile care exista intre valorile variabilelor folosite. Cel mai adesea este vorba de comparatii aritmetice, insa de multe ori operanzii (argumentele operatorului) sunt siruri de caractere. Interpretorul JavaScript realizeaza toate comparatiile pe baza valorilor operanzilor. Acest lucru inseamna ca doua variabile sunt egale daca au aceeasi valoare.

Trebuie retinut ca JavaScript diferentiaza doua modalitati de verificare a egalitatii. Cel mai adesea sunt folositi operatorii „==” si „!=” care folosesc la compararea valorilor independent de tipul lor. In cazul in care tipul de operanzi este diferit atunci interpretorul incearca sa efectueze conversia in tipul corespunzator. O trasatura caracteristica pentru limbajul JavaScript este diferentierea operatorilor „===” si „!==” care in afara de compararea valorilor, compara si tipul lor.

Descrierea sumara a operatorilor relationali, impreuna cu cateva exemple este prezentata in tabelul urmator.

OPERATORUL

SEMNIFICATIA

EXEMPLU

==

Egalitate

3 == a
„3” ==a
„3” == 3

!=

Diferit

a !=2

===

Egalitate stricta (conformitatea valorilor si tipurilor)

a === 5

!==

Inegalitate stricta (neconformitatea valorilor si/sau a tipurilor)

a !== 3
3 !== „3”

Mai mare decat

a > b

>=

Mai mare sau egal decat

a >= b

Mai mic decat

a < b

<=

Mai mic sau egal decat

a <= b

Operatorii logici

Dupa cum puteti cu usurinta sa va imaginati, operatorii logici sunt folositi in operatiile cu valori de tip boolean iar rezultatul actiunii lor este tot o valoare logica. Interesant este ca rezultatul actiunii operatorilor de conjunctie si disjunctie este nu atat valoarea logica, cat valoarea unuia dintre operanzi. Prin aceasta, operatorii logici pot fi folositii, de asemenea, fata de variabilele de alt tip decat cel logic.

OPERATORUL

SEMNIFICATIE

REZULTAT

&&

Conjunctia „si”

a && b adevarat daca a este adevarat si b este adevarat, in caz contrar este fals

||

Alternativa „sau”

a || b adevarat daca cel putin una dintre valori este adevarata

!

Negare „not”

!a adevarat daca a are valoarea fals si viceversa

Operatorul de concatenare

Operatorul „+”, in afara posibilitati de adunare a numerelor, permite si concatenarea (unirea) sirurilor de caractere. In cazul in care numai unul dintre argumente este un sir de caractere, atunci are loc conversia automata la string.

Instructiuni

Expresiile construite cu ajutorul operatorilor constituie un fel de „fraze” in limbajul de programare. Totusi, in afara de faptul ca ele calculeaza anumite valori, nu sunt elemente active ale limbajului care sa influenteze efectiv actiunile programului in limbajul JavaScript. In acest scop trebuie folosite instructiuni. Fiecare program contine instructiuni, de obicei despartite intre ele se semnul punct si virgula. Va voi prezenta acum toate instructiunile de baza care ne vor folosi la scrierea programelor JavaScript.

Instructiuni conditionale

Instructiunile conditionale sunt folosite pentru a lua o anumita dcizie in program, in functie de rezultatul evaluarii unei anumite entitati. Cu alte cuvinte, instructiunea conditionala ne premite sa alegem „drumul” pe care il va parcurge programul in timpul executiei sale. JavaScript ofera doua instructiuni conditionale: if ... else si switch.

Instructiunea if ...else

Instructiunea if este metoda principala prin care se poate decide care bloc de instructiuni va fi executat la un anumit moment in program. Sintaxa instructiunii if este urmatoarea:

    	if (conditie_if){
        	//bloc de instructiuni 1
        }
    	else{
        	bloc de instructiuni 2
        }
    

Daca este indeplinita conditia if atunci este executat bloc de instructiuni 1 , in caz contrar se executa bloc de instructiuni 2.

Instructiunea switch

O instructiune conditionala mult mai rafinata este switch. If permite alegerea uneia dintre cele doua ramuri de executie, in timp ce instructiunea switch permite alegerea unuia dintre mai multe seturi de instructiuni. Sintaxa instructiunii switch este urmatoarea:

        switch (expresia){
	        case eticheta_1: bloc de instructiuni 1;
    	    [breack;]
        	case eticheta_2: bloc de instructiuni 2;
	        [breack;]
	        ...
    	    [default: bloc de instructiuni;]
        }
    

Alegerea blocului de instructiuni ce urmeaza a fi executat se face pe baza valorilor expresiei din paranteza, dupa cuvantul cheie switch. Valoarea acestei expresii este comparata pe rand cu valorile care apar dupa fiecare cuvant case. In cazul in care cele doua valori sunt egale, urmeaza executia instructiunilor de dupa case-ul respectiv, pana la intalnirea instructiunii break, care opreste executia intregii instructiuni switch dupa executia blocului respectiv.

Trebuie retinut ca instructiunea break este optionala, lucru care permite executia tuturor blocurilor de instructiuni indiferent de nivelul case la care ne aflam, pornind de la case-ul la care are loc egalitatea expresiei de dupa switch cu eticheta case-ului respectiv, pana la intalnirea unei instructiuni breack.

Optional este cuvantul cheie default. El indica blocul de instructiuni care trebuie executat in cazul in care nu a avut loc nici o potrivire a a expresiei de dupa switch cu vreuna dintre etichetele de la case-uri.

Instructiuni repetitive

Aproape in orice program complex trebuie sa existe posibilitatea realizari de mai multe ori a unor anumite instructiuni. Pentru asta se folosesc instructiuni speciale denumite instrunctiuni repetitive. Ele permit repetarea unor anumite blocuri de instructiuni, conditionind numarul de repetitii de indeplinirea unor conditii anume. In limbajul JavaScript exista trei tipuri de cicluri (instructiuni repetitive): for, do...while si while.

Instructiunea for

Instructiunea for folosita in scripturile JavaScript nu se deosebeste in principiu cu cele de la alte limbaje de programare. Sintaxa instructiunii este urmatoarea:

        for([conditia_de_inceput];[test];[schimbarea_indexului]){
        	//bloc de instructiuni;
        }
             sau altfel scris:
        for(i=1;i<=10;i++){
        	//bloc de instructiunii;
        }
    

Comoditatea si universalitatea acestui tip de instructiune repetitiva rezulta din constructia intuitiva a sa. Ciclul contine o variabila care indeplineste rolul de contor al repetarilor (conditia de inceput), fiind in mod sistematic modificat (schimbarea indexului), iar o noua iteratie a blocului de instructiuni va avea loc in functie de rezultatul evaluarii conditiei (test).

Instructiunea do... while

Instructiunea do... while serveste la iterarea executiei unui bloc de instructiuni, atata timp cat conditia data este adevarata, adica atata timp cat valoarea expresiei date drept conditie este „adevarat”. Sintaxa do... while este urmatoarea:

    	do{
        	// bloc de instructiuni;
        }
        while(conditie);
    

Atrag atentia asupra faptului ca in cazul acestui ciclu conditia este verificata la sfarsitul executiei blocului de instructiuni. Aceasta inseamna ca blocul de instructiuni se va executa cel putin o data.

Instructiunea while

Atunci cand ne uitam mai atent la lantul while, cu siguranta facem o analogie cu instructiunea if. Asa dupa cum if este instructiunea conditionala de baza, while este cea mai simpla instructiune repetitiva in limbajul JavaScript si in alte limbaje de programare unde este prezenta. ”. Sintaxa while este urmatoarea:

    	while(conditie){
        	// bloc de instructiuni;
        }
    

Dupa cum este lesne de observat, bloc de instructiuni este executat atata timp cat este indeplinita conditia. Deci de data aceasta exista posibilitatea ca instructiunile blocului sa nu se execute niciodata.

Instructiunea break

Dupa cum am amintit in timpul descrierii instructiunilor anterioare, nu trebuie sa se execute intotdeauna toate instructiunile unui anumit bloc. Pentru intreruperea sirului de instructiuni precum si pentru transmiterea comenzii catre urmatorul bloc logic al programului, se foloseste instructiunea break.

Instructiunea continue

Cateodata apare necesitatea intreruperii blocului de instructiuni in curs de executie dar se continua cu urmatoarea iteratie a ciclului fara a iesi din el, asa cum se intampla in cazul folosirii instructiunii break. Pentru aceasta se foloseste instructiunea continue.

Aceste cateva randuri reprezinta doar o parte din ceea ce reprezinta acest limbaj de programare si cu aceste cuvinte inchei si raman cu speranta ca v-am fost de folos si ati invatat cate ceva.