Compartilhar via


Devoluções e término

Há duas expressões disponíveis que concluem a execução da sub-rotina atual ou do programa; o return e as expressões fail. Geralmente, os callables podem encerrar sua execução antes de executar todas as suas instruções com uma expressão return ou fail. Uma expressão return acaba com a execução do callable atual, enquanto um fail encerra a execução de todo o programa e resulta em um erro de runtime.

Retornar expressão

A expressão return sai do callable atual e retorna o controle para o receptor. Ele altera o contexto da execução, estourando um quadro de pilha.

A expressão sempre retorna um valor para o contexto do receptor; consiste na palavra-chave return, seguida por uma expressão do tipo apropriado. O valor retornado é avaliado antes que as ações de encerramento sejam executadas e o controle seja retornado. As ações de encerramento incluem, por exemplo, limpar e liberar qubits que são alocados no contexto do callable. Ao executar em um simulador ou validador, as ações de encerramento geralmente também incluem verificações relacionadas ao estado desses qubits. Por exemplo, eles podem verificar se estão corretamente desembaraçados de todos os qubits que permanecem ativos.

A expressão return no final de um callable que retorna um valor Unit pode ser omitida. Nesse caso, o controle é retornado automaticamente quando todas as instruções são concluídas e todas as ações de encerramento executadas. Os callables podem conter várias expressões return, embora a implementação adjacente para operações que contêm várias expressões return não possa ser gerada automaticamente.

Por exemplo

return 1;

ou

return ();

Expressão de falha

A expressão fail termina totalmente a computação. Corresponde a um erro fatal que anula o programa.

Ele consiste na palavra-chave fail, seguida 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 um de cadeia de caracteres interpolada,

fail $"Syndrome {syn} is incorrect";

Além do Stringdeterminado, uma expressão fail 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 requer suporte do runtime e do firmware em execução, que podem variar entre destinos diferentes.