Devoluções e terminação
Existem duas expressões disponíveis que concluem a execução do subrouteno atual ou do programa; e return
as fail
expressões. Geralmente, os callables podem terminar a execução antes de executar todas as instruções com uma return
expressão ou fail
. Uma return
expressão apenas terminará a execução do callalbe atual, enquanto um fail
terminará a execução de todo o programa e resultará num erro de runtime.
Devolver expressão
A return
expressão sai do atual callable e devolve o controlo ao destinatário. Altera o contexto da execução ao abrir uma moldura de pilha.
A expressão devolve sempre um valor ao contexto do destinatário; consiste na palavra-chave return
, seguida de uma expressão do tipo adequado. O valor devolvido é avaliado antes de serem executadas quaisquer ações de terminação e o controlo ser devolvido. As ações de terminação incluem, por exemplo, a limpeza e libertação de qubits que são alocados no contexto do callable. Ao executar num simulador ou validador, as ações de terminação geralmente também incluem verificações relacionadas com o estado desses qubits, por exemplo, se são corretamente desentangados de todos os qubits que permanecem em direto.
A return
expressão no final de um callable que devolve um Unit
valor pode ser omitida. Nesse caso, o controlo é devolvido automaticamente quando todas as instruções são executadas e todas as ações de terminação foram executadas. Os callables podem conter várias return
expressões, embora a implementação adjacente para operações que contenham múltiplas return
expressões não possa ser gerada automaticamente.
Por exemplo,
return 1;
ou
return ();
Expressão pós-falha
A fail
expressão termina totalmente a computação. Corresponde a um erro fatal que aborta o programa.
Consiste na palavra-chave fail
, seguida de uma expressão do tipo String
.
Deve String
fornecer informações sobre a falha encontrada.
Por exemplo,
fail "Impossible state reached";
ou, com uma cadeia interpolada,
fail $"Syndrome {syn} is incorrect";
Além do determinado String
, uma fail
expressão recolhe e permite a obtenção de informações sobre o estado do programa. Isto facilita o diagnóstico e a reparação da origem do erro e requer o suporte do runtime de execução e firmware, que podem variar entre diferentes destinos.