Pillole di Javascript: stringhe

Il teorema della scimmia instancabile afferma che una scimmia che prema a caso i tasti di una tastiera per un tempo infinitamente lungo quasi certamente riuscirà a comporre qualsiasi testo prefissato. Fonte: https://it.wikipedia.org/wiki/Teorema_della_scimmia_instancabile

Javascript definisce una stringa come una sequenza immutabile di caratteri. I caratteri sono rappresentati in memoria usando la codifica UFT-16 e i simboli Unicode. La codifica prevede che un singolo carattere occupi 16 bit, ma che possa all’occorrenza espandersi fino a 4 byte (codifica multi-byte) per rappresentare i caratteri associati ai code-point di valore più grande.

Tuttavia il linguaggio e le funzioni messe a disposizione di Javascript non gestiscono i caratteri multi-byte, rischiando l’introduzione di errori di codifica. Ad esempio la lunghezza di una stringa è definita come il numero di coppie di byte (16 bit) presenti nella stringa, per cui un carattere da 4 byte è considerato come due caratteri distinti. Di contro i caratteri che richiedono più di 16 bit sono piuttosto esotici e di scarso utilizzo.

Un letterale stringa è delimitato dai caratteri apice o doppio apice. All’interno della stringa è possibile usare il backslash “\” per eseguire l’escape dei caratteri. Ad esempio si può eseguire l’escape del carattere usato come delimitatore (l’apice o il doppio apice), per poterlo inserire nella stringa senza terminarla. E’ anche possibile inserire caratteri non stampabili, come new-line o tabulazioni. Con la sequenza “\u” si può indicare il code-point di un carattere Unicode in esadecimale. Alcuni esempi:

var s1 = "hello, world"; // delimitata dal doppio apice
var s2 = 'hello, world'; // delimitata dal singolo apice
var s3 = "hello\nworld"; // con carattere di nuova riga
var s4 = "pi = \u03c0"; // con carattere Unicode (pi greco)

E’ anche possibile fare l’escape di un carattere di nuova riga per continuare il letterale sulla riga successiva:

var s = "questo è\
un unico letterale"; // l'accapo non sarà compreso nella stringa

Si possono concatenare due stringhe con l’operatore “+”:

var s = "hello, " + "world";

Il tipo stringa è immutabile, perché è un primitivo. Quindi in caso di operazioni sulle strighe, come la concatenazione, in realtà il valore ritornato è una nuova variabile.

Si possono confrontare due stringhe con l’operatore “==”. Due stringhe sono considerate uguali se hanno la stessa lunghezza e gli stessi caratteri nelle stesse posizioni.

Si può accedere ai singoli caratteri di una stringa tramite la notazione a parentesi quadre, simile a quella usata per gli array. Non è però possibile modificare i singoli caratteri con questa notazione.

var s = "hello";
s[1]; // ritorna la stringa "e"
s[1] = "a"; // non solleva errore ma non fa nulla
s[1]; // ritorna ancora la stringa "e"

Oltre il tipo primitivo esiste anche il relativo wrapper String, che è discusso in questa altra pillola di Javascript: http://stylecode.altervista.org/blog/pillole-di-javascript-i-wrapper-dei-tipi-primitivi/

Un tipo particolare di stringa letterale sono i template. Il delimitatore di un template è il carattere di apice inverso: ” ` “. All’interno di un template si possono inserire delle espressioni delimitate dalle parentesi graffe e precedute dal simbolo dollaro:

var stringa = `uno più due fa ${1 + 2}`; // risultato: "uno più due fa 3"

Al momento della valutazione del template, l’espressione sarà valutata, e il suo risultato sarà inserito al posto dell’espressione stessa. Nei template è anche possibile andare a capo, e il carattere di nuova riga sarà compreso nella stringa risultante:

var stringa = `prima riga
seconda riga`;
Precedente Pillole di Javascript: numeri e aritmetica Successivo Pillole di Javascript: conversione tra primitivi