JavaScript - L'oggetto TypedArray

Ciao there, futuri superstar del coding! ? Oggi ci imbarcheremo in un viaggio emozionante nel mondo degli TypedArrays in JavaScript. Non preoccuparti se sei nuovo alla programmazione - sarò la tua guida amichevole, e prenderemo tutto passo per passo. Quindi, prenditi la tua bevanda preferita, mettiti comodo, e tuffiamoci!

JavaScript - TypedArray

Cos'è un TypedArray?

Immagina di organizzare una grande festa (chi non adora una buona festa, vero?). Devi tenere traccia di quanti bicchieri, piatti e posate hai. Un TypedArray in JavaScript fa più o meno la stessa cosa - ci aiuta a organizzare e conservare efficientemente tipi di dati specifici.

Un TypedArray è un tipo speciale di array in JavaScript che può contenere solo numeri di un tipo specifico. È come avere scatole separate per le forchette, le cucchiai e i coltelli invece di gettarli tutti in un grande cassetto.

// Creazione di un TypedArray di interi a 8 bit
const myArray = new Int8Array(5);
console.log(myArray); // Output: Int8Array(5) [0, 0, 0, 0, 0]

In questo esempio, abbiamo creato un TypedArray che può contenere cinque interi a 8 bit. È come impostare cinque piccole scatole, ciascuna capace di contenere un numero tra -128 e 127.

Perché TypedArray?

Potresti chiederti, "Perché preoccuparsi di TypedArrays quando abbiamo già array regolari?" Ottima domanda! Gli TypedArrays hanno alcuni superpoteri che li rendono perfetti per certe situazioni:

  1. Velocità: Sono più veloci per le operazioni numeriche.
  2. Efficienza della memoria: Utilizzano una quantità fisso di memoria.
  3. Compatibilità: Si integrano bene con i dati binari e altre lingue.

È come usare uno strumento specializzato invece di un coltello svizzero - a volte, hai bisogno di quel perfetto adattamento!

Oggetti TypedArray

JavaScript offre vari tipi di TypedArrays, ciascuno progettato per tipi di numeri e dimensioni diversi. Ecco un bel elenco organizzato:

TypedArray Descrizione Intervallo
Int8Array Intero a 8 bit con segno -128 a 127
Uint8Array Intero a 8 bit senza segno 0 a 255
Int16Array Intero a 16 bit con segno -32,768 a 32,767
Uint16Array Intero a 16 bit senza segno 0 a 65,535
Int32Array Intero a 32 bit con segno -2,147,483,648 a 2,147,483,647
Uint32Array Intero a 32 bit senza segno 0 a 4,294,967,295
Float32Array Numero a virgola mobile a 32 bit Circa 1.2E-38 a circa 3.4E+38
Float64Array Numero a virgola mobile a 64 bit Circa 5.0E-324 a circa 1.8E+308

Wow, è una lista impressionante! Non preoccuparti se sembra schiacciante - useremo esempi per rendere tutto chiaro.

Proprietà di TypedArray

Gli TypedArrays vengono forniti con alcune proprietà utili. Esploriamole:

1. length

Questa proprietà ci dice quanti elementi ci sono nel nostro TypedArray.

const myArray = new Int16Array(3);
console.log(myArray.length); // Output: 3

2. BYTES_PER_ELEMENT

Questa proprietà ci dice quanti byte ogni elemento nell'array occupa.

console.log(Int8Array.BYTES_PER_ELEMENT); // Output: 1
console.log(Int16Array.BYTES_PER_ELEMENT); // Output: 2

È come sapere quanto grande è ogni scatola nel nostro sistema di archiviazione!

Metodi statici di TypedArray

Gli TypedArrays vengono forniti con alcuni metodi integrati che possiamo utilizzare senza creare un'istanza. Ecco un paio di esempi:

1. TypedArray.from()

Questo metodo crea un nuovo TypedArray da un oggetto simile a un array.

const regularArray = [1, 2, 3, 4];
const typedArray = Int8Array.from(regularArray);
console.log(typedArray); // Output: Int8Array(4) [1, 2, 3, 4]

È come convertire il nostro cassetto di utensili misti in scatole organizzate!

2. TypedArray.of()

Questo metodo crea un nuovo TypedArray con un numero variabile di argomenti.

const myArray = Int16Array.of(1, 2, 3, 4, 5);
console.log(myArray); // Output: Int16Array(5) [1, 2, 3, 4, 5]

È come dire, "Ecco gli oggetti, per favore organizzali per me!"

Metodi di istanza di TypedArray

Ora, esploriamo alcuni metodi che possiamo utilizzare sulle nostre istanze di TypedArray:

1. set()

Questo metodo ci permette di copiare valori nel nostro TypedArray.

const myArray = new Int8Array(5);
myArray.set([1, 2, 3]);
console.log(myArray); // Output: Int8Array(5) [1, 2, 3, 0, 0]

È come mettere oggetti nelle nostre scatole organizzate.

2. subarray()

Questo metodo restituisce un nuovo TypedArray che è una porzione dell'originale.

const originalArray = new Int8Array([1, 2, 3, 4, 5]);
const subArray = originalArray.subarray(1, 4);
console.log(subArray); // Output: Int8Array(3) [2, 3, 4]

È come prendere alcune scatole dal nostro sistema di archiviazione per un compito specifico.

Esempi

Mettiamo tutte queste conoscenze insieme con alcuni esempi pratici!

Esempio 1: Creare e modificare un TypedArray

// Creare un TypedArray di interi a 8 bit senza segno
const pixelData = new Uint8Array(4);

// Impostare i valori RGB per un pixel (Rosso: 255, Verde: 128, Blu: 64, Alpha: 255)
pixelData[0] = 255; // Rosso
pixelData[1] = 128; // Verde
pixelData[2] = 64;  // Blu
pixelData[3] = 255; // Alpha (completamente opaco)

console.log(pixelData); // Output: Uint8Array(4) [255, 128, 64, 255]

In questo esempio, stiamo usando un Uint8Array per rappresentare i valori di colore di un pixel. Ogni valore è tra 0 e 255, perfetto per interi a 8 bit senza segno!

Esempio 2: Utilizzare TypedArrays per le prestazioni

const size = 1000000;

// Utilizzare array regolare
console.time('Array regolare');
const regularArray = new Array(size);
for (let i = 0; i < size; i++) {
regularArray[i] = i;
}
console.timeEnd('Array regolare');

// Utilizzare TypedArray
console.time('TypedArray');
const typedArray = new Int32Array(size);
for (let i = 0; i < size; i++) {
typedArray[i] = i;
}
console.timeEnd('TypedArray');

Eseguendo questo codice, è probabile che vedrai che il TypedArray è più veloce! È come avere un sistema di archiviazione ben organizzato rispetto a gettare tutto in un grande mucchio.

Eccoci, gente! Abbiamo viaggiato attraverso il paese degli TypedArrays, dalla comprensione di cosa sono fino a vederli in azione. Ricorda, la pratica fa la perfezione, quindi non aver paura di sperimentare con questi concetti.

Prima di sapere, sarai un mago degli TypedArrays, ottimizzando il tuo codice e impressionando i tuoi colleghi sviluppatori. Fino alla prossima volta, happy coding! ??‍??‍?

Credits: Image by storyset