Sobes.tech
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