Zwracane dane i kończenie
Dostępne są dwa wyrażenia, które kończą wykonywanie bieżącej podrouty lub programu; wyrażenia return
i fail
. Ogólnie rzecz biorąc, obiekty wywołujące mogą zakończyć wykonywanie przed wykonaniem wszystkich instrukcji za pomocą wyrażenia return
lub fail
. Wyrażenie return
kończy wykonywanie bieżącego wywołania, a fail
kończy wykonywanie całego programu i powoduje błąd środowiska uruchomieniowego.
Wyrażenie zwracane
Wyrażenie return
kończy działanie z bieżącego elementu wywołującego i zwraca kontrolkę do obiektu wywoływanego. Zmienia kontekst wykonywania, wyskakując ramkę stosu.
Wyrażenie zawsze zwraca wartość do kontekstu obiektu wywoływanego; składa się ze słowa kluczowego return
, a następnie wyrażenia odpowiedniego typu. Wartość zwracana jest obliczana przed wykonaniem jakichkolwiek akcji zakończenia i zwróceniem kontrolki. Akcje zakończenia obejmują na przykład czyszczenie i zwalnianie kubitów przydzielonych w kontekście wywołania. W przypadku uruchamiania w symulatorze lub modułu sprawdzania poprawności akcje przerywania często obejmują również kontrole związane ze stanem tych kubitów. Mogą na przykład sprawdzić, czy są one prawidłowo odłączone od wszystkich kubitów, które pozostają aktywne.
Wyrażenie return
na końcu wywołania zwracającego wartość Unit
może zostać pominięte. W takim przypadku kontrolka jest zwracana automatycznie po zakończeniu wszystkich instrukcji i wykonaniu wszystkich akcji zakończenia. Obiekty wywołujące mogą zawierać wiele wyrażeń return
, choć implementacja przylegającą do operacji zawierających wiele wyrażeń return
nie może być generowana automatycznie.
Na przykład
return 1;
lub
return ();
Wyrażenie niepowodzenia
Wyrażenie fail
kończy obliczanie całkowicie. Odpowiada on błędowi krytycznemu, który przerywa program.
Składa się z słowa kluczowego fail
, a następnie wyrażenia typu String
.
String
powinien podać informacje o napotkanym błędzie.
Na przykład
fail "Impossible state reached";
lub przy użyciu ciągu interpolowanego ,
fail $"Syndrome {syn} is incorrect";
Oprócz danego String
wyrażenie fail
najlepiej zbiera i zezwala na pobieranie informacji o stanie programu. Ułatwia to diagnozowanie i naprawianie źródła błędu oraz wymaga obsługi wykonywanego środowiska uruchomieniowego i oprogramowania układowego, które może się różnić w różnych miejscach docelowych.