[BONUS]
doseq
dotimes
Em Clojure podemos dizer que qualquer estrutura de dados é uma sequência. Até agora aprendemos
vector
emap
, que são ambos sequências. String também é uma sequência. Quando algo é sequenciável, é uma sequência
first
para o primeiro item, ou não Se algo é sequenciável, a função
first
retorna o primeiro item da sequência. Isso é um bom teste pra saber se algo é ou não é uma sequência.
first
(range 2 8)
;=> (2 3 4 5 6 7)
(first (range 2 8))
;=> 2
(first "Hello, World!") ; string
;=> \H ; a primeira letra
(first :trinity) ; keyword não é sequenciável
;=> IllegalArgumentException Don't know how to create ISeq from:
;=> clojure.lang.Keyword clojure.lang.RT.seqFrom (RT.java:528)
Clojure é muito bom para iterar numa sequência. Existem várias funções que interagem com sequências. Por exemplo,
doseq
,dotimes
,for
,loop
,doall
, oudorun
.Já vimos as funções
map
ereduce
em “Funções que recebem outras funções”. Estas também são funções para sequências
doseq
O
doseq
(pra rodar uma sequência) é uma das funções bastante usadas para sequências, e funciona de forma bem similar à funçãomap
. Esta função repetidamente avalia o conteúdo passado para cada elemento da sequência.
A função
doseq
recebe bindings (atribuições) como argumentos. Os argumentos podem ser um vetor estranho:[nome-da-variavel sequencia]
. Onde cada elemento da sequência é percorrido e atribuído anome-da-variavel
, um por um, a cada vez que o conteúdo dodoseq
é executado.
;; exemplo do doseq
(doseq [item items] (my-function item))
dotimes
O
dotimes
(para rodar um número de vezes) é outra função bastante usada pra sequências. Assim comodoseq
, a função repetidamente avalia o seu conteúdo. A diferença é a atribuição feita no argumento.dotimes
recebe:[nome-da-variavel numero-inteiro-de-vezes]
.
A função
dotimes
é o que tem de mais parecido com os for-loops (laços for) de outras linguagens de programação. Essa função nos permite acessar uma sequência por índice em combinação com a funçãonth
.
;; supondo que exitem várias tartarugas
(def nomes ["a" "b"])
(dotimes [n (count nomes)] (prn n))
Voltar para o primeiro slide, ou ir para o índice do currículo.