Saltar al contenido principal
eLearner.app
Módulo 8 · Lección 1 de 429/32 en el curso~12 min
Lecciones del módulo (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.

Ejercicio#js.m8.l1.e1
Intentos: 0Cargando...

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.

Cargando editor...
Mostrar pista

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

Solución disponible después de 3 intentos

Esercizio di ripasso

Ejercicio#js.m8.l1.e2
Intentos: 0Cargando...

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.

Cargando editor...
Mostrar pista

arr.filter(isEven).length

Solución disponible después de 3 intentos