Compartilhar via


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 tipo Qubit[] => Unit is Adj
  • Op2 é do tipo Qubit[] => Unit is Ctl
  • Op3 é do tipo Qubit[] => Unit is Adj + Ctl

e, em seguida,

  • cond ? Op1 | Op2 é do tipo Qubit[] => Unit
  • cond ? Op1 | Op3 é do tipo Qubit[] => Unit is Adj
  • cond ? Op2 | Op3 é do tipo Qubit[] => Unit is Ctl

Para obter mais detalhes, confira subtyping.