Sdílet prostřednictvím


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 Stringvý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.