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.