[BONUS]
doseqdotimesEm Clojure podemos dizer que qualquer estrutura de dados é uma sequência. Até agora aprendemos
vectoremap, 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
firstretorna 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
mapereduceem “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
doseqrecebe 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.dotimesrecebe:[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.