Middle
Quelles sont les différences entre le type de valeur et le type de référence dans les langages de programmation?
sobes.tech IA
Réponse de l'IA
Les types de valeur (par exemple, struct, enum, types numériques de base) stockent leur valeur directement. Lors de l'affectation ou du passage à une fonction, une copie de la valeur est créée.
Les types de référence (par exemple, class, function, closure) stockent une référence à l'emplacement en mémoire où se trouve la valeur elle-même. Lors de l'affectation ou du passage, une copie de la référence est créée, pointant vers la même valeur en mémoire.
Les principales différences :
| Caractéristique | Type de valeur | Type de référence |
|---|---|---|
| Mode de stockage | La valeur est stockée directement dans la variable | La variable stocke une référence à la valeur |
| Affectation | La valeur est copiée | La référence est copiée (pointe vers le même objet) |
| Modification | La modification de la copie n'affecte pas l'original | La modification par référence affecte l'original |
| Lieu en mémoire | Généralement dans la pile (pour les variables locales) | Généralement dans le tas |
| Gestion de la mémoire | Automatique (lorsque le scope est quitté) | ARC (Automatic Reference Counting) |
Exemple en Swift :
// type de valeur
struct PointStruct {
var x: Int
var y: Int
}
var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // copie la valeur
point2.x = 10
print(point1.x) // affichera 1
print(point2.x) // affichera 10
// type de référence
class PointClass {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
var point3 = PointClass(x: 1, y: 2)
var point4 = point3 // copie la référence
point4.x = 10
print(point3.x) // affichera 10 (l'objet a changé par référence)
print(point4.x) // affichera 10