Ramificação condicional
A ramificação condicional é expressa sob a forma de if
expressões. Uma if
expressão consiste numa if
cláusula, seguida de zero ou mais elif
cláusulas e opcionalmente um bloco else. Cada cláusula segue o padrão
keyword condition {
<statements>
}
em que keyword
é substituído if
por ou elif
respetivamente, condition
é uma expressão do tipo Bool
e <statements>
deve ser substituído por zero ou mais instruções. O -block opcional else
consiste na palavra-chave else
seguida de zero ou mais instruções entre chavetas, {
}
.
O primeiro bloco para o qual a condition
avalia true
será executada. O else
bloco, se estiver presente, é executado se nenhuma das condições for avaliada como true
. O bloco é executado no seu próprio âmbito, o que significa que quaisquer enlaces efetuados como parte do bloco não são visíveis após o fim do bloco.
Por exemplo, suponha que qubits
é o valor do tipo Qubit[]
e r1
e r2
é 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]);
}
Também pode expressar ramificações simples sob a forma de uma expressão condicional.
Restrições específicas do destino
A integração estreita entre construções de fluxo de controlo e cálculos quânticos constitui um desafio para o hardware quântico atual. Determinados processadores quânticos não suportam a ramificação com base nos resultados da medição. Como tal, a comparação de valores do tipo Result
resultará sempre num erro de compilação para Q# programas direcionados para serem executados nesse hardware.
Outros processadores quânticos suportam tipos específicos de ramificação com base nos resultados de medição. As expressões mais gerais if
suportadas no Q# são compiladas em instruções adequadas que podem ser executadas nesses processadores. As restrições impostas são que os valores do tipo Result
só podem ser comparados como parte da condição em if
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.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários