Expressões condicionais
As expressões condicionais consistem em três subexpressões, em que a mais à esquerda é do tipo Bool
e determina qual das outras duas sub-expressões é avaliada. Elas estão no formato
cond ? ifTrue | ifFalse
Especificamente, se cond
for avaliada como true
, a expressão condicional será avaliada como a expressão ifTrue
, caso contrário, ela será avaliada como a expressão ifFalse
. A outra expressão (a expressão ifFalse
e ifTrue
, respectivamente) nunca é avaliada, assim como as ramificações em uma instrução if
.
Por exemplo, em uma expressão a == b ? C(qs) | D(qs)
, se a
for igual a b
, o chamável C
será invocado. Caso contrário, D
será invocado.
Os tipos das expressões ifTrue
e ifFalse
têm que ter um tipo base comum. Independentemente de qual dos dois acabe produzindo o valor para o qual a expressão é avaliada, seu tipo sempre corresponderá ao tipo base determinado.
Por exemplo, se
-
Op1
é do tipoQubit[] => Unit is Adj
-
Op2
é do tipoQubit[] => Unit is Ctl
-
Op3
é do tipoQubit[] => Unit is Adj + Ctl
e, em seguida,
-
cond ? Op1 | Op2
é do tipoQubit[] => Unit
-
cond ? Op1 | Op3
é do tipoQubit[] => Unit is Adj
-
cond ? Op2 | Op3
é do tipoQubit[] => Unit is Ctl
Para obter mais detalhes, confira subtyping.