# Itérations et boucles

Jusqu’à maintenant nous avons passé beaucoup de temps à rechercher les différents sons que vous pouvez faire avec des blocs de `play` et de `sample`. Nous avons aussi appris comment déclencher ces sons dans le temps en utilisant `sleep`.

Comme vous vous en êtes probablement rendu compte, on peut prendre beaucoup de plaisir avec la construction de ces blocs de base. Toutefois, une dimension totalement nouvelle de plaisir se découvre quand on commence à utiliser la puissance du code pour structurer sa musique et ses compositions. Dans les quelques sections suivantes, nous allons explorer quelques uns de ces nouveaux outils puissants. En premier, découvrons l’itération et les boucles.

## Répétition

Avez-vous écrit du code que vous aimeriez répéter quelques fois ? Par exemple, vous pourriez avoir quelque chose comme ceci :

    play 50
    sleep 0.5
    sample :elec_blup
    sleep 0.5
    play 62
    sleep 0.25

Et si nous voulons répéter ceci 3 fois ? Eh bien, nous pourrions faire simple et juste le copier et le coller trois fois :

    play 50
    sleep 0.5
    sample :elec_blup
    sleep 0.5
    play 62
    sleep 0.25
    play 50
    sleep 0.5
    sample :elec_blup
    sleep 0.5
    play 62
    sleep 0.25
    play 50
    sleep 0.5
    sample :elec_blup
    sleep 0.5
    play 62
    sleep 0.25

Maintenant, ça fait beaucoup de code ! Que se passe-t-il si nous voulions changer l’échantillon en `:elec_plip` ? Vous aller devoir trouver tous les endroits avec l’original `:elec_blup` et les modifier un par un. De façon plus importante, que faire si vous voulez répéter le bout de code original 50 fois ou 1000 fois ? Ça ferait alors vraiment beaucoup de code, et beaucoup de lignes de code à modifier si vous vouliez faire un changement.

## Itération

En fait, répéter le code devrait être aussi facile que de dire fais ceci trois fois. Eh bien, c’est presque cela. Souvenez-vous de notre vieil ami le bloc de code. Nous pouvons l’utiliser pour marquer le début et la fin du code que nous aimerions répéter trois fois. Nous utilisons alors le code spécial `3.times`. Ainsi, à la place d’écrire fais cela trois fois, nous écrivons `3.times do` - ce n’est pas trop dur. Rappelez-vous juste d’écrire `end` à la fin du code que vous devez répéter :

    3.times do
      play 50
      sleep 0.5
      sample :elec_blup
      sleep 0.5
      play 62
      sleep 0.25
    end

Alors, est-ce que ce n’est pas plus propre que de copier-coller ! Nous pouvons l’utiliser pour créer beaucoup de chouettes structures répétitives :

    4.times do
      play 50
      sleep 0.5
    end
    8.times do
      play 55, release: 0.2
      sleep 0.25
    end
    4.times do
      play 50
      sleep 0.5
    end

## Imbrication d’itérations

Nous pouvons mettre des itérations à l’intérieur d’autres itérations pour créer des motifs intéressants. Par exemple :

    4.times do
      sample :drum_heavy_kick
      2.times do
        sample :elec_blip2, rate: 2
        sleep 0.25
      end
      sample :elec_snare
      4.times do
        sample :drum_tom_mid_soft
        sleep 0.125
      end
    end

## Boucles

Si vous voulez répéter quelque chose un grand nombre de fois, vous pourriez vous trouvez en situation d’utiliser des nombres vraiment grands comme `1000.times do`. Dans ce cas, vous feriez probablement mieux de demander à Sonic Pi de répéter à l’infini (au moins jusqu’à ce que vous pressiez le bouton stop !). Bouclons l’échantillon break amen à l’infini :

    loop do
      sample :loop_amen
      sleep sample_duration :loop_amen
    end

La chose importante à savoir à propos des boucles est qu’elles se comportent comme des trous noirs pour le code. Une fois que le code est entré dans une boucle, il ne peut pas en sortir tant que vous n’avez pas pressé stop - il va juste tourner en rond dans la boucle à jamais. Ce qui signifie que si vous avez du code après la boucle, vous ne l’entendrez jamais. Par exemple, la cymbale suivant cette boucle ne sera jamais jouée :

    loop do
      play 50
      sleep 1
    end
    sample :drum_cymbal_open

Maintenant, structurez votre code avec des itérations et des boucles !