Sobes.tech
Intern

Qu'est-ce que les types de données et quels sont-ils?

sobes.tech IA

Réponse de l'IA

Les types de données définissent l’ensemble des valeurs possibles et les opérations pouvant leur être appliquées. En Swift, ils se divisent en Types de Valeur et Types de Référence.

Types de Valeur :

  • Les valeurs sont copiées lors de l’affectation ou du passage en paramètre.
  • Chaque variable ou constante stocke sa propre copie indépendante des données.
  • Les modifications d’une copie n’affectent pas les autres.

Exemples de Types de Valeur :

  • Structures (struct)
  • Enumerations (enum)
  • Tuples (tuple)
  • Types de base : Int, Double, Bool, String, tableaux (Array), dictionnaires (Dictionary), ensembles (Set).
// Exemple de Type de Valeur : struct
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 obtient une copie de p1
p2.x = 10 // Modifier p2 n’affecte pas p1

print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

Types de Référence :

  • Les valeurs ne sont pas copiées. Lors de l’affectation ou du passage en paramètre,
  • une référence au même exemplaire de données en mémoire est transmise.
  • Plusieurs variables ou constantes peuvent faire référence au même exemplaire.
  • Les modifications via une référence sont visibles dans toutes les autres.

Exemples de Types de Référence :

  • Classes (class)
  • Fonctions (func)
  • Clôtures (closure)
// Exemple de Type de Référence : class
class Circle {
    var radius: Double

    init(radius: Double) {
        self.radius = radius
    }
}

var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 référence au même exemplaire que c1
c2.radius = 10.0 // Modifier c2 affecte c1

print("c1 radius: \(c1.radius)") // c1 radius: 10.0
print("c2 radius: \(c2.radius)") // c2 radius: 10.0

Tableau des types principaux :

Catégorie Type(s) Type de Valeur/Référence Description
Entiers Int, UInt, Int8, UInt8, etc. Valeur Nombres entiers de différentes tailles, signés ou non
Flottants Float, Double Valeur Nombres avec partie fractionnaire
Booléens Bool Valeur Valeurs logiques (true ou false)
Chaînes String Valeur Séquence de caractères
Collections Array, Dictionary, Set Valeur Collections ordonnées/non ordonnées d’éléments du même type
Structures struct Valeur Types composés définis par l’utilisateur stockant des valeurs liées
Enumerations enum Valeur Définissent un type commun pour un groupe de valeurs liées
Tuples (value1, value2, ...) Valeur Regroupent plusieurs valeurs en un seul type composé
Classes class Référence Types composés définis par l’utilisateur supportant l’héritage et le comportement par référence
Fonctions () -> Void, (Int) -> String, etc. Référence Blocs de code exécutable
Clôtures { (parameters) -> return type in code } Référence Blocs de code autonomes pouvant être passés et utilisés
Optionnels Type? (sucres syntaxiques pour Optional<Type>) Valeur Représente une valeur du type Type ou son absence (nil)

Le choix entre Types de Valeur et Types de Référence dépend de la tâche : Les Types de Valeur sont préférés pour les petites données et pour garantir la sécurité en multithreading, tandis que les Types de Référence conviennent aux objets complexes nécessitant un état partagé et une héritage.