Fork me on GitHub
#clojure-brasil
<
2023-10-09
>
j_zes13:10:30

Bom dia pessoas, tudo bem com vcs? Pessoal, andei pensando aqui e gostaria de saber se a minha visão está muito enviesada. Tive analisando e modelando alguns projetos pessoais, e acabei chegando ao raciocínio que os namespaces em Clojure, guardadas as devidas proporções, são classes que não guardam dados, apenas comportamento, podendo ser modelados de forma similar. Faz sentido este pensamento/analogia? Eu sei também que este tipo de pensamento pode, se levado ao extremo, ser limitante pra um pensamento funcional, no entanto seria esclarecedor saber se existe algo que quebre essa analogia.

ericdallo13:10:09

Eu vejo namespaces so como jeitos de organizar suas funcoes e vars em diferentes locais ao inves de um arquivo só. Sei que deve saber disso, mas so pra deixar mais claro namespaces nao são classes, mas caso ela tenha um :gen-class ela gera uma classe quando compilando aquela ns 😛, talvez mais confuso hehe

j_zes13:10:31

sim, eu entendo que virtualmente não são classes, no entanto, é possível aplicar alguns dos conceitos de solid por exemplo, se aplicarmos dessa forma não?

j_zes13:10:40

por exemplo, quando criamos uma classe repository que é um repository, podemos criar um namespace repository por exemplo

j_zes13:10:58

ou isso não faz sentido algum? rsrsrs

ericdallo13:10:41

ah algumas vezes faz sim, por exemplo ter uma ns de db, outra de conexao com um terceiro etc, mas eu tendo a criar numa ns e ir separando conforme eu vejo que tem um contexto ali que da pra dar um nome em uma ns separada.

ericdallo13:10:03

E nao gosto de muitas ns pequenas, fica mais dificil de entender o codigo, quando mais codo clojurem as vejo que faz sentido ter menos ns hehe

j_zes14:10:52

sério, aqui de um noob eu diria o contrário, quanto mais segregado o código mais simples de entender, mas de certa forma entendo o que vc quer dizer

ericdallo14:10:01

se vc comparar com classes java vai realmente ter essa impressao, mas na pratica pra ns, nao acho que isso ajuda, mas o pensamento super faz sentido mesmo, e em OO isso é uma boa pratica mesmo, ter responsabilidades unicas para as classes

👏 1
👍 1
☝️ 1
Arthur Fücher16:10:27

Se pensar em classe como um delimitador de escopo ou uma caixinha, acho que faz sentido a adaptação de pensamento para uma namespace 😇 Mas tem o ponto que o @UKFSJSM38 comentou sobre ter mais coisas numa ns do que numa classe. Pq geralmente a classe quando vc vai usar num lugar, ela tem responsabilidades únicas e tals... Em clojure vc não vai criar "uma instancia da namespace", vc vai usar funcionalidades que estão disponíveis nela. Então, por exemplo, se eu quero algo que vai acessar meu db, provavelmente vai estar na ns de db (connect, disconnect, etc...) espero ter ajudado e não piorad 😅

j_zes17:10:38

Com ctz ajuda mestre, eu acho sempre maneiro ter mais de um ponto de vista sobre as coisas, e pra quem vem de anos de OO ajuda fazer esses paralelos saca

ericdallo18:10:54

acho que pode ser interessante ver as ns do https://github.com/clojure-lsp/clojure-lsp/tree/master/lib/src/clojure_lsp, ele usa o conceito de feature em alguns pontos entao tem ns por features e outros pontos por camadas como db, logger, settings, integracoes com terceiros como kondo.clj

j_zes19:10:19

massa em, ai eu pergunto, existe algum material nesse sentido, seja ptbr. ou eng.?

ericdallo19:10:11

Boa pergunta, eu nao conheco :/

mauricio.szabo19:10:51

A minha opinião em respeito a conceitos de Clojure é: não tente fazer tradução entre isso e algo do mundo OO

mauricio.szabo19:10:07

Isso é um trade-off perigoso: você faz uma associação no início pra ajudar a entender um conceito, mas aí vc eventualmente, mesmo inconscientemente, fica preso à aquele conceito no futuro, e "força ele" mesmo quando não se aplica

👍 1
mauricio.szabo19:10:49

Mesma coisa se pensar, tipo, em protocols como "interface" ou defrecord como "classes" ou algo assim: faz sentido, até o momento que não faz mais, e aí mentalmente é difícil de desaprender

j_zes21:10:29

Cara, eu entendo, vc ta coberto de razão, é que encarar a realidade nua e crua é difícil rsrsrs, e não fazer correlações depois de 15 anos de OO uasdufaushdfuasdf é tenso

mauricio.szabo02:10:41

Sim, eu te falo por exp. própria: fiquei um tempo nessa idéia de "protocol = interface" e "record = classe" e montei uma abstração toda em cima disso... e deu bem ruim hahahaha

👀 1
Arthur Fücher20:10:16

> faz sentido, até o momento que não faz mais @mauricio.szabo , 2023

😂 8
mauricio.szabo02:10:38

Mas fala sério, ficou bem claro né? hahahaha

j_zes22:10:45

com ctz rsrsrs