Quali mezzi di programmazione generica esistono?
sobes.tech AI
Risposta dell'AI
In Golang esistono i seguenti strumenti di programmazione generica (generici):
-
Tipi parametrizzati: Permettono di creare strutture, interfacce e funzioni che possono lavorare con diversi tipi di dati senza specificarli rigidamente in fase di compilazione. I tipi di dati sono indicati tra parentesi quadre dopo il nome del tipo o della funzione.
// Esempio di struttura con tipo parametrizzato type Stack[T any] struct { elements []T } // Esempio di funzione con tipi parametrizzati func Map[T, U any](collection []T, f func(T) U) []U { result := make([]U, len(collection)) for i, item := range collection { result[i] = f(item) } return result } -
Restrizioni di tipo (Type Constraints): Definiscono un insieme di tipi che possono essere usati come parametri generici. Permettono di limitare l'universalità dei tipi e garantire la sicurezza delle operazioni.
- Interfacce: Qualsiasi interfaccia di per sé è una restrizione di tipo.
- Interfacce combinate: Permettono di combinare più tipi o interfacce usando l'operatore
|.
// Esempio di restrizione di tipo usando un'interfaccia combinata type Number interface { int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | uintptr | float32 | float64 | complex64 | complex128 } // Funzione che usa la restrizione di tipo func Add[T Number](a, b T) T { return a + b }
Questi strumenti sono stati aggiunti in Go 1.18. Prima di allora, per implementare qualcosa di simile ai generici, si usavano interfacce (interface{}) e riflessione, il che riduceva la sicurezza dei tipi e le prestazioni.