0Pricing
Zig Academy · Lekcja

Generyczne struktury danych

Poznaj wzorzec funkcji zwracającej typ.

Generyczne struktury danych to bezpłatna lekcja Zig Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Zig Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Zig Academy zawiera 4 lekcji w sumie.

Generyczne kontenery w Zig

Aby struktura danych działała dla dowolnego typu elementu, napisz funkcję, która przyjmuje typ i zwraca zupełnie nowy typ struktury. 📦

Funkcja zwracająca typ

Klucz polega na tym, że funkcja może mieć typ zwracany type. Oblicza ona i zwraca nowy typ podczas kompilacji.

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

Budowanie struktury wewnątrz funkcji

Wewnątrz funkcji zdefiniuj strukturę, której pola używają parametru typu T. Każde wywołanie tworzy strukturę dopasowaną do typu elementu.

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

Nazywanie wynikowego typu

Wywołaj funkcję zwracającą typ i zapisz wynik w const. Teraz masz konkretny typ gotowy do użycia.

const IntBox = Box(i32);

Tworzenie instancji

Użyj nazwanego typu tak jak każdej struktury. Tutaj tworzymy obiekt Box przechowujący liczbę całkowitą czterdzieści dwa.

const b = IntBox{ .value = 42 };

Dodawanie metod do wewnętrznej struktury

Zwracana struct może również zawierać metody. Widzą one parametr typu, więc pozostają w pełni generyczne.

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

Uzyskiwanie typu za pomocą @This

Wewnątrz anonimowej, zwracanej struktury nie można odwołać się do niej bezpośrednio po nazwie, dlatego metody używają @This(), aby wskazać otaczający je typ struktury.

self: @This()

Wiele typów z jednej definicji

Wywołaj funkcję z różnymi typami, a otrzymasz odrębne struktury. Box(i32) i Box(f64) to osobne, w pełni sprawdzane typy.

const FloatBox = Box(f64);

Na tym opiera się biblioteka standardowa

Własne typy ArrayList i HashMap w Zig są budowane dokładnie w ten sposób: funkcje przyjmują typ i zwracają skonfigurowany typ kontenera.

const Ints = std.ArrayList(i32);

Rozwiązywane w całości podczas kompilacji

Całe konstruowanie typów odbywa się podczas budowania, więc generyczny kontener ma taki sam koszt jak kontener napisany ręcznie.

Przechowywanie alokatora podczas powiększania

Rozrastające się kontenery przechowują pole alokatora, przekazane podczas inicjalizacji, dzięki czemu typ generyczny jasno określa źródło swojej pamięci.

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

Szybkie sprawdzenie

Chcesz utworzyć w Zig generyczny stos działający dla dowolnego typu elementu. Jakiego wzorca użyjesz?

Podsumowanie

Napisz funkcję, która przyjmuje type i zwraca typ struktury. Każde wywołanie daje konkretny, wyspecjalizowany kontener. Tak biblioteka standardowa buduje swoje kolekcje. 🎯

Często zadawane pytania

Czy lekcja „Generyczne struktury danych” jest bezpłatna?

Tak — pełny tekst „Generyczne struktury danych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Zig Academy, przejdź na CoddyKit PRO. Kurs Zig Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Generyczne struktury danych”?

Poznaj wzorzec funkcji zwracającej typ. Ćwiczysz Zig Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Zig Academy?

Nie wymagamy żadnego doświadczenia. Zig Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Generyczne struktury danych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Zig Academy?

Tak. Każda lekcja Zig Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Funkcje przyjmujące typ
  2. Generyczne struktury danych
  3. @TypeOf i refleksja typów
  4. Parametry anytype
← Powrót do Zig Academy