Partilhar via


Ramificação condicional

A ramificação condicional é expressa na forma de if expressões. Uma if expressão consiste em uma if cláusula, seguida por zero ou mais elif cláusulas e, opcionalmente, um outro bloco. Cada cláusula segue o padrão

keyword condition {
    <statements>
}

onde keyword é substituído por if ou elif respectivamente, condition é uma expressão do tipo Bool, e <statements> deve ser substituído por zero ou mais instruções. O bloco opcional elseconsiste na palavra-chave else seguida por zero ou mais instruções entre chaves, { }.

O primeiro bloco para o qual o condition avalia será true executado. O else bloco, se presente, é executado se nenhuma das condições avaliar para true. O bloco é executado em seu próprio escopo, o que significa que quaisquer ligações feitas como parte do bloco não são visíveis após o término do bloco.

Por exemplo, suponha que qubits é valor do tipo Qubit[] e r1 e r2 são do tipo Result,

if r1 == One {
    let q = qubits[0];
    H(q);
} 
elif r2 == One {
    let q = qubits[1];
    H(q);
} 
else {
    H(qubits[2]);
}

Você também pode expressar ramificações simples na forma de uma expressão condicional.

Restrições específicas do alvo

A estreita integração entre construções de fluxo de controle e cálculos quânticos representa um desafio para o hardware quântico atual. Alguns processadores quânticos não suportam ramificações com base em resultados de medição. Como tal, a comparação de valores do tipo Result sempre resultará em um erro de compilação para Q# programas que são direcionados para serem executados em tal hardware.

Outros processadores quânticos suportam tipos específicos de ramificação com base em resultados de medição. As expressões mais gerais if suportadas são Q# compiladas em instruções adequadas que podem ser executadas em tais processadores. As restrições impostas são que os valores do tipo Result só podem ser comparados como parte da condição dentro if de expressões em operações. Além disso, os blocos de execução condicional não podem conter expressões return ou atualizar variáveis mutáveis declaradas fora desse bloco.