+ + +

Table of Contents

+ +

Introdução

+

Neste segundo artigo, vamos avançar no nosso projeto “Three Little Pigs” utilizando conceitos mais avançados do Clojure. Iremos refatorar nosso código para torná-lo mais modular e introduzir o uso de def para variáveis globais. Isso não só melhorará a organização do código, mas também facilitará a manutenção e a escalabilidade do projeto.

+

Evoluindo o Projeto com Leiningen

+

Passo 1: Refatorando o Código

+

Vamos começar refatorando nosso código original. Primeiro, continue a partir do projeto anterior em Clojure Sessions01.

+

Passo 2: Dividindo em Módulos

+

Dividir o código em módulos ajuda a manter o projeto organizado. Vamos criar dois novos arquivos para separar a lógica dos porquinhos e do lobo. Dentro da pasta src/three_little_pigs, crie dois novos arquivos: pig.clj e wolf.clj.

+

Conteúdo de pig.clj

+
1(ns three-little-pigs.pig)
+2
+3(defn build-house [material]
+4  (str "O porquinho construiu uma casa de " material "."))
+5
+6(defn pig-activity [pig material]
+7  (str pig " decidiu construir uma casa. " (build-house material)))
+

Conteúdo de wolf.clj

+
1(ns three-little-pigs.wolf)
+2
+3(defn wolf-action [house]
+4  (str "O lobo veio, soprou e derrubou a casa de " house "."))
+

Passo 3: Usando def para Variáveis Globais

+

Vamos definir algumas variáveis globais que serão usadas em vários lugares do nosso projeto. Abra o arquivo core.clj e adicione as seguintes definições:

+
 1(ns three-little-pigs.core
+ 2  (:require [three-little-pigs.pig :as pig]
+ 3            [three-little-pigs.wolf :as wolf]))
+ 4
+ 5(def lobo "O lobo")
+ 6(def materiais ["palha" "madeira" "tijolos"])
+ 7
+ 8(defn story []
+ 9  (let [pig1 (pig/pig-activity "O primeiro porquinho" "palha")
+10        pig2 (pig/pig-activity "O segundo porquinho" "madeira")
+11        pig3 (pig/pig-activity "O terceiro porquinho" "tijolos")
+12        wolf1 (wolf/wolf-action "palha")
+13        wolf2 (wolf/wolf-action "madeira")
+14        wolf3 "O lobo não conseguiu derrubar a casa de tijolos."
+15        conclusion "A casa de tijolos do terceiro porquinho os salvou."]
+16    (str pig1 "\n" pig2 "\n" pig3 "\n" wolf1 "\n" wolf2 "\n" wolf3 "\n" conclusion)))
+17
+18(defn -main []
+19  (println (story)))
+

Passo 4: Adicionando Mais Complexidade

+

Para adicionar mais complexidade ao projeto, vamos introduzir novas funções e uma interação mais rica entre os personagens. Por exemplo, podemos adicionar diálogos entre os porquinhos e o lobo, e ações adicionais, como os porquinhos reforçando suas casas.

+

Atualizando pig.clj

+
 1(ns three-little-pigs.pig)
+ 2
+ 3(defn build-house [material]
+ 4  (str "O porquinho construiu uma casa de " material "."))
+ 5
+ 6(defn reinforce-house [material]
+ 7  (str "O porquinho reforçou a casa de " material "."))
+ 8
+ 9(defn pig-activity [pig material]
+10  (str pig " decidiu construir uma casa. " (build-house material)))
+11
+12(defn pig-dialogue [pig]
+13  (str pig " disse: 'Não vou deixar o lobo derrubar minha casa!'"))
+

Atualizando wolf.clj

+
1(ns three-little-pigs.wolf)
+2
+3(defn wolf-action [house]
+4  (str "O lobo veio, soprou e derrubou a casa de " house "."))
+5
+6(defn wolf-dialogue []
+7  (str "O lobo disse: 'Vou soprar e sua casa derrubar!'"))
+

Atualizando core.clj

+
 1(ns three-little-pigs.core
+ 2  (:require [three-little-pigs.pig :as pig]
+ 3            [three-little-pigs.wolf :as wolf]))
+ 4
+ 5(def lobo "O lobo")
+ 6(def materiais ["palha" "madeira" "tijolos"])
+ 7
+ 8(defn story []
+ 9  (let [pig1 (pig/pig-activity "O primeiro porquinho" "palha")
+10        pig2 (pig/pig-activity "O segundo porquinho" "madeira")
+11        pig3 (pig/pig-activity "O terceiro porquinho" "tijolos")
+12        reinforce1 (pig/reinforce-house "tijolos")
+13        wolf1 (wolf/wolf-action "palha")
+14        wolf2 (wolf/wolf-action "madeira")
+15        wolf3 "O lobo não conseguiu derrubar a casa de tijolos."
+16        dialogue1 (pig/pig-dialogue "O terceiro porquinho")
+17        dialogue2 (wolf/wolf-dialogue)
+18        conclusion "A casa de tijolos do terceiro porquinho os salvou."]
+19    (str pig1 "\n" pig2 "\n" pig3 "\n" reinforce1 "\n" wolf1 "\n" wolf2 "\n" wolf3 "\n" dialogue1 "\n" dialogue2 "\n" conclusion)))
+20
+21(defn -main []
+22  (println (story)))
+

Passo 5: Executando o Projeto Refatorado

+

Para executar o projeto refatorado, utilize o mesmo comando no terminal:

+
1lein run
+

Isso compilará e executará o projeto, exibindo a história completa dos Três Porquinhos com mais detalhes e interações no terminal.

+

Compartilhando Seu Progresso

+

Depois de concluir seu projeto, uma excelente forma de manter o aprendizado e obter feedback é compartilhá-lo no GitHub. Subir seu projeto para o GitHub não apenas protege seu código em um repositório remoto, mas também o expõe a uma comunidade global, onde outros desenvolvedores podem colaborar, sugerir melhorias e ajudar no desenvolvimento de suas habilidades.

+

100daysofcode

+

Além disso, considere aderir ao desafio #100DaysOfCode. Esse desafio incentiva você a codificar todos os dias por 100 dias consecutivos, o que pode significativamente acelerar seu aprendizado em programação, especialmente em novas linguagens e paradigmas como o Clojure.

+

Para quem está começando com Clojure e deseja uma leitura acessível e informativa, recomendo o livro Clojure for the Brave and True de Daniel Higginbotham. Este livro oferece uma introdução clara e divertida ao mundo de Clojure, cobrindo desde os conceitos básicos até técnicas mais avançadas, com exemplos práticos para ajudar você a praticar. Você pode encontrar mais informações sobre o livro e recursos adicionais no site oficial do livro.

+ +