Delen via


Voorwaardelijke vertakkingen

Voorwaardelijke vertakking wordt uitgedrukt in de vorm van if expressies. Een if-expressie bestaat uit een if-component, gevolgd door nul of meer elif-componenten en optioneel een else-blok. Elke component volgt het patroon

keyword condition {
    <statements>
}

waarbij keyword wordt vervangen door respectievelijk if of elif, is condition een expressie van het type Boolen <statements> moet worden vervangen door nul of meer instructies. Het optionele else-blok bestaat uit het trefwoord else gevolgd door nul of meer instructies tussen accolades, {}.

Het eerste blok waarvoor de conditiontrue evalueert, wordt uitgevoerd. Het else blok, indien aanwezig, wordt uitgevoerd als geen van de voorwaarden true. Het blok wordt uitgevoerd in een eigen bereik, wat betekent dat bindingen die als onderdeel van het blok zijn gemaakt, niet zichtbaar zijn nadat het blok is beƫindigd.

Stel dat qubits de waarde is van het type Qubit[] en r1 en r2 van het type Resultzijn,

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

U kunt ook eenvoudige vertakkingen uitdrukken in de vorm van een voorwaardelijke expressie.

Doelspecifieke beperkingen

De nauwe integratie tussen besturingsstroomconstructies en kwantumberekeningen vormt een uitdaging voor huidige kwantumhardware. Bepaalde kwantumprocessors bieden geen ondersteuning voor vertakkingen op basis van meetresultaten. Als zodanig resulteert vergelijking voor waarden van het type Result altijd in een compilatiefout voor Q# programma's die op dergelijke hardware moeten worden uitgevoerd.

Andere kwantumprocessors ondersteunen specifieke soorten vertakkingen op basis van meetresultaten. De meer algemene if expressies die worden ondersteund in Q# worden gecompileerd in geschikte instructies die op dergelijke processors kunnen worden uitgevoerd. De opgelegde beperkingen zijn dat waarden van het type Result alleen kunnen worden vergeleken als onderdeel van de voorwaarde binnen if expressies in bewerkingen. Bovendien kunnen de voorwaardelijk uitgevoerde blokken geen return expressies bevatten of veranderlijke variabelen bijwerken die buiten dat blok worden gedeclareerd.