Linguaggi di programmazione

JavaScript, ovvero l'incubo

Un esempio di codice JavaScript:

function add(a, b) {
    return a + b;
}

Si tratta di una semplicissima funzione, il cui evidente scopo è calcolare la somma di due numeri. Per esempio:

x = add(12, 45);
console.log('Sum = ' + x);

Sulla console del browser, otteniamo:

Sum = 57

Fin qui tutto bene, ma ora proviamo invece:

x = add([1, 2, 3], 'abracadabra');
console.log('Sum = ' + x);

Stavolta otteniamo:

Sum = 1,2,3abracadabra

Stiamo passando alla funzione un array e una stringa, e otteniamo un risultato!

La gestione dei tipi è assolutamente lasca, quasi senza vincoli di sorta. Per i fautori del linguaggio, questa si chiama libertà, per me si chiama invece anarchia totale, e rappresenta un incubo.

Se scrivessimo lo stesso codice in C#, in Java o in Dart, ma anche in Kotlin o in Swift, non riusciremmo nemmeno a finire di scriverlo senza incorrere in una segnalazione di errore, e tantomeno riusciremmo a compilare e eseguire il codice in questione.

Eppure, JavaScript è uno dei linguaggi più diffusi, e tra quelli con la base di codice più ampia!

Per darsene una ragione, occorre risalire al 1995, quando Netscape voleva includere un linguaggio nel suo browser, e voleva farlo in tempi molto stretti. L'obiettivo era permettere di interagire con la pagina, con piccoli script, in modo da renderla dinamica. Data l'esigenza limitata, e la fretta, un linguaggio con una gestione grossolana dei tipi poteva essere adeguato.

Poi, per lungo tempo, non c'è stato altro modo per poter scrivere software client side nelle applicazioni web. Di conseguenza, negli anni a seguire, la macchia si è allargata a dismisura, con lo sviluppo di librerie sempre più ampie e sofisticate.

E benché nel frattempo il linguaggio si sia evoluto, ciò non è mai avvenuto nel senso di rendere più restrittivo l'utilizzo dei tipi.


La fine di un incubo?

Per fortuna questo stato di cose sta cambiando, su vari fronti:

  • Il linguaggio TypeScript, simile a JavaScript, ma con un sistema dei tipi; per essere eseguito, viene tradotto in JavaScript;
  • Linguaggi multi-piattaforma, come Dart; per essere eseguito in ambiente web, viene tradotto in JavaScript;
  • La tecnologia WebAssembly, che dovrebbe permettere di eseguire nel browser programmi in linguaggi diversi da JavaScript; uso il condizionale poiché al momento ha forti limitazioni (*).

Nel capitolo sulla versatilità c'è un esempio di applicazione web client-side interattiva sviluppata in linguaggio Dart.

(*) Cito dal sito MDNBy itself, WebAssembly cannot currently directly access the DOM; it can only call JavaScript, passing in integer and floating point primitive data types.


Giorgio Barchiesi
Albo degli Ingegneri Sez. A, N. 4027 della Prov. di Trento
P.IVA 02370260222, C.F. BRC GRG 58L26 C794R

Copyright © 2015-2024 Giorgio Barchiesi - Tutti i diritti riservati