0Pricing
Zig Academy · Leçon

Structures de données génériques

Découvrez le modèle d'une fonction qui renvoie un type.

Structures de données génériques est une leçon Zig Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Zig Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Zig Academy comprend 4 leçons au total.

Conteneurs génériques dans Zig

Pour qu’une structure de données fonctionne avec n’importe quel type d’élément, écrivez une fonction qui accepte un type et renvoie un tout nouveau type de structure. 📦

Une fonction qui renvoie un type

L’astuce consiste à donner à la fonction un type de retour type. Elle calcule et renvoie un nouveau type à la compilation.

fn List(comptime T: type) type {
    return struct {};
}

Construire la structure à l’intérieur

Dans la fonction, définissez une structure dont les champs utilisent le paramètre de type T. Chaque appel produit une structure adaptée à ce type d’élément.

fn Box(comptime T: type) type {
    return struct { value: T };
}

Nommer le type obtenu

Appelez la fonction qui renvoie un type et stockez le résultat dans une const. Vous disposez maintenant d’un type concret prêt à l’emploi.

const IntBox = Box(i32);

Créer une instance

Utilisez ce type nommé comme n’importe quelle structure. Ici, nous créons une Box qui contient l’entier quarante-deux.

const b = IntBox{ .value = 42 };

Ajouter des méthodes à la structure interne

La struct renvoyée peut également contenir des méthodes. Elles voient le paramètre de type et restent donc entièrement génériques.

fn Box(comptime T: type) type {
    return struct {
        value: T,
        fn get(self: @This()) T {
            return self.value;
        }
    };
}

Accéder au type avec @This

Dans une structure renvoyée anonyme, vous ne pouvez pas la nommer directement. Les méthodes utilisent donc @This() pour désigner le type de la structure englobante.

self: @This()

Plusieurs types à partir d’une seule définition

Appelez la fonction avec différents types et vous obtenez des structures distinctes. Box(i32) et Box(f64) sont des types séparés et entièrement vérifiés.

const FloatBox = Box(f64);

C’est ainsi que fonctionne la bibliothèque standard

Les propres ArrayList et HashMap de Zig sont construits exactement de cette manière : des fonctions qui acceptent un type et renvoient un type de conteneur configuré.

const Ints = std.ArrayList(i32);

Résolu entièrement à la compilation

Toute cette construction de types a lieu lors de la compilation. Un conteneur générique a donc le même coût qu’un conteneur écrit manuellement.

Conserver un allocateur lors de l’agrandissement

Les conteneurs qui s’agrandissent stockent un champ allocateur, transmis lors de l’initialisation, afin que le type générique indique explicitement d’où provient sa mémoire.

return struct {
    items: []T,
    alloc: std.mem.Allocator,
};

Vérification rapide

Vous voulez une pile générique qui fonctionne avec n’importe quel type d’élément dans Zig. Quel modèle utilisez-vous ?

Récapitulatif

Écrivez une fonction qui accepte un type et renvoie un type de structure. Chaque appel produit un conteneur concret et spécialisé. C’est ainsi que std construit ses collections. 🎯

Questions Fréquemment Posées

La leçon « Structures de données génériques » est-elle gratuite ?

Oui — le texte complet de « Structures de données génériques » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Zig Academy, passe à CoddyKit PRO. Le cours Zig Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Structures de données génériques » ?

Découvrez le modèle d'une fonction qui renvoie un type. Tu pratiques Zig Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Zig Academy ?

Aucune expérience préalable n'est requise. Zig Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Structures de données génériques » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Zig Academy ?

Oui. Chaque leçon Zig Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Fonctions qui prennent un type
  2. Structures de données génériques
  3. @TypeOf et réflexion sur les types
  4. Paramètres anytype
← Retour à Zig Academy