Devoluções e término
Há duas expressões disponíveis que concluem a execução da sub-rotina atual ou do programa; as return
expressões e fail
. Geralmente, os callables podem encerrar sua execução antes de executar todas as instruções com uma return
expressão ou fail
. Uma return
expressão encerrará apenas a execução do callalbe atual, enquanto um fail
encerrará a execução de todo o programa e resultará em um erro de runtime.
Expressão de retorno
A return
expressão sai do callable atual e retorna o controle para o receptor. Ela altera o contexto da execução ao remover o registro de ativação mais recente da pilha.
A expressão sempre retorna um valor para o contexto do receptor; ele consiste no palavra-chave return
, seguido por uma expressão do tipo apropriado. O valor retornado é avaliado antes que qualquer ação de encerramento seja executada e o controle seja retornado. Essas ações de encerramento incluem, por exemplo, limpar e liberar os qubits que foram alocados no contexto do chamável. Em execuções em um simulador ou validador, as ações de encerramento geralmente também incluem verificações relacionadas ao estado desses qubits, por exemplo, se eles estão devidamente desentrelaçados de todos os qubits que continuam ativos.
A return
expressão no final de um callable que retorna um Unit
valor pode ser omitida. Nesse caso, o controle será retornado automaticamente quando todas as instruções forem executadas e todas as ações de encerramento forem realizadas. Os callables podem conter várias return
expressões, embora a implementação adjacente para operações que contêm várias return
expressões não possa ser gerada automaticamente.
Por exemplo,
return 1;
ou
return ();
Expressão de falha
A fail
expressão encerra totalmente a computação. Ela corresponde a um erro fatal que anula o programa.
Ele consiste no palavra-chave fail
, seguido por uma expressão do tipo String
.
O String
deve fornecer informações sobre a falha encontrada.
Por exemplo,
fail "Impossible state reached";
ou, usando uma cadeia de caracteres interpolada,
fail $"Syndrome {syn} is incorrect";
Além do determinado String
, uma fail
expressão idealmente coleta e permite a recuperação de informações sobre o estado do programa. Isso facilita o diagnóstico e a correção da origem do erro e exige o suporte do runtime e do firmware em execução, o que pode variar entre diferentes destinos.