# Conditii

Ai putea dori nu doar sa redai o nota aleatoare (vezi sectiunea precedenta pentru aleatorism), dar si sa iei o decizie aleatoare si pe baza rezultatului ei sa executi o bucata de cod sau alta. De exemplu, ai putea dori sa redai la intamplare o toba sau un taler. Putem obtine acest lucru folosind instructiunea ‘if’.

## Datul cu banul

Deci, sa dam cu banul: daca iese cap, redam toba, daca este pajura, redam talerul. Usor. Putem simula datul cu banul cu functia ‘one_in’ (prezentata in sectiunea despre aleatorism) specificand o probabilitate de 1 din 2: `one_in(2)`. Putem apoi folosi rezultatul pentru a decide intre doua bucati de cod, cea pentru toba si cea pentru taler:

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

      sleep 0.5

    end

Instructiunea ‘if’ are trei parti:

- Intrebarea care trebuie pusa
- Prima optiune pentru codul de executat (daca raspunsul la intrebare este da)
- A doua optiune pentru codul de executat (daca raspunsul la intrebare este nu)

In general, in limbajele de programare, raspunsul da este reprezentat prin termenul ‘true’ (adevarat), iar raspunsul nu este reprezentat prin termenul ‘false’ (fals). Deci trebuie sa gasim o intrebare la care raspunsul este ‘true’ sau ‘false’, adica exact ceea ce face ‘one_in’.

Prima optiune este delimitata de ‘if’ si ‘else’, in timp ce a doua este delimitata de ‘else’ si ‘end’. La fel ca in cazul blocurilor do/end, poti pune mai multe linii de cod in oricare dintre cele doua locuri. De exemplu:

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

    end

De data asta vom face pauze de durate diferite in functie de algerile pe care le facem.

## If simplu

Uneori vrem ca o instructiune unica sa se execute optional. Acest lucru este posibil prin adaugarea unui ‘if’ si a conditiei la sfarsit. De exemplu:

    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

Acest cod va reda acorduri cu componente diferite, cu probabilitati diferite pentru fiecare nota de a face parte din acestea.