Escolar Documentos
Profissional Documentos
Cultura Documentos
programare Web
avansat
ECMAScript
imperativ
la C
funcional
calculfuncii anonime, nchideri (closures),
pseudo-obiectual
via prototipuri
(obiectele motenesc alte obiecte, nu clase)
dinamic
variabilele i pot schimba tipul
pe parcursul rulrii programului
navigator Web
navigator Web
navigator Web
injectarea de cod JavaScript
n documentele HTML via elementul <script>
navigator Web
injectarea de cod JavaScript
n documentele HTML via elementul <script>
cod extern referit printr-un URL
vs. cod inclus direct n pagina Web
Cuvinte rezervate:
break else new var case finally return void catch
for switch while continue function this with default
if throw delete in try do instanceof typeof
caracteristici: sintaxa
caracteristici: sintaxa
Number
reprezentare n dubl precizie
stocare pe 64 bii standardul IEEE 754
developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Number
String
secvene de caractere Unicode
fiecare caracter ocup 16 bii (UTF-16)
developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/String
Boolean
expresii ce se pot evalua ca fiind true/false
developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Boolean
Object
aproape totul e considerat ca fiind obiect,
inclusiv funciile
Null
semnific nicio valoare
Undefined
are semnificaia nicio valoare asignat nc
valori speciale:
Infinity
Infinity
caracteristici: variabile
de evitat aa ceva!
caracteristici: variabile
caracteristici: operatori
caracteristici: operatori
1 == true true
a se folosi: 1 === true false
inhib conversia
tipurilor de date
caracteristici: operatori
operand
undefined
null
de tip Boolean
de tip Number
de tip String
Function
orice alte valori
rezultat
'undefined'
'object'
'boolean'
'number'
'string'
'function'
'object'
caracteristici: operatori
caracteristici: control
caracteristici: control
caracteristici: control
caracteristici: control
Perechi numevaloare
caracteristici: obiecte
Perechi numevaloare
numele este desemnat de un ir de caractere
(i.e., expresie de tip String)
valoarea poate fi de orice tip,
inclusiv null sau undefined
caracteristici: obiecte
caracteristici: obiecte
caracteristici: obiecte
Obiecte predefinite:
Global
Function
String
Boolean
Math
Object
Array
RegExp
Number
Date
de studiat developer.mozilla.org/JavaScript/Reference/Global_Objects
caracteristici: obiecte
caracteristici: obiecte
caracteristici: obiecte
ob.nume = "Tux";
var nume = ob.nume;
caracteristici: obiecte
ob.nume = "Tux";
var nume = ob.nume;
echivalent cu:
ob["nume"] = "Tux";
var nume = ob["nume"];
caracteristici: obiecte
Declarare + asignare:
var pinguin = {
nume: "Tux",
proprietati: {
culoare: "verde",
marime: 17
}
}
accesare:
pinguin.proprietati.marime 17
pinguin["proprietati"]["culoare"] verde
caracteristici: obiecte
caracteristici: obiecte
caracteristici: tablouri
caracteristici: tablouri
caracteristici: tablouri
caracteristici: tablouri
caracteristici: tablouri
var vector = [ ];
vector[0] = "zero";
vector[new Date ().getTime ()] = "now";
vector[3.14] = "pi";
for (var elem in vector) {
console.log ("vector[" + elem + "] = " + vector[elem] +
", typeof( " + elem +") == " + typeof (elem));
}
adaptare dup John Kugelman (2009)
caracteristici: funcii
developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Function
caracteristici: funcii
caracteristici: funcii
caracteristici: funcii
caracteristici: funcii
suma += arguments[iter];
funcie closure
}
return suma / arguments.length;
};
caracteristici: funcii
pseudo-clase
(utilizarea
constructorilor)
caracteristici: obiecte
caracteristici: obiecte
caracteristici: obiecte
caracteristici: obiecte
internal property
folosit exclusiv de procesorul ECMAScript (JavaScript)
caracteristici: proprieti
caracteristici: proprieti
[[Construct]]
[[Call]]
[[Code]]
[[Scope]]
manipularea proprietilor
indic obiectele ce pot fi extinse
asociate obiectelor executabile
(funcii)
desemneaz codul & contextul
unei obiect de tip funcie
[[Prototype]]
caracteristici: proprieti
developer.mozilla.org/Web/JavaScript/Reference/Global_Objects/Object/prototype
caracteristici: prototipuri
caracteristici: prototipuri
caracteristici: prototipuri
caracteristici: prototipuri
true
true
false
true
false
caracteristici: prototipuri
Animal.prototype.oferaNumeMare = function () {
return this.nume.toUpperCase ();
};
tux.oferaNumeMare () "TUX"
[object Object]
Animal.prototype.toString = function () {
return '<animal>' + this.oferaNume () + '</animal>';
};
tux.toString ()
"<animal>Tux</animal>"
ablon general:
ClasaDeBaza = function () { /* */ };
SubClasa = function () { /* */ };
SubClasa.prototype = new ClasaDeBaza ();
caracteristici
caracteristici: ncapsulare
caracteristici: ncapsulare
caracteristici: ncapsulare
https://developer.mozilla.org/en/JavaScript/Guide/Closures
caracteristici: closures
ablonul general:
// specificarea unei expresii de tip funcie
( function () {
// variabilele i funciile vor fi vizibile doar aici
// variabilele globale pot fi accesate
} ( ) );
caracteristici: closures
de reinut!
de reinut!
de reinut!
de reinut!
de reinut!
Atenie la dependena
de mediul de execuie!
de reinut!
de reinut!
http://json.org/
json
json
procesare recurgnd la
obiectul predefinit JSON
instrumente
instrumente
www.codefellows.org/blog/a-list-of-foundational-javascript-tools
http://www.ecma-international.org/ecma-262/6.0/
lista facilitilor:
https://github.com/lukehoban/es6features
http://es6-features.org/
instrumente ES6: https://github.com/addyosmani/es6-tools
http://profs.info.uaic.ro/~busaco/teach/courses/cliw/web-film.html#week13
node.js: caracterizare
Node.js is a JavaScript runtime built on Chromes
V8 JavaScript engine. Node.js uses an event-driven,
non-blocking I/O model that makes it lightweight and
efficient. Node.js package ecosystem npm is the largest
ecosystem of open source libraries in the world.
Node.js is designed to build
scalable network applications.
io.js o variant Node.js conceput n ES6 al crei codsurs a fost ncorporat n Node.js 4 (2015)
node.js
node.js: caracterizare
node.js:
Uzual, o aplicaie
Web caracterizare
realizeaz un numr mare de
operaii n acest caz, asincrone de intrare/ieire
evented I/O
node.js: caracterizare
ateapt i trateaz
evenimente de
interaciune
(onclick, onmouseover,
onkeypressed,)
procesare
bazat pe
evenimente
evented/
event-based
cod JS executat de
client (browser Web)
ateapt i trateaz
cereri (evenimente)
provenite de la client(i)
node.js: caracterizare
node.js: caracterizare
server tipic
server node.js
node.js: caracterizare
http://strongloop.com/strongblog/node-js-is-faster-than-java/
node.js: caracterizare
funcionaliti suplimentare
oferite de module administrate cu npm https://npmjs.org/
node program.js
node.js: caracterizare
invocarea unei
metode oferit de
un obiect predefinit
node.js: exemplu
node.js: exemplu
http.createServer (
// crem un server Web
// funcie anonim ce trateaz o cerere i trimite un rspuns
function (cerere, raspuns) {
// afim la consola serverului mesaje de diagnostic
console.log ('Am primit o cerere...');
// stabilim valori pentru diverse cmpuri din antetul mesajului HTTP
raspuns.writeHead (200, { 'Content-Type': 'text/html' });
// emitem rspunsul propriu-zis conform tipului MIME (aici, cod HTML)
raspuns.end ('<html><body><h1>Salutari</h1></body></html>');
}
// serverul ascult cereri la portul 8080 al mainii locale
).listen (8080, "127.0.0.1");
console.log ('Serverul creat asteapta cereri la http://127.0.0.1:8080/');
http.get ('http://127.0.0.1:8080/',
// emite o cerere HTTP
function (raspuns) {
console.log ('Am primit raspuns de la server -- cod HTTP: '
+ raspuns.statusCode);
// statusCode: 200, 404,
})
// tratm diverse evenimente via funcii (eventual, anonime) de tip callback
.on ('error',
// eroare
function (e) { console.log ('Eroare: ' + e.message); })
.on ('response',
// receptare rspuns de la server
function (raspuns) {
// exist date de procesat
raspuns.on ('data', function (date) {
console.log ('Continut receptionat: ' + date);
});
}
);
node.js: module
node.js: module
node.js: module fs
node.js: module fs
// crem un server Web care trimite fiecrui client secvena valorilor unui contor
var server = http.createServer ().listen (8080, '127.0.0.1');
https://nodejs.org/api/events.html
node.js: evenimente
Exemplificare:
utilizarea modulului node-sqlite-purejs
pentru operaii cu baze de date relaionale SQLite
nu depinde de alte module
detalii la https://www.npmjs.com/package/node-sqlite-purejs
var nume = [ 'Tuxy', 'Pingou', 'Ux', 'Ping', 'Ingu', // nume fictive de pinguini
'Nes', 'Xut', 'Nipu', 'Guin', 'Esc' ];
// operaii SQL uzuale: creare tabel, inserare date, interogare
sql.open ('./pinguini.sqlite', {}, function (eroare, bd) {
bd.exec ('CREATE TABLE tucsi (id integer, nume text, varsta integer)');
for (var id = 0; id < 10; id++) { // inserm date (vrsta e generat aleatoriu)
bd.exec ('INSERT INTO tucsi VALUES (' + id + ', "'
+ nume[id] + '", ' + Math.round (Math.random () * 60) + ');');
};
n cursurile
viitoare
https://developer.mozilla.org/DOMParser
node.js: module
http://nodeframework.com/
Derby
Express
Flatiron
Geddy
Locomotive
Meteor
Mojito
SocketStream
TowerJS
Framework minimalist
ce ncurajeaz dezvoltarea de aplicaii Web
tradiionale reprezentri multiple via hipermedia
bazate pe un unic punct de acces: SPA (Single Page App)
hibride (Web + aplicaii native)
http://expressjs.com/
app.js
package.json
bin
data
node_modules
body-parser
cookie-parser
debug
express
lib
jade
morgan
public
images
javascripts
stylesheets
style.css
routes
index.js
users.js
views
error.jade
index.jade
layout.jade
Procesarea n timp-real
a datelor JSON oferite de API-uri (multiple)
dezvoltarea de aplicaii Web la nivel de server
de la JavaScript la Node.js
caracteristici, module, exemple
rezumat
episodul viitor:
un model de date pentru Web: familia XML