Zig Academy · Lekcja

defer a errdefer w praktyce

Wybierz wykonanie zawsze albo tylko w razie błędu.

Lekcja 3 z 413 kroki

defer a errdefer w praktyce to bezpłatna lekcja Zig Academy na CoddyKit. To lekcja 3 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.

Dwa słowa kluczowe do sprzątania

Zig udostępnia dwa narzędzia do planowania wykonania: defer wykonuje się zawsze, natomiast errdefer tylko wtedy, gdy zakres kończy się błędem.

defer oznacza zawsze

Proszę użyć defer, gdy sprzątanie musi nastąpić niezależnie od sytuacji, na przykład przy zamykaniu pliku otwartego na czas całej funkcji.

const f = try open();
defer f.close();

errdefer oznacza błąd

errdefer uruchamia się tylko wtedy, gdy zakres kończy się błędem. Przy pomyślnym zwrocie jest po cichu pomijane.

const buf = try alloc();
errdefer free(buf);

Dlaczego pomijać przy sukcesie

Czasami buduje się wartość, aby ją zwrócić. Po sukcesie należy ona do wywołującego, więc nie wolno jej zwalniać — errdefer to respektuje.

Częściowo utworzone obiekty

errdefer świetnie sprawdza się w konstruktorach. Jeśli późniejszy etap się nie powiedzie, cofa wcześniejsze alokacje, dzięki czemu częściowo utworzony obiekt nie wycieknie.

const a = try alloc();
errdefer free(a);
const b = try alloc();

Sukces przekazuje własność

Gdy każdy etap zakończy się powodzeniem, funkcja zwraca wartość, a errdefer nie wykonuje się. Własność zostaje prawidłowo przekazana wywołującemu.

return MyType{ .a = a, .b = b };

Dobrze się łączą

Można używać obu mechanizmów. defer obsługuje tymczasową pamięć roboczą, a errdefer chroni wynik przeznaczony do zwrócenia.

Oba respektują odwrotną kolejność

Podobnie jak defer, wiele errdefer rozwija się w odwrotnej kolejności. Przy błędzie Zig uruchamia pasujące defer i errdefer razem, od najnowszego.

Miejsce ma znaczenie

Proszę umieścić każde errdefer bezpośrednio po etapie, który chroni. Zabezpiecza ono tylko przed błędami występującymi po wykonaniu tego wiersza.

Prosta zasada

Warto zadać sobie jedno pytanie: czy to sprzątanie ma się wykonać również po sukcesie? Tak oznacza defer; tylko przy błędzie — errdefer.

Brak wycieków dzięki konstrukcji

Razem te słowa kluczowe pozwalają pisać funkcje bez wycieków na każdej ścieżce, zarówno po sukcesie, jak i po błędzie, bez ręcznego śledzenia zasobów.

Szybkie sprawdzenie

Kiedy errdefer wykonuje się w porównaniu z defer?

Podsumowanie

Po defer należy sięgać, gdy sprzątanie ma być zawsze wykonane, a po errdefer — gdy ma ono cofnąć pracę tylko na ścieżce błędu. ✅

Bezpłatny start

Ucz się Zig dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „defer a errdefer w praktyce” jest bezpłatna?

Tak — pełny tekst „defer a errdefer w praktyce” 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 „defer a errdefer w praktyce”?

Wybierz wykonanie zawsze albo tylko w razie błędu. Ć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 3 z 4.

Ile czasu zajmuje lekcja „defer a errdefer w praktyce”?

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. Gwarancje defer
  2. Kolejność wykonywania wielu defer
  3. defer a errdefer w praktyce
  4. Łączenie open z close
← Powrót do Zig Academy