8.1 Listas

# Listas

Nesta secção vamos dar uma vista de olhos à estrutura de dados que é bastante útil - a lista. Já encontramos anteriormente na secção de aleatoriedade quando escolhíamos de uma lista de notas a tocar:

```
play choose([50, 55, 62])
```

Nesta secção iremos explorar o uso de listas para representar acordes e escalas. Primeiro vamos recapitular em como poderemos querer tocar um acorde. Lembra-te que se não usarmos o `sleep`, o som acontece todo ao mesmo tempo:

```
play 52
play 55
play 59
```

Vamos ver outras maneiras de representar este código.

## Tocando uma lista

Uma das opções é colocar todas as notas numa lista: `[52, 55, 59]`. O nosso amigável `play` é suficientemente esperto para saber como tocar uma lista de notas. Tenta:

```
play [52, 55, 59]
```

Ooh, já é bastante melhor de se ler. Tocar uma lista de notas não te impede de usar qualquer outro parâmetro normalmente:

```
play [52, 55, 59], amp: 0.3
```

Claro, que poderás usar o nome tradicional das notas em vez do seu número MIDI:

```
play [:E3, :G3, :B3]
```

Aqueles sortudos que estudaram teoria musical poderão reconhecer o acorde como *Mi Menor* tocado na terceira oitava.

## Acedendo à lista

Uma outra característica bastante útil numa lista é a habilidade de receber informação dela. Isto pode soar estranho, mas não é mais complicado do que alguém pedir para abrir o livro na pagina 23. Com uma lista, dizes, qual é o elemento do índice 23? A única coisa estranha é que os índices na programação geralmente começam do 0 e não do 1.

Com os índices das listas não contamos 1, 2, 3... Em vez disso contamos 0, 1, 2...

Vamos ver isto em mais detalhe. Vê esta lista:

```
[52, 55, 59]
```

Não existe nada assustador sobre isto. Agora, qual é o segundo elemento da lista? Sim , claro que é o `55`. É fácil. Vamos ver se o computador dá a mesma resposta que nós:

```
puts [52, 55, 59][1]
```

Ok, isto é um pouco esquisito se não tinhas visto algo assim anteriormente. Acredita em mim, não é difícil. Existe 3 partes na linha acima: a palavra `puts`, a nossa lista `52, 55, 59` e o nosso índice`[1]`. Primeiro estamos a dizer `puts` porque queremos que o Sonic Pi imprima a resposta no registo. Segundo, estamos a dar a nossa lista e finalmente o índice está a perguntar pelo segundo elemento. Necessitamos de rodear o nosso índice com parênteses rectos e como a contagem começa do `0`, o índice do segundo elemento é `1`. Olha:

```
# indexes:  0   1   2
           [52, 55, 59]
```

Tenta correr o código `puts [52, 55, 59][1]`e verás `55` aparecer no registo. Muda o indice `1`para outros índices, tenta listas maiores e pensa em como podes usar uma lista na próxima sessão de jam. Por exemplo, que estruturas musicais podem ser representadas por uma serie de números...





