Il problema risolto dai generics
Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 57 di 73.
Immagina di aver bisogno di una funzione che restituisca semplicemente qualsiasi valore le passi: una funzione identità. Con i tipi che conosci finora, hai due opzioni, e sono entrambe problematiche.
Opzione uno: scrivere una copia separata per ogni tipo. I corpi sono identici; cambiano solo le annotazioni:
local function echoNumber(value: number): number
return value
end
local function echoString(value: string): string
return value
endOgni nuovo tipo significa un'altra copia, e un bug corretto in una deve essere corretto in tutte. È proprio questo il tipo di duplicazione che scrivi funzioni per evitare.
Opzione due: riunirle in un'unica funzione tipizzata con any:
local function echo(value: any): any
return value
endOra una sola funzione gestisce tutto, ma hai sacrificato la sicurezza dei tipi. Quando chiami echo("hello"), il controllo dei tipi non sa più che il risultato è una stringa. Conosce solo any, quindi il completamento automatico non funziona più e gli errori di tipo passano inosservati: si perde il legame tra ciò che entra e ciò che esce.
Quello che vuoi davvero è una funzione che funzioni con ogni tipo e ricordi quale tipo è stato usato in ogni chiamata. È proprio questo che offrono i generici, e sono l'argomento di questo capitolo.
Provalo tu
Questa lezione non include una sfida di codice.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Introduzione a Luau
1Per iniziare con Luau
Che cos'è Luau?Perché usare Luau?Il tuo primo codice LuauVerifica dei tipi e modalità di erroreRiepilogo: introduzione a Luau4Lavorare con le funzioni
Tipizzare i parametri e i valori restituitiTipizzare le funzioni anonimeFunzioni che non restituiscono nullaParametri opzionaliValori predefiniti dei parametriFunzioni variadicheDefinire i tipi di funzioneRiepilogo: funzioni tipizzate2Tipi fondamentali
Tipi di base: num, str, boolIl tipo 'any': una via di fugaIl tipo 'unknown'Nil e tipi opzionaliL'inferenza dei tipi in azioneAnnotazioni esplicite dei tipiRipasso: esercizi sui tipi fondamentali5Alias, unioni e intersezioni
Alias di tipo per i primitiviTipi unioneLavorare con i tipi unioneTipi letteraliTipi intersezioneCombinare gli alias di tipoRiepilogo: combinazioni avanzate di tipi3Tabelle tipizzate: array e mappe
Array tipizzatiAggiungere e leggere elementiChe cos'è un tipo Map?Dichiarare e accedere alle mappeIterare sulle tabelleTabelle con strutture misteArray tipizzati multidimensionalitable.unpack e argomenti variabiliRiepilogo: array e mappe6Tipizzare le forme delle tabelle
Annotazioni inline delle formeAlias di tipo per le formeProprietà opzionaliForme e tabelle libere a confrontoEstendere le formeAggiungere metodi alle formeSelf e metodi con i due puntiRiepilogo: definire le forme delle tabelle9Generics: una prima occhiata
Il problema risolto dai genericsUna funzione identità genericaUsare una funzione genericaArray genericiAlias di tipo genericiRiepilogo: funzioni genericheEsercitati da solo: Compilatore Luau online