SlideShare a Scribd company logo
1 of 21
Mirko Ravaioli mirko.ravaioli@unibo.it 346.6635057
JavaScript
Si… può… fareee!!!
2Modena 18 Novembre 2010
Obiettivo di questo breve ma intenso talk:
Spunti per un utilizzo non comune delle potenzialità del linguaggio
JavaSript
NON parleremo di sintassi stretta del linguaggio
NON parleremo dei vari framework nati negli ultimi anni basati sul
linguaggio JavaScript (prototype, jquery, extjs…)
Metteremo il focus sull’ingegnerizzazione del codice
3Modena 18 Novembre 2010
 JavaScript è un linguaggio di scripting sviluppato per dare
interattività alle pagine HTML
 Può essere inserito direttamente nelle pagine Web ed è in
pratica lo standard client-side
 Il suo nome ufficiale è ECMAScript
 E’ diventato standard ECMA (ECMA-262) nel 1997
 E’ anche uno standard ISO (ISO/IEC 16262)
 Sviluppato inizialmente da Netscape da Brendan Eich (il nome
originale era Mocha poi LiveScript) e introdotto in Netscape 2 nel
1995
 In seguito anche Microsoft ha lavorato sul linguaggio
producendo una sua variante chiamata JScript
 L'ultimo standard, del dicembre 1999, è ECMA-262 Edition 3, e
corrisponde a JavaScript 1.5
 L’ultima versione 27 Luglio 2010, è 1.8.5 (supportato da Mozilla
Firefox 4 e Explorer 9)
Cos’è JavaScript?
4Modena 18 Novembre 2010
5Modena 18 Novembre 2010
JavaScript e Java
 Al di la del nome Java è JavaScript sono due cose
completamente diverse
 L’unica similitudine è legata al fatto di aver entrambi adottato la
sintassi del C
 Esistono profonde differenze
 JavaScript è interpretato e non compilato
 JavaScript è object-based ma non class-based
 Esiste il concetto di oggetto
 Non esiste il concetto di classe
 JavaScript è debolmente tipizzato (weakly typed):
 Non è necessario definire il tipo di una variabile
 Attenzione però: questo non vuol dire che i dati non
abbiano un tipo (sono le variabili a non averlo in modo
statico)
 JavaScript è debolmente orientato ad oggetti
6Modena 18 Novembre 2010
Tipi primitivi: numeri e booleani
 Javascript prevede pochi tipi primitivi: numeri, booleani e
stringhe (forse! ☺)
 Numeri (number):
 Sono rappresentati in formato floating point a 8 byte
(64bit, formato IEEE)
 Non c’è distinzione fra interi e reali
 Esiste il valore speciali NaN (not a number) per le
operazioni non ammesse
 Esiste il valore infinite (ad esempio per la divisione per
zero)
 Booleani (boolean): ammettono i valori true e false
 Non esistono né tipi interi né il tipo carattere
7Modena 18 Novembre 2010
Oggetti
 Ogni cosa in JavaScript è o un valore primitivo o un oggetto.
 Gli oggetti sono entità dotate di unicità (sono uguali solo a sé
stessi) e che associano nomi di proprietà a valori
 Definendo un costruttore, è possibile definire oggetti.
 JavaScript è un linguaggio orientato a oggetti basato su
prototipi.
 Ciò significa che l'eredità è fra oggetti, non fra classi (JavaScript
non ha classi).
 Gli oggetti ereditano le proprietà dai loro prototipi.
8Modena 18 Novembre 2010
Oggetti
 Le proprietà non sono definite a priori: possono essere aggiunte
dinamicamente
 Vengono creati usando l’operatore new
var o = new Object()
Attenzione: Object() è un costruttore e non una classe
 Un oggetto appena creato è completamente vuoto: non ha né
proprietà né metodi
 Gli oggetti in realtà sono array associativi: strutture composite
con i cui elementi sono accessibili mediante un indice di tipo
stringa (nome) anziché attraverso un indice numerico
9Modena 18 Novembre 2010
10Modena 18 Novembre 2010
Stringhe? Oggetti o cosa?
 Potremmo dire che mentre in Java sono oggetti che sembrano
dati di tipo primitivo in JavaScript sono dati di tipo primitivo che
sembrano oggetti
 Sono sequenze arbitrarie di caratteri in formato UNICODE a 16 bit
e sono immutabili come in Java
 Esiste la possibilità di definire costanti stringa delimitate da apici
singoli ('ciao') o doppi ("ciao").
 E’ possibile la concatenazione con l’operatore +
 E’ possibile la comparazione con gli operatori < > >= <= e !=
 Possiamo invocare metodi su una stringa o accedere ai suoi
attributi
 Non sono però oggetti e la possibilità di trattarli come tali nasce
da due caratteristiche:
 Esiste un tipo wrapper String che è un oggetto
 JavaScript fa il boxing in automatico come C#
11Modena 18 Novembre 2010
Tipi valore e tipi riferimento
 Si può tentare di interpretare il sistema dei tipi di JavaScript
usando una logica simile a quella di C#
 Si può quindi distinguere fra tipi valore e tipi riferimento
 Numeri e booleani sono tipi valore
 Array e Oggetti sono tipi riferimento
 Per le stringhe abbiamo ancora una situazione incerta: Pur
essendo un tipo primitivo sono un tipo riferimento
 Le stringhe Javascript sono l’equivalente informatico
dell’ornitorinco!
12Modena 18 Novembre 2010
Funzioni, costanti funzione, costrutture Function
 Ammettono parametri che sono privi di tipo
 Restituisce un valore il cui tipo non viene definito
 La mancanza di tipo è coerente con la scelta fatta per le variabili
 Le funzioni possono essere definite utilizzando la parola chiave
function
 Esistono costanti funzione (function literal) che permettono di
definire una funzione e poi di assegnarla ad una variabile con una
sintassi decisamente inusuale:
var sum = function(x,y) { return x+y; }
Una funzione può essere anche creata usando un costruttore
denominato Function (le funzioni sono quindi equivalenti in
qualche modo agli oggetti)
var sum = new Function("x","y","return x+y;");
13Modena 18 Novembre 2010
Costruttori
 Un costruttore è una funzione che ha come scopo quello di
costruire un oggetto
 Se viene invocato con new riceve l’oggetto appena creato e può
aggiungere proprietà e metodi
 L’oggetto da costruire è accessibile con la parola chiave this
var obj = new Object();
obj.x = 12;
obj.y = 3;
obj.somma = function() {return this.x +
this.y};
14Modena 18 Novembre 2010
Costruttori
 Un costruttore è una funzione che ha come scopo quello di
costruire un oggetto
 Se viene invocato con new riceve l’oggetto appena creato e può
aggiungere proprietà e metodi
 L’oggetto da costruire è accessibile con la parola chiave this
function Rectangle(w, h) {
this.w = w;
this.h = h;
this.area = function()
{ return this.w*this.h; }
this.perimeter = function()
{ return 2*(this.w+this.h);}
}
var r = new Rectangle(5,4);
alert(r.area());
15Modena 18 Novembre 2010
Costanti oggetto
 Le costanti oggetto (object literal) sono racchiuse fra parentesi
graffe e contengono un’elenco di attributi nella forma nome: valore
var nomeoggetto = {prop1: val1;
prop2: val2...}
 Usando le costanti oggetto creiamo un oggetto e le proprietà
(valorizzate) nello stesso momento
var obj = new Object();
obj.x = 12;
obj.y = 3;
Obj.tot = 15;
var obj = {
x : 12,
y : 3,
tot : 15
}
16Modena 18 Novembre 2010
Programmazione ad Oggetti
La programmazione orientata agli oggetti (OOP, Object Oriented
Programming) è un paradigma di programmazione, che prevede la
definizione di oggetti software che interagiscono gli uni con gli altri
attraverso lo scambio di messaggi.
In genere, un linguaggio di programmazione è definito a oggetti
quando permetta di implementare i tre meccanismi seguenti:
 Incapsulamento
 Ereditarietà
 Polimorfismo
17Modena 18 Novembre 2010
function prova()
{
this.prop1 = 12;
this.prop2 = ‘valore’;
this.azione = function() {
}
}
18Modena 18 Novembre 2010
var Prova = {
prop1: 10,
prop2: ‘valore’,
metodo1: function() {
},
metodo2: function() {
}
}
19Modena 18 Novembre 2010
var Prova = function() {
var _prop1 = 1;
var _prop2 = 2;
function _metodoPrivato1() {
}
function _metodoPrivato2() {
}
return {
metodo1: function() {
_metodoPrivato1();
},
metodo2: function() {
_metodoPrivato2();
}
}
}
20Modena 18 Novembre 2010
var Prova = Class.create({
prop1 : 10,
prop2 : 'valore',
metoto1 : function() {
},
metoto2 : function() {
}
});
21Modena 18 Novembre 2010
Cerchio TriangoloRettangolo Trapezio
.perimetro()
.area()
obj.perimetro()
obj.area()

More Related Content

What's hot

Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggettimariacaporale
 
Programmazione Funzionale per tutti
Programmazione Funzionale per tuttiProgrammazione Funzionale per tutti
Programmazione Funzionale per tuttiSalvatore Sorrentino
 
Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggettiAnna_1969
 
programmazione ad oggetti
programmazione ad oggettiprogrammazione ad oggetti
programmazione ad oggettimariacaporale
 
Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Manuel Scapolan
 
Lezione 10 - Programmazione Ad Oggetti, Vb Accenni
Lezione 10 - Programmazione Ad Oggetti, Vb AccenniLezione 10 - Programmazione Ad Oggetti, Vb Accenni
Lezione 10 - Programmazione Ad Oggetti, Vb AccenniRice Cipriani
 
C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class LibraryManuel Scapolan
 
Presentazione Oz - Mozart
Presentazione Oz - MozartPresentazione Oz - Mozart
Presentazione Oz - Mozartfede
 
Programmaoggetti[1]
Programmaoggetti[1]Programmaoggetti[1]
Programmaoggetti[1]Anna_1969
 

What's hot (12)

Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggetti
 
Programmazione Funzionale per tutti
Programmazione Funzionale per tuttiProgrammazione Funzionale per tutti
Programmazione Funzionale per tutti
 
Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggetti
 
Lezione01
Lezione01Lezione01
Lezione01
 
programmazione ad oggetti
programmazione ad oggettiprogrammazione ad oggetti
programmazione ad oggetti
 
Dai delegati a LINQ con C#
Dai delegati a LINQ con C#Dai delegati a LINQ con C#
Dai delegati a LINQ con C#
 
Lezione 10 - Programmazione Ad Oggetti, Vb Accenni
Lezione 10 - Programmazione Ad Oggetti, Vb AccenniLezione 10 - Programmazione Ad Oggetti, Vb Accenni
Lezione 10 - Programmazione Ad Oggetti, Vb Accenni
 
C# e la Framework Class Library
C# e la Framework Class LibraryC# e la Framework Class Library
C# e la Framework Class Library
 
Presentazione Oz - Mozart
Presentazione Oz - MozartPresentazione Oz - Mozart
Presentazione Oz - Mozart
 
Variabili Java
Variabili JavaVariabili Java
Variabili Java
 
Programmaoggetti[1]
Programmaoggetti[1]Programmaoggetti[1]
Programmaoggetti[1]
 

Viewers also liked

Децентралізація освіти in Poland
Децентралізація освіти in PolandДецентралізація освіти in Poland
Децентралізація освіти in PolandАлександр Аиро
 
Проблеми педагогічної кваліметрії компетентнісно-орієнтованого навчання
Проблеми педагогічної кваліметрії компетентнісно-орієнтованого навчанняПроблеми педагогічної кваліметрії компетентнісно-орієнтованого навчання
Проблеми педагогічної кваліметрії компетентнісно-орієнтованого навчанняАлександр Аиро
 
Corso avanzato di Tecnologie WEB - jquery e d3js
Corso avanzato di Tecnologie WEB - jquery e d3jsCorso avanzato di Tecnologie WEB - jquery e d3js
Corso avanzato di Tecnologie WEB - jquery e d3jsStudiabo
 
Внутренняя сеть БГПУ
Внутренняя сеть БГПУВнутренняя сеть БГПУ
Внутренняя сеть БГПУMatevosyan Artur
 
Γ. Χατζητέγας- Διεθνές φαινόμενο το φροντιστήριο
Γ. Χατζητέγας- Διεθνές φαινόμενο το φροντιστήριοΓ. Χατζητέγας- Διεθνές φαινόμενο το φροντιστήριο
Γ. Χατζητέγας- Διεθνές φαινόμενο το φροντιστήριοmathisi
 
Air Vice Marshal John Blackburn on 21st Century Force Design
Air Vice Marshal John Blackburn on 21st Century Force DesignAir Vice Marshal John Blackburn on 21st Century Force Design
Air Vice Marshal John Blackburn on 21st Century Force DesignICSA, LLC
 
IAB-Europe-Attitudes-towards-Programmatic-Advertising-report_June-2016-v3
IAB-Europe-Attitudes-towards-Programmatic-Advertising-report_June-2016-v3IAB-Europe-Attitudes-towards-Programmatic-Advertising-report_June-2016-v3
IAB-Europe-Attitudes-towards-Programmatic-Advertising-report_June-2016-v3Graham Wylie
 
Usiamo bene WordPress
Usiamo bene WordPressUsiamo bene WordPress
Usiamo bene WordPressPaolo Valenti
 
«Причини невисокої якості знань учнів і шляхи їх подолання»
«Причини  невисокої якості знань учнів і шляхи їх подолання» «Причини  невисокої якості знань учнів і шляхи їх подолання»
«Причини невисокої якості знань учнів і шляхи їх подолання» sasha884
 
Captain Nick Walker on the Queen Elizabeth Class Aircraft Carriers
Captain Nick Walker on the Queen Elizabeth Class Aircraft CarriersCaptain Nick Walker on the Queen Elizabeth Class Aircraft Carriers
Captain Nick Walker on the Queen Elizabeth Class Aircraft CarriersICSA, LLC
 

Viewers also liked (20)

Linking words
Linking wordsLinking words
Linking words
 
Децентралізація освіти in Poland
Децентралізація освіти in PolandДецентралізація освіти in Poland
Децентралізація освіти in Poland
 
HNCJ-Conference-Report
HNCJ-Conference-ReportHNCJ-Conference-Report
HNCJ-Conference-Report
 
Seminarski 1(1)
Seminarski 1(1)Seminarski 1(1)
Seminarski 1(1)
 
Python base lezione1
Python base lezione1Python base lezione1
Python base lezione1
 
Linking Words
Linking WordsLinking Words
Linking Words
 
Madecassoside 34540-22-2-api
Madecassoside 34540-22-2-apiMadecassoside 34540-22-2-api
Madecassoside 34540-22-2-api
 
CV SIDDARTH
CV SIDDARTHCV SIDDARTH
CV SIDDARTH
 
Проблеми педагогічної кваліметрії компетентнісно-орієнтованого навчання
Проблеми педагогічної кваліметрії компетентнісно-орієнтованого навчанняПроблеми педагогічної кваліметрії компетентнісно-орієнтованого навчання
Проблеми педагогічної кваліметрії компетентнісно-орієнтованого навчання
 
My selling
My sellingMy selling
My selling
 
Corso avanzato di Tecnologie WEB - jquery e d3js
Corso avanzato di Tecnologie WEB - jquery e d3jsCorso avanzato di Tecnologie WEB - jquery e d3js
Corso avanzato di Tecnologie WEB - jquery e d3js
 
Внутренняя сеть БГПУ
Внутренняя сеть БГПУВнутренняя сеть БГПУ
Внутренняя сеть БГПУ
 
Γ. Χατζητέγας- Διεθνές φαινόμενο το φροντιστήριο
Γ. Χατζητέγας- Διεθνές φαινόμενο το φροντιστήριοΓ. Χατζητέγας- Διεθνές φαινόμενο το φροντιστήριο
Γ. Χατζητέγας- Διεθνές φαινόμενο το φροντιστήριο
 
Istraživački rad - Centralna banka Japana
Istraživački rad - Centralna banka JapanaIstraživački rad - Centralna banka Japana
Istraživački rad - Centralna banka Japana
 
Air Vice Marshal John Blackburn on 21st Century Force Design
Air Vice Marshal John Blackburn on 21st Century Force DesignAir Vice Marshal John Blackburn on 21st Century Force Design
Air Vice Marshal John Blackburn on 21st Century Force Design
 
Linking words.
Linking words.Linking words.
Linking words.
 
IAB-Europe-Attitudes-towards-Programmatic-Advertising-report_June-2016-v3
IAB-Europe-Attitudes-towards-Programmatic-Advertising-report_June-2016-v3IAB-Europe-Attitudes-towards-Programmatic-Advertising-report_June-2016-v3
IAB-Europe-Attitudes-towards-Programmatic-Advertising-report_June-2016-v3
 
Usiamo bene WordPress
Usiamo bene WordPressUsiamo bene WordPress
Usiamo bene WordPress
 
«Причини невисокої якості знань учнів і шляхи їх подолання»
«Причини  невисокої якості знань учнів і шляхи їх подолання» «Причини  невисокої якості знань учнів і шляхи їх подолання»
«Причини невисокої якості знань учнів і шляхи їх подолання»
 
Captain Nick Walker on the Queen Elizabeth Class Aircraft Carriers
Captain Nick Walker on the Queen Elizabeth Class Aircraft CarriersCaptain Nick Walker on the Queen Elizabeth Class Aircraft Carriers
Captain Nick Walker on the Queen Elizabeth Class Aircraft Carriers
 

Similar to Diversamente Javascript: si.. può.. fare! (di Mirko Ravaioli)

Introduzione a scala prima parte
Introduzione a scala   prima parteIntroduzione a scala   prima parte
Introduzione a scala prima parteOnofrio Panzarino
 
Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Massimiliano Dessì
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScriptGiovanni Buffa
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018Marco Parenzan
 
Sviluppare app native per iOS
Sviluppare app native per iOSSviluppare app native per iOS
Sviluppare app native per iOSGaspare Novara
 
Sviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto DigitaleSviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto Digitalelostrettodigitale
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java BaseK-Tech Formazione
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con ScalaFranco Lombardo
 
Py a3 python-metaprogramming
Py a3 python-metaprogrammingPy a3 python-metaprogramming
Py a3 python-metaprogrammingMajong DevJfu
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48hFLT.lab
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of KotlinErik Minarini
 
lezione1.pdf
lezione1.pdflezione1.pdf
lezione1.pdfdttdigi
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsJUG Genova
 

Similar to Diversamente Javascript: si.. può.. fare! (di Mirko Ravaioli) (20)

Introduzione a scala prima parte
Introduzione a scala   prima parteIntroduzione a scala   prima parte
Introduzione a scala prima parte
 
Scala Programming Linux Day 2009
Scala Programming Linux Day 2009Scala Programming Linux Day 2009
Scala Programming Linux Day 2009
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScript
 
What's new in C# 7
What's new in C# 7What's new in C# 7
What's new in C# 7
 
Office & VBA - Giorno 6
Office & VBA - Giorno 6Office & VBA - Giorno 6
Office & VBA - Giorno 6
 
Programming iOS lezione 3
Programming iOS lezione 3Programming iOS lezione 3
Programming iOS lezione 3
 
Vb.Net
Vb.NetVb.Net
Vb.Net
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
 
Office & VBA - Giorno 7
Office & VBA - Giorno 7Office & VBA - Giorno 7
Office & VBA - Giorno 7
 
Sviluppare app native per iOS
Sviluppare app native per iOSSviluppare app native per iOS
Sviluppare app native per iOS
 
Sviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto DigitaleSviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto Digitale
 
Lezione01
Lezione01Lezione01
Lezione01
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
Py a3 python-metaprogramming
Py a3 python-metaprogrammingPy a3 python-metaprogramming
Py a3 python-metaprogramming
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48h
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of Kotlin
 
R Vectors
R VectorsR Vectors
R Vectors
 
lezione1.pdf
lezione1.pdflezione1.pdf
lezione1.pdf
 
LINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMsLINQ, Entities Framework & ORMs
LINQ, Entities Framework & ORMs
 

Recently uploaded

Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIinfogdgmi
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 

Recently uploaded (6)

Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AI
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 

Diversamente Javascript: si.. può.. fare! (di Mirko Ravaioli)

  • 1. Mirko Ravaioli mirko.ravaioli@unibo.it 346.6635057 JavaScript Si… può… fareee!!!
  • 2. 2Modena 18 Novembre 2010 Obiettivo di questo breve ma intenso talk: Spunti per un utilizzo non comune delle potenzialità del linguaggio JavaSript NON parleremo di sintassi stretta del linguaggio NON parleremo dei vari framework nati negli ultimi anni basati sul linguaggio JavaScript (prototype, jquery, extjs…) Metteremo il focus sull’ingegnerizzazione del codice
  • 3. 3Modena 18 Novembre 2010  JavaScript è un linguaggio di scripting sviluppato per dare interattività alle pagine HTML  Può essere inserito direttamente nelle pagine Web ed è in pratica lo standard client-side  Il suo nome ufficiale è ECMAScript  E’ diventato standard ECMA (ECMA-262) nel 1997  E’ anche uno standard ISO (ISO/IEC 16262)  Sviluppato inizialmente da Netscape da Brendan Eich (il nome originale era Mocha poi LiveScript) e introdotto in Netscape 2 nel 1995  In seguito anche Microsoft ha lavorato sul linguaggio producendo una sua variante chiamata JScript  L'ultimo standard, del dicembre 1999, è ECMA-262 Edition 3, e corrisponde a JavaScript 1.5  L’ultima versione 27 Luglio 2010, è 1.8.5 (supportato da Mozilla Firefox 4 e Explorer 9) Cos’è JavaScript?
  • 5. 5Modena 18 Novembre 2010 JavaScript e Java  Al di la del nome Java è JavaScript sono due cose completamente diverse  L’unica similitudine è legata al fatto di aver entrambi adottato la sintassi del C  Esistono profonde differenze  JavaScript è interpretato e non compilato  JavaScript è object-based ma non class-based  Esiste il concetto di oggetto  Non esiste il concetto di classe  JavaScript è debolmente tipizzato (weakly typed):  Non è necessario definire il tipo di una variabile  Attenzione però: questo non vuol dire che i dati non abbiano un tipo (sono le variabili a non averlo in modo statico)  JavaScript è debolmente orientato ad oggetti
  • 6. 6Modena 18 Novembre 2010 Tipi primitivi: numeri e booleani  Javascript prevede pochi tipi primitivi: numeri, booleani e stringhe (forse! ☺)  Numeri (number):  Sono rappresentati in formato floating point a 8 byte (64bit, formato IEEE)  Non c’è distinzione fra interi e reali  Esiste il valore speciali NaN (not a number) per le operazioni non ammesse  Esiste il valore infinite (ad esempio per la divisione per zero)  Booleani (boolean): ammettono i valori true e false  Non esistono né tipi interi né il tipo carattere
  • 7. 7Modena 18 Novembre 2010 Oggetti  Ogni cosa in JavaScript è o un valore primitivo o un oggetto.  Gli oggetti sono entità dotate di unicità (sono uguali solo a sé stessi) e che associano nomi di proprietà a valori  Definendo un costruttore, è possibile definire oggetti.  JavaScript è un linguaggio orientato a oggetti basato su prototipi.  Ciò significa che l'eredità è fra oggetti, non fra classi (JavaScript non ha classi).  Gli oggetti ereditano le proprietà dai loro prototipi.
  • 8. 8Modena 18 Novembre 2010 Oggetti  Le proprietà non sono definite a priori: possono essere aggiunte dinamicamente  Vengono creati usando l’operatore new var o = new Object() Attenzione: Object() è un costruttore e non una classe  Un oggetto appena creato è completamente vuoto: non ha né proprietà né metodi  Gli oggetti in realtà sono array associativi: strutture composite con i cui elementi sono accessibili mediante un indice di tipo stringa (nome) anziché attraverso un indice numerico
  • 10. 10Modena 18 Novembre 2010 Stringhe? Oggetti o cosa?  Potremmo dire che mentre in Java sono oggetti che sembrano dati di tipo primitivo in JavaScript sono dati di tipo primitivo che sembrano oggetti  Sono sequenze arbitrarie di caratteri in formato UNICODE a 16 bit e sono immutabili come in Java  Esiste la possibilità di definire costanti stringa delimitate da apici singoli ('ciao') o doppi ("ciao").  E’ possibile la concatenazione con l’operatore +  E’ possibile la comparazione con gli operatori < > >= <= e !=  Possiamo invocare metodi su una stringa o accedere ai suoi attributi  Non sono però oggetti e la possibilità di trattarli come tali nasce da due caratteristiche:  Esiste un tipo wrapper String che è un oggetto  JavaScript fa il boxing in automatico come C#
  • 11. 11Modena 18 Novembre 2010 Tipi valore e tipi riferimento  Si può tentare di interpretare il sistema dei tipi di JavaScript usando una logica simile a quella di C#  Si può quindi distinguere fra tipi valore e tipi riferimento  Numeri e booleani sono tipi valore  Array e Oggetti sono tipi riferimento  Per le stringhe abbiamo ancora una situazione incerta: Pur essendo un tipo primitivo sono un tipo riferimento  Le stringhe Javascript sono l’equivalente informatico dell’ornitorinco!
  • 12. 12Modena 18 Novembre 2010 Funzioni, costanti funzione, costrutture Function  Ammettono parametri che sono privi di tipo  Restituisce un valore il cui tipo non viene definito  La mancanza di tipo è coerente con la scelta fatta per le variabili  Le funzioni possono essere definite utilizzando la parola chiave function  Esistono costanti funzione (function literal) che permettono di definire una funzione e poi di assegnarla ad una variabile con una sintassi decisamente inusuale: var sum = function(x,y) { return x+y; } Una funzione può essere anche creata usando un costruttore denominato Function (le funzioni sono quindi equivalenti in qualche modo agli oggetti) var sum = new Function("x","y","return x+y;");
  • 13. 13Modena 18 Novembre 2010 Costruttori  Un costruttore è una funzione che ha come scopo quello di costruire un oggetto  Se viene invocato con new riceve l’oggetto appena creato e può aggiungere proprietà e metodi  L’oggetto da costruire è accessibile con la parola chiave this var obj = new Object(); obj.x = 12; obj.y = 3; obj.somma = function() {return this.x + this.y};
  • 14. 14Modena 18 Novembre 2010 Costruttori  Un costruttore è una funzione che ha come scopo quello di costruire un oggetto  Se viene invocato con new riceve l’oggetto appena creato e può aggiungere proprietà e metodi  L’oggetto da costruire è accessibile con la parola chiave this function Rectangle(w, h) { this.w = w; this.h = h; this.area = function() { return this.w*this.h; } this.perimeter = function() { return 2*(this.w+this.h);} } var r = new Rectangle(5,4); alert(r.area());
  • 15. 15Modena 18 Novembre 2010 Costanti oggetto  Le costanti oggetto (object literal) sono racchiuse fra parentesi graffe e contengono un’elenco di attributi nella forma nome: valore var nomeoggetto = {prop1: val1; prop2: val2...}  Usando le costanti oggetto creiamo un oggetto e le proprietà (valorizzate) nello stesso momento var obj = new Object(); obj.x = 12; obj.y = 3; Obj.tot = 15; var obj = { x : 12, y : 3, tot : 15 }
  • 16. 16Modena 18 Novembre 2010 Programmazione ad Oggetti La programmazione orientata agli oggetti (OOP, Object Oriented Programming) è un paradigma di programmazione, che prevede la definizione di oggetti software che interagiscono gli uni con gli altri attraverso lo scambio di messaggi. In genere, un linguaggio di programmazione è definito a oggetti quando permetta di implementare i tre meccanismi seguenti:  Incapsulamento  Ereditarietà  Polimorfismo
  • 17. 17Modena 18 Novembre 2010 function prova() { this.prop1 = 12; this.prop2 = ‘valore’; this.azione = function() { } }
  • 18. 18Modena 18 Novembre 2010 var Prova = { prop1: 10, prop2: ‘valore’, metodo1: function() { }, metodo2: function() { } }
  • 19. 19Modena 18 Novembre 2010 var Prova = function() { var _prop1 = 1; var _prop2 = 2; function _metodoPrivato1() { } function _metodoPrivato2() { } return { metodo1: function() { _metodoPrivato1(); }, metodo2: function() { _metodoPrivato2(); } } }
  • 20. 20Modena 18 Novembre 2010 var Prova = Class.create({ prop1 : 10, prop2 : 'valore', metoto1 : function() { }, metoto2 : function() { } });
  • 21. 21Modena 18 Novembre 2010 Cerchio TriangoloRettangolo Trapezio .perimetro() .area() obj.perimetro() obj.area()