Vai al contenuto
eLearner.app
Modulo 8 · Lezione 1 di 429/32 nel corso~12 min
Lezioni del modulo (1/4)

Moduli ESM: import / export

Quando un programma cresce, tenere tutto in un solo file diventa scomodo. JavaScript moderno risolve il problema con i moduli ES (ESM): ogni file è un modulo che può esportare funzioni, costanti, classi, e altri file possono importarle.

export

Esporti ciò che vuoi rendere pubblico. Due forme:

JS
// somma.js
export function somma(a, b) {
  return a + b;
}

export const PI = 3.14159;

Oppure, in fondo al file:

JS
function somma(a, b) {
  return a + b;
}
const PI = 3.14159;
export { somma, PI };

import

Da un altro file:

JS
// app.js
import { somma, PI } from './somma.js';

console.log(somma(1, 2)); // 3
console.log(PI); // 3.14159

L'oggetto { somma, PI } è la lista dei nomi che vuoi importare. Devono corrispondere ai nomi esportati.

Default export

Ogni modulo può avere un export "principale", senza nome:

JS
// log.js
export default function log(msg) {
  console.log('[app]', msg);
}

Si importa scegliendo localmente il nome:

JS
import log from './log.js';
log('ciao');

Rinominare

JS
import { somma as plus } from './somma.js';
export { somma as add } from './somma.js'; // re-export

Un solo "namespace" per file

I moduli sono isolati: una variabile dichiarata in un file non finisce nel global. Devi esportarla esplicitamente per renderla visibile altrove. Questo è un enorme miglioramento rispetto al vecchio JS in cui ogni <script> condivideva window.

Prova tu

Negli esercizi qui sotto non scriverai vera sintassi import/export — il sandbox è un solo file. Ti chiederemo invece di organizzare il codice in piccole funzioni separate che collaborano, come faresti se ciascuna fosse in un file diverso.

Esercizio#js.m8.l1.e1
Tentativi: 0Caricamento…

Definisci due funzioni separate: `square(n)` (ritorna n*n) e `sumOfSquares(a, b)` che usa square. Pensa a square come 'esportato' da un file e riusato da sumOfSquares.

Caricamento editor…
Mostra suggerimento

sumOfSquares(a,b) = square(a) + square(b)

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#js.m8.l1.e2
Tentativi: 0Caricamento…

Definisci `isEven(n)` (true se n è pari) e `countEven(arr)` che usa isEven per contare gli elementi pari in un array. Tienile come due funzioni separate.

Caricamento editor…
Mostra suggerimento

arr.filter(isEven).length

Soluzione disponibile dopo 3 tentativi