Una re-introduzione a Javascript

  • Revision slug: Una_re-introduzione_a_Javascript
  • Revision title: Una re-introduzione a Javascript
  • Revision id: 129556
  • Created:
  • Creator: Kyuzz
  • Is current revision? No
  • Comment /* Panoramica */

Revision Content

Introduzione

Perché una re-introduzione? Perché è ragionevole ritenere che JavaScript sia il linguaggio di programmazione meno compreso del mondo. Spesso deriso come un giocattolo, dietro la sua ingannevole semplicità si celano alcune caratteristiche molto potenti. Il 2005 ha visto il lancio di un certo numero di applicazioni JavaScript di alto profilo, mostrando che una più profonda conoscenza di questa tecnologia è requisito importante per ogni sviluppatore web.

Può essere utile cominciando facendoci un'idea della storia di questo linguaggio. JavaScript è stato creato nel 1995 da Brendan Eich, uno sviluppatore della Netscape, e fu inizialmente rilasciato con Netscape 2 all'inizio del 1996. La sua designazione doveva essere originariamente LiveScript, ma il suo nome fu cambiato con una malaugurata decisione di marketing, cercando di sfruttare la popolarità del linguaggio Java della Sun Microsystems, a dispetto del fatto che i due linguaggi avessero veramente poco in comune. Ciò è stato da allora fonte di confusione.

Microsoft rilasciò una versione abbastanza compatibile del linguaggio alcuni mesi dopo, la chiamò JScript e la rilasciò con IE 3. Netscape inviò le specifiche del linguaggio alla Ecma International, un'organizzazione europea per gli standard, che rilasciò la prima edizione dello standard ECMAScript nel 1997. Lo standard ricevette un aggiornamento significativo con la pubblicazione della sua terza edizione (ECMAScript edition 3) nel 1999, che è rimasta sostanzialmente immutata sino ad oggi, anche se attualmente l'edizione 4 è in fase di lavorazione.

Questa stabilità è una grande novità per gli sviluppatori, dato che ha dato il tempo alle varie implementazioni di tenere il passo. In questo articolo focalizzerò l'attenzione quasi esclusivamente sul dialetto della terza edizione. Per familiarità, continuerò a riferirmi al linguaggio con il termine JavaScript.

A differenza della maggior parte dei linguaggi di programmazione, JavaScript non ha i concetti di input e output. E' concepito per funzionare come linguaggio di scripting in un ambiente host, e il compito di fornire dei meccanismi per la comunicazione con il mondo esterno spetta a questo ambiente host. Il più comune ambiente host è il browser, ma possiamo trovare interpreti JavaScript anche in Adobe Acrobat, in Photoshop, nel motore degli Yahoo! Widget, e altri software.

Panoramica

Inizieremo dando un'occhiata all'aspetto fondamentale di ogni linguaggio: i tipi. I programmi JavaScript manipolano dei valori, e questi valori appartengono tutti a un tipo. I tipi in JavaScript sono:

... e Undefined e Null, che sono alquanto strani. E gli array, che sono un particolare tipo di oggetto. E le date e le espressioni regolari, che sono oggetti aggiuntivi che JavaScript ci fornisce. E per essere tecnicamente accurati, le funzioni sono solamente un particolare tipo di oggetto. Il diagramma dei tipi in JavaScript è quindi il seguente:

  • Number (Numeri)
  • String (Stringhe)
  • Boolean (Booleani)
  • Object (Oggetti)
    • Function (Funzioni)
    • Array
    • Date (Date)
    • RegExp (Espressioni Regolari)
  • Null
  • Undefined

Ci sono anche inoltre alcuni tipi predefiniti di errori, ma le cose sono molto più semplici se manteniamo il nostro diagramma così com'è.

Numeri

Secondo le specifiche, i numeri in JavaScript sono dei "valori a 64 bit a doppia precisione nel formato IEEE 754". Ciò ha interessanti conseguenze. In JavaScript non ci sono numeri interi, quindi bisogna prestare attenzione con le operazioni aritmetiche se si è abituati a usare C o Java. Ecco cosa succede in un'operazione come questa:

0.1 + 0.2 = 0.30000000000000004

Gli operatori aritmetici sono supportati e includono l'addizione, la sottrazione, il modulo aritmetico (o resto) e così via. C'è anche un oggetto predefinito che ho dimenticato di menzionare prima chiamato Math e che fornisce costanti e funzioni matematiche più avanzate:

Math.sin(3.5);
d = Math.PI * r * r;

E' possibile convertire una stringa in numero intero usando la funzione predefinita parseInt(). Questa funzione prende la base di numerazione come secondo argomento opzionale, che bisognerebbe sempre passare alla funzione:

> parseInt("123", 10)
123
> parseInt("010", 10)
10

Se la base di numerazione non viene passata alla funzione, questo può portare a risultati strani:

> parseInt("010")
8

Questo accade perché la funzione parseInt ha deciso di trattare la stringa come numero in base 8, perché c'è uno zero iniziale.

Per convertire un numero in base 2 in numero intero, basta cambiare la base:

> parseInt("11", 2)
3

Un valore speciale chiamato NaN (abbreviazione per "Not a Number", "Non numerico") viene ritornato se la stringa non contiene un valore numerico:

> parseInt("ciao", 10)
NaN

NaN è "tossico": se esso viene passato in ingresso a qualsiasi operazione aritmentica, il risultato sarà anch'esso NaN:

> NaN + 5
NaN

E' possibile verificare se è un valore è NaN usando la funzione predefinita isNaN():

> isNaN(NaN)
true

JavaScript possiede anche i valori speciali Infinity e -Infinity (infinito e meno infinito):

> 1 / 0
Infinity
> -1 / 0
-Infinity

Revision Source

<p>
</p>
<h3 name="Introduzione"> Introduzione </h3>
<p>Perché una re-introduzione? Perché è ragionevole ritenere che <a href="it/JavaScript">JavaScript</a> sia il <a class="external" href="http://javascript.crockford.com/javascript.html">linguaggio di programmazione meno compreso del mondo</a>. Spesso deriso come un giocattolo, dietro la sua ingannevole semplicità si celano alcune caratteristiche molto potenti. Il 2005 ha visto il lancio di un certo numero di applicazioni JavaScript di alto profilo, mostrando che una più profonda conoscenza di questa tecnologia è requisito importante per ogni sviluppatore web.
</p><p>Può essere utile cominciando facendoci un'idea della storia di questo linguaggio. JavaScript è stato creato nel 1995 da Brendan Eich, uno sviluppatore della Netscape, e fu inizialmente rilasciato con Netscape 2 all'inizio del 1996. La sua designazione doveva essere originariamente LiveScript, ma il suo nome fu cambiato con una malaugurata decisione di marketing, cercando di sfruttare la popolarità del linguaggio Java della Sun Microsystems, a dispetto del fatto che i due linguaggi avessero veramente poco in comune. Ciò è stato da allora fonte di confusione.
</p><p>Microsoft rilasciò una versione abbastanza compatibile del linguaggio alcuni mesi dopo, la chiamò JScript e la rilasciò con IE 3. Netscape inviò le specifiche del linguaggio alla <a class="external" href="http://www.ecma-international.org/">Ecma International</a>, un'organizzazione europea per gli standard, che rilasciò la prima edizione dello standard <a href="it/ECMAScript">ECMAScript</a> nel 1997. Lo standard ricevette un aggiornamento significativo con la pubblicazione della sua terza edizione (<a class="external" href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">ECMAScript edition 3</a>) nel 1999, che è rimasta sostanzialmente immutata sino ad oggi, anche se attualmente l'edizione 4 è in fase di lavorazione.
</p><p>Questa stabilità è una grande novità per gli sviluppatori, dato che ha dato il tempo alle varie implementazioni di tenere il passo. In questo articolo focalizzerò l'attenzione quasi esclusivamente sul dialetto della terza edizione. Per familiarità, continuerò a riferirmi al linguaggio con il termine JavaScript.
</p><p>A differenza della maggior parte dei linguaggi di programmazione, JavaScript non ha i concetti di input e output. E' concepito per funzionare come linguaggio di scripting in un ambiente host, e il compito di fornire dei meccanismi per la comunicazione con il mondo esterno spetta a questo ambiente host. Il più comune ambiente host è il browser, ma possiamo trovare interpreti JavaScript anche in Adobe Acrobat, in Photoshop, nel motore degli Yahoo! Widget, e altri software.
</p>
<h3 name="Panoramica"> Panoramica </h3>
<p>Inizieremo dando un'occhiata all'aspetto fondamentale di ogni linguaggio: i tipi. I programmi JavaScript manipolano dei valori, e questi valori appartengono tutti a un tipo. I tipi in JavaScript sono:
</p>
<ul><li> <a href="it/Core_JavaScript_1.5_Reference/Global_Objects/Number">Numeri</a>
</li><li> <a href="it/Core_JavaScript_1.5_Reference/Global_Objects/String">Stringhe</a>
</li><li> <a href="it/Core_JavaScript_1.5_Reference/Global_Objects/Boolean">Booleani</a>
</li><li> <a href="it/Core_JavaScript_1.5_Reference/Global_Objects/Function">Funzioni</a>
</li><li> <a href="it/Core_JavaScript_1.5_Reference/Global_Objects/Object">Oggetti</a>
</li></ul>
<p>... e Undefined e Null, che sono alquanto strani. E gli <a href="it/Core_JavaScript_1.5_Reference/Global_Objects/Array">array</a>, che sono un particolare tipo di oggetto. E le <a href="it/Core_JavaScript_1.5_Reference/Global_Objects/Date">date</a> e le <a href="it/Core_JavaScript_1.5_Reference/Global_Objects/RegExp">espressioni regolari</a>, che sono oggetti aggiuntivi che JavaScript ci fornisce. E per essere tecnicamente accurati, le funzioni sono solamente un particolare tipo di oggetto. Il diagramma dei tipi in JavaScript è quindi il seguente:
</p>
<ul><li> Number (Numeri)
</li><li> String (Stringhe)
</li><li> Boolean (Booleani)
</li><li> Object (Oggetti)
<ul><li> Function (Funzioni)
</li><li> Array
</li><li> Date (Date)
</li><li> RegExp (Espressioni Regolari)
</li></ul>
</li><li> Null
</li><li> Undefined
</li></ul>
<p>Ci sono anche inoltre alcuni tipi predefiniti di <a href="it/Core_JavaScript_1.5_Reference/Global_Objects/Error">errori</a>, ma le cose sono molto più semplici se manteniamo il nostro diagramma così com'è.
</p>
<h3 name="Numeri"> Numeri </h3>
<p>Secondo le specifiche, i numeri in JavaScript sono dei "valori a 64 bit a doppia precisione nel formato IEEE 754". Ciò ha interessanti conseguenze. In JavaScript non ci sono numeri interi, quindi bisogna prestare attenzione con le operazioni aritmetiche se si è abituati a usare C o Java. Ecco cosa succede in un'operazione come questa:
</p>
<pre class="eval">0.1 + 0.2 = 0.30000000000000004
</pre>
<p>Gli <a href="it/Core_JavaScript_1.5_Reference/Operators/Arithmetic_Operators">operatori aritmetici</a> sono supportati e includono l'addizione, la sottrazione, il modulo aritmetico (o resto) e così via. C'è anche un oggetto predefinito che ho dimenticato di menzionare prima chiamato <a href="it/Core_JavaScript_1.5_Reference/Global_Objects/Math">Math</a> e che fornisce costanti e funzioni matematiche più avanzate:
</p>
<pre class="eval">Math.sin(3.5);
d = Math.PI * r * r;
</pre>
<p>E' possibile convertire una stringa in numero intero usando la funzione predefinita <code><a href="it/Core_JavaScript_1.5_Reference/Global_Functions/parseInt">parseInt()</a></code>. Questa funzione prende la base di numerazione come secondo argomento opzionale, che bisognerebbe sempre passare alla funzione:
</p>
<pre class="eval">&gt; parseInt("123", 10)
123
&gt; parseInt("010", 10)
10
</pre>
<p>Se la base di numerazione non viene passata alla funzione, questo può portare a risultati strani:
</p>
<pre class="eval">&gt; parseInt("010")
8
</pre>
<p>Questo accade perché la funzione <code>parseInt</code> ha deciso di trattare la stringa come numero in base 8, perché c'è uno zero iniziale.
</p><p>Per convertire un numero in base 2 in numero intero, basta cambiare la base:
</p>
<pre class="eval">&gt; parseInt("11", 2)
3
</pre>
<p>Un valore speciale chiamato <code><a href="it/Core_JavaScript_1.5_Reference/Global_Properties/NaN">NaN</a></code> (abbreviazione per "Not a Number", "Non numerico") viene ritornato se la stringa non contiene un valore numerico:
</p>
<pre class="eval">&gt; parseInt("ciao", 10)
NaN
</pre>
<p><code>NaN</code> è "tossico": se esso viene passato in ingresso a qualsiasi operazione aritmentica, il risultato sarà anch'esso <code>NaN</code>:
</p>
<pre class="eval">&gt; NaN + 5
NaN
</pre>
<p>E' possibile verificare se è un valore è <code>NaN</code> usando la funzione predefinita <code><a href="it/Core_JavaScript_1.5_Reference/Global_Functions/isNaN">isNaN()</a></code>:
</p>
<pre class="eval">&gt; isNaN(NaN)
true
</pre>
<p>JavaScript possiede anche i valori speciali <code><a href="it/Core_JavaScript_1.5_Reference/Global_Properties/Infinity">Infinity</a></code> e <code>-Infinity</code> (infinito e meno infinito):
</p>
<pre class="eval">&gt; 1 / 0
Infinity
&gt; -1 / 0
-Infinity
</pre>
Revert to this revision