Lezioni del modulo (1/2)
Funzioni tipizzate
Le funzioni sono i mattoni fondamentali di qualsiasi applicazione JavaScript. In TypeScript, possiamo annotare con precisione sia gli argomenti in ingresso che i valori di ritorno, rendendo le nostre interfacce e chiamate di funzione estremamente sicure e auto-documentate.
Parametri Opzionali e di Default
In JavaScript, ogni parametro è opzionale e, se non passato, assume il valore undefined. In TypeScript, per impostazione predefinita, ogni parametro dichiarato è obbligatorio.
Tuttavia, possiamo definire parametri opzionali usando il punto interrogativo (?), oppure specificare valori di default direttamente nella firma.
1. Parametri Opzionali
I parametri opzionali devono essere posizionati dopo i parametri obbligatori:
function greetUser(name: string, title?: string): string {
if (title) {
return `Buongiorno ${title} ${name}`;
}
return `Ciao ${name}`;
}2. Parametri di Default
Se non viene fornito un valore per un parametro con valore di default, TypeScript ne inferisce il tipo ed assegna il valore stabilito:
function greetUserWithDefault(name: string, prefix: string = 'Ciao'): string {
return `${prefix} ${name}`;
}Parametri Rest (...args)
Quando vogliamo accettare un numero variabile di argomenti, possiamo usare l'operatore rest. In TypeScript, questi parametri devono essere tipizzati come un array:
function sumAll(message: string, ...numbers: number[]): string {
const total = numbers.reduce((sum, n) => sum + n, 0);
return `${message} ${total}`;
}Firme di Funzioni (Function Types)
Possiamo definire il tipo di una funzione in modo indipendente per poi riutilizzarlo nella dichiarazione di variabili o callback:
// Definizione del tipo tramite alias
type MathOperation = (a: number, b: number) => number;
const add: MathOperation = (x, y) => x + y;
const multiply: MathOperation = (x, y) => x * y;Questo approccio è fondamentale quando si passano funzioni come argomenti ad altre funzioni (callback).
Prova tu
Esercizio 1: Parametri Opzionali
Crea una funzione chiamata formatName che accetta un parametro firstName (stringa) e un parametro opzionale lastName (stringa). Se lastName è fornito, restituisci 'firstName lastName', altrimenti restituisci solo 'firstName'.
Mostra suggerimento
Ricorda che il parametro opzionale si dichiara con lastName?: string dopo quello obbligatorio.
Soluzione disponibile dopo 3 tentativi
Esercizio 2: Parametri Default
Crea una funzione chiamata power che accetta una base (numero) e un exponent (numero con valore di default uguale a 2). La funzione deve calcolare e restituire il valore di base elevato all'esponente (usa Math.pow).
Mostra suggerimento
Usa base: number ed exponent: number = 2 all'interno della firma della funzione.
Soluzione disponibile dopo 3 tentativi
Esercizio 3: Firma della Funzione
Definisci un type alias chiamato BinaryOp che descrive una funzione che accetta due parametri di tipo numero e restituisce un numero. Successivamente, dichiara una costante chiamata sum di tipo BinaryOp che implementa l'addizione.
Mostra suggerimento
La sintassi per il tipo funzione è (a: number, b: number) => number.
Soluzione disponibile dopo 3 tentativi
Esercizio 4: Funzione Callback
Crea una funzione chiamata processItems che accetta due parametri: items (un array di stringhe) e callback (una funzione che accetta una singola stringa e non restituisce nulla, cioè void). La funzione deve eseguire un ciclo for...of su ciascun elemento di items e passarlo alla callback.
Mostra suggerimento
Dichiara la firma come processItems(items: string[], callback: (item: string) => void): void e usa un ciclo per chiamare la callback.
Soluzione disponibile dopo 3 tentativi