Linguaggi di programmazione

JavaScript, ovvero l'incubo

Un esempio di codice JavaScript:

function add(a, b) {
    return a + b;
}
console.log(add([1, 2, 3], "xyz"));

Questo codice viene eseguito senza errori, e si ottiene:

1,2,3xyz

Abbiamo una funzione che dovrebbe servire a sommare due numeri, le stiamo passando 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!

L'origine di ciò è riconducibile a Netscape, che nel 1995 voleva includere un linguaggio nel suo browser, e voleva farlo in pochissimo tempo. 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.

Purtroppo, la macchia si è poi allargata a dismisura. Nel tempo sono nate librerie sempre più ampie e sofisticate. Il linguaggio si è evoluto, ma mai nel senso di rendere più restrittivo l'utilizzo dei tipi. E per lungo tempo, non c'è stato altro modo per poter scrivere software client side nelle applicazioni web.


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