Návratové hodnoty a ukončení
Existují dva výrazy, které uzavírají provádění aktuálního podprogramu nebo programu; výrazy return
a fail
. Obecně platí, že volatelné můžou ukončit provádění všech příkazů pomocí return
nebo výrazu fail
. Výraz return
právě ukončí provádění aktuálního volání, zatímco fail
ukončí provádění celého programu a způsobí chybu za běhu.
Návratový výraz
Výraz return
se ukončí z aktuálního volatelného výrazu a vrátí ovládací prvek do volaného. Změní kontext spuštění tak, že přepíná rámec zásobníku.
Výraz vždy vrátí hodnotu kontextu volaného; se skládá z klíčového slova return
, následovaného výrazem příslušného typu. Vrácená hodnota se vyhodnocuje před provedením ukončujících akcí a vrácením ovládacího prvku. Ukončovací akce zahrnují například vyčištění a uvolnění qubitů přidělených v kontextu volatelného volání. Při spouštění na simulátoru nebo validátoru často ukončovací akce zahrnují také kontroly související se stavem těchto qubitů. Mohou například zkontrolovat, jestli jsou správně propletené ze všech qubitů, které zůstávají aktivní.
Výraz return
na konci volatelného výrazu, který vrátí Unit
hodnotu, může být vynechán. V takovém případě se ovládací prvek vrátí automaticky po dokončení všech příkazů a všech ukončovacích akcích. Volatelné výrazy můžou obsahovat více výrazů return
, přestože adjoint implementace operací obsahujících více výrazů return
nelze automaticky vygenerovat.
Příklad:
return 1;
nebo
return ();
Výraz selhání
Výraz fail
zcela ukončí výpočet. Odpovídá závažné chybě, která program přeruší.
Skládá se z klíčového slova fail
, následovaný výrazem typu String
.
String
by měla obsahovat informace o zjištěném selhání.
Příklad:
fail "Impossible state reached";
nebo pomocí interpolovaného řetězcového,
fail $"Syndrome {syn} is incorrect";
Kromě daného String
výraz fail
v ideálním případě shromažďuje a povoluje načítání informací o stavu programu. To usnadňuje diagnostiku a nápravu zdroje chyby a vyžaduje podporu spuštění modulu runtime a firmwaru, který se může lišit v různých cílech.