# Condicionais

Uma coisa comum que certamente quererás fazer é não tocar só notas aleatórias (ver a secção anterior em aleatoriedade) mas também tomar decisões aleatórias baseadas no resultado do código que corre ou nalgum outro código. Por exemplo, poderás querer aleatoriamente tocar uma bateria ou címbalo. Podemos conseguir isso com uma declaração `if`.

## Lançar uma moeda

Então, vamos lançar uma moeda: se for cara, toca a bateria, se for coroa, toca o címbalo. Podemos emular o lançamento da moeda com a nossa função `one_in` (introduzida na secção de aleatoriedade), especificando a probabilidade de 1 em 2: `one_in(2)`. Podemos usar esse resultado para decidir entre dois pedaços de código, o código que toca a bateria e o código que toca o címbalo.

    loop do
      if one_in(2)
        sample :drum_heavy_kick
      else
        sample :drum_cymbal_closed
      end

      sleep 0.5

    end

Repara que a declaração `if` tem 3 partes:

- A questão a perguntar
- A primeira escolha de código a executar (se a questão à pergunta for sim)
- A segunda escolha de código a executar (se a resposta à questão for não)

Tipicamente em linguagens de programação, a noção de sim é representada pelo termo `true` e a noção de não é representada pelo termo `false`. Assim temos que arranjar uma questão que nos dirá uma resposta `true` ou `false` o que é exactamente isso que o `one_in` faz.

Repara como a primeira escolha está envolvida entre o `if` e o `else` e a segunda escolha está envolvida entre o `else` e o `end`. Tal como os blocos do/end poderás colocar múltiplas linhas de código nesses espaços. Por exemplo:

    loop do
      if one_in(2)
        sample :drum_heavy_kick
        sleep 0.5
      else
        sample :drum_cymbal_closed
        sleep 0.25
      end

    end

Desta vez estamos a dormir por um determinado tempo diferente dependendo da escolha que fazemos.

## if simples

Por vezes queremos opcionalmente executar apenas uma linha de código. Isto é possível colocando o `if` e depois a questão no final. Por exemplo:

    use_synth :dsaw
    loop do
      play 50, amp: 0.3, release: 2
      play 53, amp: 0.3, release: 2 if one_in(2)
      play 57, amp: 0.3, release: 2 if one_in(3)
      play 60, amp: 0.3, release: 2 if one_in(4)
      sleep 1.5
    end

Isto irá tocar o acorde de diferentes números com a possibilidade de cada nota ter uma diferente probabilidade.