<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Arthur Fücher</title>
    <description>The latest articles on DEV Community by Arthur Fücher (@afucher).</description>
    <link>https://dev.to/afucher</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F187079%2F58cdd60f-12a8-42da-b3fa-b795b3199841.jpg</url>
      <title>DEV Community: Arthur Fücher</title>
      <link>https://dev.to/afucher</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/afucher"/>
    <language>en</language>
    <item>
      <title>Agora um espaço para falar sobre #Clojure em português &lt;3 

Quer conhecer mais sobre Clojure? https://clojurebrasil.com.br/</title>
      <dc:creator>Arthur Fücher</dc:creator>
      <pubDate>Thu, 23 Oct 2025 19:16:31 +0000</pubDate>
      <link>https://dev.to/afucher/agora-um-espaco-para-falar-sobre-clojure-em-portugues-3-quer-conhecer-mais-sobre-clojure-30cj</link>
      <guid>https://dev.to/afucher/agora-um-espaco-para-falar-sobre-clojure-em-portugues-3-quer-conhecer-mais-sobre-clojure-30cj</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://clojurebrasil.com.br/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fclj-br.github.io%2F%2Fresources%2Flogo.svg" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://clojurebrasil.com.br/" rel="noopener noreferrer" class="c-link"&gt;
            Clojure Brasil
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Comunidade Clojure Brasil
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fclojurebrasil.com.br%2Fresources%2Flogo.svg"&gt;
          clojurebrasil.com.br
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;




</description>
    </item>
    <item>
      <title>TDC Summit 2024</title>
      <dc:creator>Arthur Fücher</dc:creator>
      <pubDate>Sun, 31 Mar 2024 18:42:23 +0000</pubDate>
      <link>https://dev.to/afucher/tdc-summit-2024-57j</link>
      <guid>https://dev.to/afucher/tdc-summit-2024-57j</guid>
      <description>&lt;p&gt;Dia 26 e 27 de março aconteceu o TDC Summit 2024 e eu participei pela primeira vez no estande de uma empresa, onde conheci e revi muitas pessoas.&lt;/p&gt;




&lt;p&gt;Estou escrevendo esse texto enquanto escuto o podcast &lt;a href="https://open.spotify.com/show/4A10xEx9daSzyBtjfSWy0s"&gt;Fláudio&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Uma participação com gostinho especial
&lt;/h2&gt;

&lt;p&gt;Quero começar a contar sobre o evento falando como foi diferente participar como "expositor" e não como participante ou palestrante.&lt;br&gt;
Essa edição fui convidado e fiquei no estande do Nubank apresentando as nossas comunidades. Para muitas pessoas isso pode ser meio nada a ve, e nada importante. Mas para mim tem um gosto especial.&lt;br&gt;
Já escrevi um pouco aqui sobre a minha experiência mudando da &lt;a href="https://dev.to/afucher/series/20937"&gt;Engenheria de Software para Developer Relations&lt;/a&gt;, e estar em contato com comunidade, além de ser algo que me motiva/energiza absurdamente, é algo que está totalmente ligado a essa nova área.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comunidade &amp;lt;3
&lt;/h2&gt;

&lt;p&gt;De que vale ir em um evento se não for para conhecer outras pessoas? Ok, pra vc deve ter outros valores ahhahah Mas para mim, essa é a melhor parte!&lt;/p&gt;

&lt;p&gt;No primeiro dia eu tive a oportunidade de participar de um bate papo sobre comunidades, e pude não só compartilhar um pouco da minha experiência mas principalmente escutar as experiências de 3 pessoas espetaculares:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.danvitoriano.com.br"&gt;Dan Vitoriano&lt;/a&gt;: Foi o mediador do bate-papo, e não poderia ter sido melhor. Para quem não conhece o trabalho dele vou destacar 2: apresentador da &lt;a href="https://conf.braziljs.org/"&gt;Brazil JS Conf 2024&lt;/a&gt; e criador da &lt;a href="https://www.danvitoriano.com.br/iniciativas/devs40"&gt;Comunidade Devs40+&lt;/a&gt;. E fiquem de olho na LGBTech Conf Brasil!&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/in/mocraveirodev/"&gt;Monica Craveiro de Menezes&lt;/a&gt;: Desenvolvedora Back-end que tem uma lista gigante de comunidades que participa e organiza, trouxe muita informação e experiência sobre NodeBR e Thasfin.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/in/vivianyamassaki"&gt;Vivian Mayumi Yamassaki&lt;/a&gt;: Além de ser Mestra com pesquisa em Inteligência Artificial e área de aplicação em Bioinformática pela Universidade de São Paulo, trouxe sua experiência com a MIA (Mulheres em IA). Uma comunidade sensacional e que já fez um meetup no Nubank, se quiser saber mais confira o post &lt;a href="https://building.nubank.com.br/pt-br/mia-meetup-2023-uma-reuniao-para-mulheres-em-ia-generativa/"&gt;sobre essa edição nesse link.&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Foi muito massa! Trouxe um pouco da minha experiência que hoje tem sido diferente nas 3 comunidades que tenho mais atuado:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/company/nubank/events/"&gt;Meetup de Engenharia do Nubank&lt;/a&gt;: Uma visão corporativa de comunidade, onde trazemos nubankers e pessoas de fora para falar sobre Engenharia de Software.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.meetup.com/clojure-br/"&gt;Clojure BR&lt;/a&gt;: comunidade de Clojure, onde faço meetups online para falar sobre Clojure em pt-br. Tem um público pequeno e pouco tempo de vida. Se quiser ver edições anteriores, confira &lt;a href="https://www.youtube.com/@clojure-br"&gt;nosso canal no Youtube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.meetup.com/pt-BR/fluttersp/"&gt;Flutter SP&lt;/a&gt;: Comunidade que entrei faz pouco tempo para ajudar, mas que já tem uma comunidade grande e com bastante conteúdo. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pessoas que impactam
&lt;/h2&gt;

&lt;p&gt;Durante o evento também conheci muitas pessoas, e dentre elas conheci duas pessoas que tem projetos que me chamaram a atenção:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/in/passosmatheus/"&gt;Matheus Passos&lt;/a&gt;: Me contou de um projeto muito massa que ele faz parte, e tem atuado na construção do site e da plataforma. O projeto é a &lt;a href="https://www.dpfl.org.br/"&gt;ONG Pulse+&lt;/a&gt;, que se chamava antes &lt;strong&gt;Da Perifa para Faria Lima&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Potencializando a jornada de jovens brasileiros em situação de vulnerabilidade econômica através da educação, tecnologia e empregabilidade.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/in/maanolfi/"&gt;Marco Antonio&lt;/a&gt;: Apresentado pelo Dan Vitoriano, o Marco tem usado IA para montar um projeto muito interessante. &lt;a href="https://www.tertuulia.com/"&gt;Tertuulia&lt;/a&gt; agrega diversos cursos que estão gratuitos no YouTube, e o Marco me contou que a plataforma usa IA para gerar questionários baseado no conteúdo e no final gera um certificado. Também tem espaço para vagas e comunidades.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Se conecte!
&lt;/h2&gt;

&lt;p&gt;Eu sempre gostei muito de comunidades e as conexões que elas trazem, nesse texto trouxe um pouco da minha experiência. Mas tiveram muitos papos, muitas trocas, e muitas conexões.&lt;br&gt;
Então, se conecte! Ache uma comunidade que faça sentido para você, e experimente.&lt;/p&gt;




&lt;p&gt;E você? Gosta de comunidades e eventos? Comente aí ou deixe uma reaction. Nos vemos num próximo post ou evento.&lt;/p&gt;




&lt;p&gt;Foto de &lt;a href="https://unsplash.com/pt-br/@etiennegirardet?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Etienne Girardet&lt;/a&gt; na &lt;a href="https://unsplash.com/pt-br/fotografias/uma-grande-parede-branca-com-algumas-palavras-sobre-ela-RuMqg2cs-M0?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devrel</category>
      <category>braziliandevs</category>
      <category>thedevconf</category>
      <category>community</category>
    </item>
    <item>
      <title>Dart: Tudo é interface?</title>
      <dc:creator>Arthur Fücher</dc:creator>
      <pubDate>Thu, 05 Oct 2023 12:00:00 +0000</pubDate>
      <link>https://dev.to/afucher/dart-tudo-e-interface-5di7</link>
      <guid>https://dev.to/afucher/dart-tudo-e-interface-5di7</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Eu vejo interfaces...&lt;/li&gt;
&lt;li&gt;Com que frequencia?&lt;/li&gt;
&lt;li&gt;O tempo todo!&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Em Dart todas as classes definem interfaces implicitamente, ou seja, sempre que você tiver uma classe pode criar uma outra classe implementando ela.&lt;br&gt;
Ao fazer isso você precisa implementar todos os métodos que ela tem respeitando o contrato.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;A&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'A'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;B&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'B'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// 1&lt;/span&gt;
  &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;  &lt;span class="c1"&gt;// A&lt;/span&gt;
  &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// 2&lt;/span&gt;
  &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;B&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;  &lt;span class="c1"&gt;// B&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O mais comum de se ver é a criação de uma &lt;code&gt;abstract class&lt;/code&gt; quando vai se usar para implementar em outra, assim você não declara o corpo dos métodos.&lt;/p&gt;

&lt;h2&gt;
  
  
  E a interface?
&lt;/h2&gt;

&lt;p&gt;Na versão 3.0 do Dart foram adicionados diversos modificadores, e um deles foi &lt;code&gt;interface&lt;/code&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Então eu posso criar uma interface direto?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Não. Eu sei, é meio confuso. Mas vamos lá...&lt;br&gt;
Os modificadores adicionados foram para resolver alguns problemas para quem desenvolve bibliotecas.&lt;/p&gt;

&lt;p&gt;Quando você tem uma biblioteca e seu usuário precisa passar uma classe que você definiu, ele pode estender uma classe sua ou implementar já que classes são interfaces.&lt;/p&gt;

&lt;p&gt;Mas e se eu não quiser que a pessoa possa estender? Eu quero realmente só que a pessoa use o contrato que eu criei. O modificador &lt;code&gt;interface&lt;/code&gt; é usado para isso, deixar explícito que é apenas para ser implementada. &lt;/p&gt;

&lt;p&gt;Dentro da sua biblioteca, ainda é possível estender:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;class&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'A'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;B&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'B'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Porém fora dela não é permitido, dando o seguinte erro:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'./lib_a.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

 &lt;span class="c1"&gt;//The class 'A' can't be extended outside &lt;/span&gt;
&lt;span class="c1"&gt;// of its library because it's an interface class. &lt;/span&gt;
&lt;span class="c1"&gt;// dart(invalid_use_of_type_outside_library)&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;C&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'C'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;D&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'D'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Criando uma interface pura
&lt;/h2&gt;

&lt;p&gt;É possível combinar mais de um modificador, com isso podemos criar uma &lt;code&gt;abstract interface class&lt;/code&gt;. &lt;br&gt;
Com isso, a classe terá métodos abstratos (sem corpo) e só poderá ser implementada, virando uma &lt;strong&gt;interface pura&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;abstract&lt;/span&gt; &lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;class&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;B&lt;/span&gt; &lt;span class="kd"&gt;implements&lt;/span&gt; &lt;span class="n"&gt;A&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'B'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Conhecia esses novos modificadores para classe? Já aproveitou o fato de Dart ter interfaces implícitas? Conta aí nos comentários.&lt;/p&gt;

</description>
      <category>dart</category>
      <category>flutter</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Hacktoberfest: 5 projetos dart/flutter para participar</title>
      <dc:creator>Arthur Fücher</dc:creator>
      <pubDate>Sun, 01 Oct 2023 20:37:26 +0000</pubDate>
      <link>https://dev.to/afucher/hacktoberfest-5-projetos-dartflutter-para-participar-38o1</link>
      <guid>https://dev.to/afucher/hacktoberfest-5-projetos-dartflutter-para-participar-38o1</guid>
      <description>&lt;p&gt;Quer participar da Hacktoberfest 2023 e ainda não sabe projetos para contribuir? Afim de melhorar seu conhecimento em Dart ou Flutter e ainda ajudar a comunidade?&lt;br&gt;
Resolvi dar uma pesquisada nos repositórios que estão participando do Hacktoberfest 2023 e compartilhar alguns para você se inspirar e contribuir!&lt;/p&gt;




&lt;p&gt;Hacktoberfest é um evento que eu gosto muito, me apresentou muitos projetos legais e como é legal contribuir com open-source!&lt;/p&gt;

&lt;p&gt;Se você não sabe o que é Hacktoberfest, tá tudo bem, vou deixar aqui um link para esse conteúdo massa da &lt;a class="mentioned-user" href="https://dev.to/levxyca"&gt;@levxyca&lt;/a&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;É um evento online patrocinado pela Digital Ocean que acontece todo ano, durante o mês de outubro. Seu objetivo é incentivar e movimentar a comunidade a participar de projetos Open Source. - &lt;a href="https://dev.to/levxyca/inicie-no-mundo-open-source-participando-da-hacktoberfest-3np6"&gt;Inicie no mundo open-source participando da Hacktoberfest&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Contribuir com o que?
&lt;/h2&gt;

&lt;p&gt;Você pode pensar:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Po, mas ainda to estudando Dart/Flutter. Mal consigo fazer meu código aqui, como foi ajudar um outro projeto?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O mais legal é que você não precisa somente contribuir com código, você não precisa ter conhecimento do projeto que está contribuindo. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Como assim?? &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Senta que lá vem a história...
&lt;/h2&gt;

&lt;p&gt;Vou dar um exemplo:&lt;br&gt;
Eu estava preparando minha palestra para o TDC e estava relendo toda a documentação do Flutter Web. Em um determinado momento, percebi que o link para uma página de outro site estava quebrado. Fui lá e achei a página certa, para ler. Nesse momento eu poderia seguir minha vida numa boa, porém a doc do Flutter é aberta no github.&lt;br&gt;
Então eu abri um &lt;a href="https://github.com/flutter/website/pull/9385"&gt;pull-request&lt;/a&gt; para arrumar o link dessa página. Viu? Eu melhorei a documentação de algo que eu estava estudando! &lt;/p&gt;

&lt;h2&gt;
  
  
  Dicas de projetos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/flame-engine/flame"&gt;Flame&lt;/a&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;A Flutter based game engine.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Curte jogos? Ta aí uma oportunidade bem massa de conhecer o Flame e ainda contribuir.&lt;br&gt;
E a &lt;a href="https://github.com/flame-engine/flame-docs-site"&gt;documentação&lt;/a&gt; deles também ta participando do Hacktoberfest.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/AppFlowy-IO/AppFlowy"&gt;AppFlowy&lt;/a&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;AppFlowy is an open-source alternative to Notion. You are in charge of your data and customizations. Built with Flutter and Rust.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Aplicação muito interessante, e ainda pode ser uma oportunidade se curtir Rust! Uma coisa legal desse repo é que usam dois labels bem legais nas issues: &lt;a href="https://github.com/AppFlowy-IO/AppFlowy/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue+for+devs%22"&gt;good-first-issue-for-devs&lt;/a&gt; e &lt;a href="https://github.com/AppFlowy-IO/AppFlowy/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue+for+experienced+devs%22"&gt;good-first-issue-for-experienced-devs&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/imaNNeo/fl_chart"&gt;fl_chart&lt;/a&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;FL Chart is a highly customizable Flutter chart library that supports Line Chart, Bar Chart, Pie Chart, Scatter Chart, and Radar Chart.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Se você já precisou usar gráficos, muito provavelmente já viu essa biblioteca. Que tal contribuir de volta? &lt;br&gt;
Se tiver começando agora, eles usam a label &lt;a href="https://github.com/imaNNeo/fl_chart/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22"&gt;good-first-issue&lt;/a&gt; para facilitar.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/rrousselGit/riverpod"&gt;riverpod&lt;/a&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;A simple way to access state while robust and testable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Riverpod é uma biblioteca muito utilizada para controle de estados. &lt;br&gt;
Além de issues de melhoria e correções de bugs, o repositório tem diversas issues com a label &lt;a href="https://github.com/rrousselGit/riverpod/issues?q=is%3Aissue+is%3Aopen+label%3Adocumentation"&gt;documentation&lt;/a&gt; que podem ser uma ótima oportunidade para contribuição.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/foss42/apidash"&gt;apidash&lt;/a&gt;
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;API Dash is a beautiful open-source cross-platform API Client built using Flutter which can help you easily create &amp;amp; customize your API requests, visually inspect responses and generate Dart code on the go.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Quem já usou postman ou qualquer outra alternativa para fazer requests vai achar esse projeto sensacional. Possui também a opção de gerar código Dart para usar na sua aplicação! Achei o projeto bem massa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Partiu contribuir?
&lt;/h2&gt;

&lt;p&gt;Esses foram alguns projetos que eu achei interessantes, e que estão ativos e com oportunidades legais para contribuição ou mesmo para aprender mais!&lt;/p&gt;

&lt;p&gt;Quer encontrar outros projetos em Dart que estão participando do Hacktoberfest? &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/topics/hacktoberfest?l=dart&amp;amp;o=desc&amp;amp;s=updated"&gt;https://github.com/topics/hacktoberfest?l=dart&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Tem alguma outra sugestão de projeto? Deixa um comentário :) &lt;br&gt;
E se puder contribuir comigo, compartilha esse texto!&lt;/p&gt;

&lt;p&gt;Abraços, e nos vemos em breve.&lt;/p&gt;

</description>
      <category>hacktoberfest23</category>
      <category>hacktoberfest</category>
      <category>flutter</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Flutter Web no TDC SP 2023</title>
      <dc:creator>Arthur Fücher</dc:creator>
      <pubDate>Fri, 22 Sep 2023 12:00:00 +0000</pubDate>
      <link>https://dev.to/afucher/flutter-web-no-tdc-sp-2023-491d</link>
      <guid>https://dev.to/afucher/flutter-web-no-tdc-sp-2023-491d</guid>
      <description>&lt;p&gt;Essa semana marcou minha volta aos eventos presenciais, e justo no TDC (The Developers Conference), que foi o evento que me apresentou o que é comunidade, o que é aproveitar o corredor de evento. E pra completar ainda tive a oportunidade de palestrar sobre Flutter Web!&lt;/p&gt;




&lt;p&gt;Esse ano decidi que queria voltar a participar de eventos, e palestrar! O TDC é um evento que sempre fez parte da minha carreira e então decidi submeter uma palestra para lá, aí chegou o momento mais difícil&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Falar sobre o que?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Trabalho um tempo com Flutter e venho estudando cada vez mais, achei que era um bom assunto! Mas quando fui ver as trilhas do TDC, não tinha nenhuma sobre Flutter ou Mobile.. aí fiquei meio perdido.&lt;br&gt;
Foi quando vi a trilha de Web e Frontend e pensei, porque não?&lt;/p&gt;

&lt;h2&gt;
  
  
  Introdução ao Flutter Web
&lt;/h2&gt;

&lt;p&gt;Tenho visto o trabalho da equipe do Flutter de melhorias da plataforma Web, e achei que seria uma excelente oportunidade de poder estudar mais!&lt;br&gt;
A palestra foi aceita, aí era hora de preparar o material! Foi então que eu esbarrei no episódio &lt;strong&gt;Craft Engaging Presentations with FlutterDeck&lt;/strong&gt; do podcast &lt;em&gt;Flying High with Flutter&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://redcircle.com/shows/flying-high-with-flutter/ep/ce31b0e8-7dd7-4b1c-afdc-b7eb57f33459"&gt;Flying High with Flutter&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Eu sempre tentei em palestras técnicas ter &lt;em&gt;live code&lt;/em&gt;, programar algo na hora, mostrar o que estou falando acontecendo. Aí já sabe né? Resolvi codar a minha apresentação sobre Flutter Web em Flutter (Web) &lt;/p&gt;

&lt;h2&gt;
  
  
  Flutter Deck
&lt;/h2&gt;

&lt;p&gt;De acordo com o próprio autor, ele já tinha usado algumas vezes e apenas extraiu a biblioteca, o que acho que contribuiu para que mesmo sendo nova ser simples e fácil de usar!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/mkobuolys/flutter_deck"&gt;Repositório: Flutter Deck&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Consegui fazer a apresentação com todo o conteúdo que eu queria, e ainda tinha o &lt;em&gt;grand finale&lt;/em&gt;: Fechar a apresentação revelando que a própria apresentação estava rodando no Flutter Web.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aquele gás que faltava
&lt;/h2&gt;

&lt;p&gt;Codar a apresentação em Flutter e o próprio TDC como um todo, me deram a energia que eu precisava.&lt;/p&gt;

&lt;p&gt;Mas com certeza uma parada que foi fundamental, foi ter conhecido o Diego, ou mais conhecido como Prof. Diego Antunes. Eu consumo bastante o conteúdo do &lt;a href="https://www.youtube.com/user/drantuness"&gt;canal&lt;/a&gt; dele e foi muito massa poder conversar com ele.&lt;/p&gt;

&lt;p&gt;Pretendo continuar os estudos sobre Flutter e começar a compartilhar isso por aqui!&lt;br&gt;
Quem quiser, o código da minha palestra está &lt;a href="https://github.com/afucher/flutter_web_101"&gt;aqui&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Deixa aí nos comentários, curte Flutter? O que gostaria que eu postasse de conteúdo?&lt;/p&gt;

&lt;p&gt;Até mais!&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>flutter</category>
      <category>frontend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Criando variáveis e funções em Clojure</title>
      <dc:creator>Arthur Fücher</dc:creator>
      <pubDate>Mon, 15 May 2023 12:00:00 +0000</pubDate>
      <link>https://dev.to/afucher/criando-variaveis-e-funcoes-em-clojure-4j9f</link>
      <guid>https://dev.to/afucher/criando-variaveis-e-funcoes-em-clojure-4j9f</guid>
      <description>&lt;p&gt;O básico para começar a desenvolver em uma linguagem (funcional) é aprender a criar variáveis para armazenar os dados e funções para poder trabalhar com esses dados.&lt;/p&gt;

&lt;p&gt;Vamos ver na prática como trabalhar com variáveis e criar funções, para isso vamos usar o REPL. Se ainda não sabe o que é, conheça &lt;a href="https://dev.to/afucher/repl-seu-melhor-amigo-no-mundo-clojure-3e56"&gt;REPL - seu melhor amigo no mundo clojure&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Criando variáveis
&lt;/h2&gt;

&lt;p&gt;Clojure preza pela imutabilidade, então quando criamos uma variável estamos definindo um símbolo com um valor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="n"&gt;user=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;foo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="ss"&gt;'user/foo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse exemplo estamos definindo &lt;code&gt;foo&lt;/code&gt; com o valor 1, o retorno é o nome completo do símbolo criado &lt;code&gt;#'user/foo&lt;/code&gt;. Quando criamos, o Clojure cria na namespace atual, que no caso é &lt;code&gt;user&lt;/code&gt;. Quando temos um arquivo, ele vai ter a própria namespace, e tudo criado lá dentro será pertencente aquela namespace. &lt;br&gt;
Agora podemos acessar o valor direto ou usá-lo passando para uma função:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="n"&gt;user=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;foo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;user=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;user=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;foo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notamos nesse exemplo que o valor de &lt;code&gt;foo&lt;/code&gt; não mudou após a execução de &lt;code&gt;inc&lt;/code&gt;. Isso é evidência a característica de imutabilidade que comentamos, ou seja, o valor não é alterado e sim o novo valor é retornado. &lt;br&gt;
Você pode estar pensando: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"podemos chamar o &lt;code&gt;def&lt;/code&gt; novamente com o mesmo nome?"  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sim, isso iria "redefinir". Mas não é recomendado fazer isso, então nem pense nisso 😅&lt;/p&gt;
&lt;h2&gt;
  
  
  Criando funções
&lt;/h2&gt;

&lt;p&gt;Da mesma maneira que usamos &lt;code&gt;def&lt;/code&gt; para atribuir um valor simples, fazemos para criar uma função. Vamos criar uma função chamada &lt;code&gt;ola&lt;/code&gt; que recebe um parâmetro &lt;code&gt;nome&lt;/code&gt; e imprime &lt;code&gt;Olá &amp;lt;&amp;lt;nome&amp;gt;&amp;gt;&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ola&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;println&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Olá "&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Estamos atribuindo a &lt;code&gt;ola&lt;/code&gt; uma função, que definimos usando &lt;code&gt;fn&lt;/code&gt;. Usamos &lt;code&gt;[]&lt;/code&gt; para declarar os parâmetros que recebemos, e depois o corpo da função.&lt;br&gt;
Agora podemos executar a função igual as outras que já vimos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="n"&gt;user=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;ola&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"mundo"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Ol&lt;/span&gt;&lt;span class="err"&gt;á&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mundo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Retornando valores
&lt;/h3&gt;

&lt;p&gt;No exemplo anterior, vimos que depois de imprimir a mensagem aparece &lt;code&gt;nil&lt;/code&gt;, isso representa o retorno da nossa função. Em Clojure as funções retornam a última operação/valor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user=&amp;gt; (defn soma2 [x] (+ x 2))
#'user/soma2
user=&amp;gt; (soma2 1)
3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  (def + fn)
&lt;/h3&gt;

&lt;p&gt;Clojure criou uma maneira um pouco mais simplificada para a criação funções. &lt;br&gt;
Ao invés de escrever &lt;code&gt;def foo (fn []...)&lt;/code&gt; para atribuir uma função, podemos utilizar &lt;code&gt;defn&lt;/code&gt;. O exemplo anterior ficaria assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;defn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ola&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;println&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Olá "&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Aridade
&lt;/h3&gt;

&lt;p&gt;A aridade de uma função é a quantidade de parâmetros que ela recebe. Em Clojure podemos definir na mesma função múltiplas aridades, isso pode ser usado por exemplo para definir parâmetros opcionais ou valores default.&lt;br&gt;
Vamos alterar a função &lt;code&gt;ola&lt;/code&gt; para que quando for chamada sem nenhum parâmetro imprima "Ola mundão":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;defn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ola&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;ola&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"mundão"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;println&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Olá "&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cada aridade é declarada envolta em &lt;code&gt;()&lt;/code&gt; e declaramos da menor aridade para a maior.&lt;br&gt;
Vamos executar novamente a função, não passando parâmetro e passando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user=&amp;gt; (ola)
Olá mundão
nil
user=&amp;gt; (ola "mundo")
Olá mundo
nil
user=&amp;gt; (ola "mundo" "grande")
Execution error (ArityException) at user/eval2032 (REPL:1).
Wrong number of args (2) passed to: user/ola
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note que quando chamamos a função passando um número de argumentos que não existe, recebemos uma &lt;code&gt;ArityException&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Funções: de primeira classe
&lt;/h2&gt;

&lt;p&gt;Em Clojure as funções são armazenadas e tratadas como os outros valores, portanto podem ser passadas como argumentos para outras funções 🤯&lt;br&gt;
Para exemplificar, vamos criar uma função que receba o nome da pessoa e a forma como queremos cumprimentar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;defn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cumprimentar&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cumprimento&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; 
  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cumprimento&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E podemos executá-la:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="n"&gt;user=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cumprimentar&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Ariel"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ola&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Ol&lt;/span&gt;&lt;span class="err"&gt;á&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ariel&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;nil&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Veja que a função &lt;code&gt;cumprimentar&lt;/code&gt; recebe o &lt;code&gt;cumprimento&lt;/code&gt; e executa passando o nome, que também veio como parâmetro, para ela.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docstring
&lt;/h2&gt;

&lt;p&gt;Outra coisa importante é que quando declaramos uma função podemos criar junto uma documentação/descrição do que ela faz. Para isso basta passar antes dos parâmetros uma string com a descrição:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;defn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ola&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s"&gt;"Recebe um nome e devolve Olá &amp;lt;&amp;lt;nome&amp;gt;&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;println&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Olá "&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E agora, podemos usar a função &lt;code&gt;doc&lt;/code&gt; que vimos no outro &lt;a href="https://dev.to/afucher/executando-funcoes-no-clojure-p4p"&gt;post&lt;/a&gt; passando a nossa função:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="n"&gt;user=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;doc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ola&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;-------------------------&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;user/ola&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Recebe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;um&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;devolve&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ol&lt;/span&gt;&lt;span class="err"&gt;á&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;&amp;lt;&amp;lt;nome&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Muito legal né? 🤩&lt;/p&gt;

&lt;h3&gt;
  
  
  Valores locais
&lt;/h3&gt;

&lt;p&gt;Em Clojure podemos atribuir valores locais a nomes, dentro do escopo de funções, usando o &lt;code&gt;let&lt;/code&gt;. Esses valores serão constantes, ou seja, não poderemos mais alterar ou redefinir.&lt;br&gt;
Com o &lt;code&gt;let&lt;/code&gt; você pode criar de uma vez 1 ou mais constantes, ele segue a seguinte estrutura:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="c1"&gt;;;Podemos utilizar dentro do escopo do let&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para exemplificar vamos alterar a função anterior para criar a string e armazenar localmente, e depois imprimir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;defn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ola&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mensagem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"Ola "&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;println&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mensagem&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Criamos a &lt;code&gt;mensagem&lt;/code&gt; com a string completa dentro do &lt;code&gt;let&lt;/code&gt; e depois chamamos o &lt;code&gt;println&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;Espero que tenha gostado do conteúdo! Se sim, compartilhe, comente e/ou deixe uma reação. Isso ajuda a trazer visibilidade e saber que estão curtindo!&lt;br&gt;
E se não gostou, comenta aí o que poderia melhorar! Quem sabe o próximo post você goste?&lt;/p&gt;

&lt;p&gt;Abraços e até breve&lt;/p&gt;

</description>
      <category>clojure</category>
      <category>braziliandevs</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>(Executando funções no Clojure)</title>
      <dc:creator>Arthur Fücher</dc:creator>
      <pubDate>Mon, 08 May 2023 12:30:00 +0000</pubDate>
      <link>https://dev.to/afucher/executando-funcoes-no-clojure-p4p</link>
      <guid>https://dev.to/afucher/executando-funcoes-no-clojure-p4p</guid>
      <description>&lt;p&gt;Agora que já tem o ambiente instalado e já sabemos o que é REPL, que tal entender um pouco mais como executar funções no Clojure?&lt;br&gt;
Se ainda não tem o ambiente funcionando, não se preocupe! Basta seguir os outros posts que fiz da série &lt;a href="https://dev.to/afucher/series/21480"&gt;Clojure 101&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Características das funções
&lt;/h2&gt;

&lt;p&gt;Clojure é uma linguagem da família LISP, e por isso tem algumas características diferentes de quem não teve contato com nenhum dialeto LISP.&lt;br&gt;
No texto sobre REPL executamos algumas funções de exemplo para entender o laço contido dentro do REPL, se lembra?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;(pprint "Hello world!")&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;(+ 1 1)&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Analisando elas, a primeira coisa que podemos notar é o uso de &lt;code&gt;()&lt;/code&gt; parênteses envolvendo a chamada da função. Em outras linguagens escrevemos a função a ser executada, e depois os parênteses para executá-la e passar os parâmetros. Por exemplo, no JavaScript seria &lt;code&gt;console.log("Hello world!")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Outra ponto é o uso da notação polonesa, onde você declara primeiro a operação e depois os operandos. Quando olhamos para a soma, ao invés de declarar &lt;code&gt;1 + 1&lt;/code&gt;, usamos &lt;code&gt;+ 1 1&lt;/code&gt;. Essa notação vem da matemática e tem suas vantagens. No caso da soma, vamos pensar que queremos somar 3 números: &lt;code&gt;1 + 2 + 3&lt;/code&gt;, em clojure escrevemos &lt;code&gt;+ 1 2 3&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Chamadas de funções encadeadas
&lt;/h2&gt;

&lt;p&gt;Continuando a pensar em operações matemáticas, digamos que queremos executar a seguinte conta: &lt;code&gt;2 + 4 * 3&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Aqui já começa o primeiro desafio &lt;del&gt;pessoal&lt;/del&gt;, saber em qual ordem isso deveria ser resolvido 😂&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Depois de pesquisar na internet a ordem correta é * depois + 👍, então precisamos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Executar &lt;code&gt;4 * 3&lt;/code&gt;; (= 12)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Executar &lt;code&gt;2 + _multiplicação_&lt;/code&gt;; (= 14)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Vamos montar a expressão Clojure que representa isso. A multiplicação fica &lt;code&gt;(* 4 3)&lt;/code&gt;, agora precisamos fazer a soma que seria &lt;code&gt;(+ 2 _multiplicação_ )&lt;/code&gt;. Substituindo ficamos com &lt;code&gt;(+ 2 (* 4 3))&lt;/code&gt;, vamos validar no REPL?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="n"&gt;user=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você pode estar se perguntando:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mas com diversas chamadas isso deve ficar horrível de entender. Não fica confuso?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;E a minha reposta é: Fica sim! 🤷 Existem maneiras de melhorar o código, mas isso é um assunto mais pra frente.&lt;/p&gt;

&lt;h2&gt;
  
  
  doc e source: funções pra te ajudar
&lt;/h2&gt;

&lt;p&gt;Quando estou vendo uma linguagem ou função nova, tendo a ir fuçando, lendo documentações e código fonte. Me ajuda a entender melhor e conhecer novas coisas.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Se quiser ver onde eu costumo me atualizar e aprender sobre clojure, fiz um &lt;a href="https://dev.to/afucher/clojure-onde-aprender-28c5"&gt;post sobre isso&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;E quando estamos no REPL tem uma maneira muito legal de poder entender melhor as funções que estamos usando. No REPL vamos chamar a função &lt;code&gt;doc&lt;/code&gt; passando &lt;code&gt;+&lt;/code&gt; como parâmetro:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="n"&gt;user=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;doc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;+&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;-------------------------&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;clojure.core/+&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;more&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;Returns&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;+&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;returns&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Does&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;auto-promote&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;longs,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;will&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;throw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;overflow.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;See&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;also&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;+&lt;/span&gt;&lt;span class="o"&gt;'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ele traz o nome completo da função &lt;code&gt;clojure.core/+&lt;/code&gt;, nesse caso indicando que a função &lt;code&gt;+&lt;/code&gt; fica dentro da &lt;em&gt;namespace&lt;/em&gt; &lt;code&gt;clojure.core&lt;/code&gt;.&lt;br&gt;
Depois traz todas as opções de chamada que a função tem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;[]&lt;/code&gt;: sem nenhum parâmetro&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;[x]&lt;/code&gt;: recebendo um parâmetro&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;[x y]&lt;/code&gt;: recebendo dois parâmetros&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;[x y &amp;amp; more]&lt;/code&gt;: recebendo N parâmetros. O &lt;code&gt;&amp;amp;&lt;/code&gt; indica que todos os demais parâmetros irão vir dentro de um &lt;em&gt;array&lt;/em&gt; na variável &lt;code&gt;more&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E por último temos a &lt;em&gt;docstring&lt;/em&gt; da função, explicando o que a função faz, e algumas outras informações. Veja também o &lt;code&gt;See also: +'&lt;/code&gt; indicando para olhar a função &lt;code&gt;+'&lt;/code&gt;. ⚠️ Isso pode ser um caminho sem volta&lt;/p&gt;

&lt;p&gt;E se isso não for o bastante para minha curiosidade? Vamos então chamar a função &lt;code&gt;source&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight clojure"&gt;&lt;code&gt;&lt;span class="n"&gt;user=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;+&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;defn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;+&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s"&gt;"Returns the sum of nums. (+) returns 0. Does not auto-promote
  longs, will throw on overflow. See also: +'"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="no"&gt;:inline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;nary-inline&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;'add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;'unchecked_add&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="no"&gt;:inline-arities&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;&amp;gt;1?&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="no"&gt;:added&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;"1.2"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cast&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Number&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;clojure.lang.Numbers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;more&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;reduce1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;more&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🤯 Com esse comando podemos ver a implementação da função, entender como fazem determinada coisa. &lt;/p&gt;




&lt;p&gt;Espero que tenha gostado do conteúdo! Se sim, compartilhe, comente e/ou deixe uma reação. Isso ajuda a trazer visibilidade e saber que estão curtindo!&lt;br&gt;
E se não gostou, comenta aí o que poderia melhorar! Quem sabe o próximo post você goste? &lt;/p&gt;

&lt;p&gt;Abraços e até breve&lt;/p&gt;




&lt;p&gt;Links interessantes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://lisp.com.br/"&gt;lisp.com.br&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://pt.wikipedia.org/wiki/Nota%C3%A7%C3%A3o_polonesa"&gt;Notação polonesa&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>clojure</category>
      <category>beginners</category>
      <category>braziliandevs</category>
      <category>functional</category>
    </item>
    <item>
      <title>Clojure: onde aprender?</title>
      <dc:creator>Arthur Fücher</dc:creator>
      <pubDate>Sat, 01 Apr 2023 12:00:00 +0000</pubDate>
      <link>https://dev.to/afucher/clojure-onde-aprender-28c5</link>
      <guid>https://dev.to/afucher/clojure-onde-aprender-28c5</guid>
      <description>&lt;p&gt;Tenho feito alguns &lt;a href="https://dev.to/afucher/series/21480"&gt;posts sobre Clojure&lt;/a&gt;, mas pode ser que não esteja na velocidade que quem lê deseja para aprender! Então resolvi escrever esse post com alguns links interessantes para quem quiser acelerar o conhecimento!&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;a href="https://clojuredocs.org/"&gt;Clojure Docs&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Um site que gosto muito de consultar sobre Clojure é o &lt;code&gt;Clojure Docs&lt;/code&gt;. Além de trazer a &lt;code&gt;docstring&lt;/code&gt; das funções, ele te traz exemplos adicionados pela comunidade e uma seção de &lt;em&gt;Veja Também (see also)&lt;/em&gt;. Com isso é muito legal pegar uma função, e ir navegando e conhecendo novas funcionalidades da linguagem de maneira simples.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ClojureDocs is a community-powered documentation and examples repository for the Clojure programming language.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="http://clojurians.net/"&gt;Clojurians Slack&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Essa é a principal comunidade de Clojure, é um Slack com diversos canais (inclusive o &lt;a href="https://clojurians.slack.com/archives/C055AMK5Y"&gt;clojure-brasil&lt;/a&gt;, se entrar da um oi). Lá você vê as principais referências e pessoas que mantem bibliotecas clojure, trocando ideia, ajudando e fazendo anúncios de novidade.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Clojurians Slack -- self-signup: &lt;a href="http://clojurians.net"&gt;http://clojurians.net&lt;/a&gt; and chat: &lt;a href="https://clojurians.slack.com"&gt;https://clojurians.slack.com&lt;/a&gt; -- is the largest online community of Clojure developers right now (January 2021). &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.reddit.com/r/Clojure/"&gt;r/Clojure&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Uma ferramenta que uso para outros tópicos e que também uso para acompanhar e aprender Clojure, é a comunidade de Clojure no &lt;a href="https://www.reddit.com/r/Clojure/"&gt;Reddit&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Reddit is home to thousands of communities, endless conversation, and authentic human connection. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://clojure.org/news/news"&gt;Clojure Deref&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;A Clojure Deref é um resumo semanal de diversos links e novidades sobre o ecossistema de Clojure organizada pelo &lt;a href="https://www.linkedin.com/in/alexmiller/"&gt;Alex Miller&lt;/a&gt;. Você pode acessá-la diretamente através do &lt;a href="https://clojure.org/news/news"&gt;site&lt;/a&gt;, &lt;a href="https://twitter.com/ClojureDeref"&gt;Twitter&lt;/a&gt; ou via &lt;a href="https://clojure.org/feed.xml"&gt;RSS&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Welcome to the Clojure Deref! This is a weekly link/news roundup for the Clojure ecosystem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://github.com/Camilotk/aprenda-clojure"&gt;Aprenda Clojure&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Repositório do github com diversos materiais para aprender Clojure mantido pelo &lt;a href="https://twitter.com/_camilotk"&gt;Camilo Cunha de Azevedo&lt;/a&gt;. Possui diversos tipos diferentes de material (livro, podcast, vídeos, etc...) e ainda traz informações sobre ser pago ou não e o idioma.&lt;br&gt;
E o bom é que por ser um repo, você pode mandar sua contribuição caso tenha uma sugestão.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lista de materiais e ferramentas para quem quer aprender Clojure&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No momento que escrevi esse post no repo ainda não constava o livro da Casa do Código: &lt;a href="https://www.casadocodigo.com.br/pages/sumario-programacao-funcional-clojure"&gt;Programação Funcional: Uma introdução em Clojure&lt;/a&gt; do &lt;a href="https://www.linkedin.com/in/gregoriomelo"&gt;Gregório Melo&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://alefeans.medium.com/"&gt;Medium do Álefe&lt;/a&gt; com posts sobre Clojure&lt;/li&gt;
&lt;li&gt;[Curso: Introdução à Programação Funcional(&lt;a href="https://segundatech.teachable.com/p/clojure-introducao-a-programacao-funcional"&gt;https://segundatech.teachable.com/p/clojure-introducao-a-programacao-funcional&lt;/a&gt;) feito pelo &lt;a href="https://www.linkedin.com/in/marcio-frayze/"&gt;Marcio Frayze&lt;/a&gt;. O curso é gratuito, mas você pode pagar caso queira ajudar financeiramente&lt;/li&gt;
&lt;li&gt;E claro, meus posts aqui no &lt;a href="https://dev.to/afucher"&gt;dev.to&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Conhece algum outro conteúdo que recomenda? Comenta aí ;)&lt;br&gt;
Até breve,&lt;br&gt;
Abraços&lt;/p&gt;

</description>
      <category>clojure</category>
      <category>beginners</category>
      <category>braziliandevs</category>
      <category>programming</category>
    </item>
    <item>
      <title>REPL: seu melhor amigo no mundo Clojure</title>
      <dc:creator>Arthur Fücher</dc:creator>
      <pubDate>Wed, 08 Feb 2023 12:00:00 +0000</pubDate>
      <link>https://dev.to/afucher/repl-seu-melhor-amigo-no-mundo-clojure-3e56</link>
      <guid>https://dev.to/afucher/repl-seu-melhor-amigo-no-mundo-clojure-3e56</guid>
      <description>&lt;p&gt;Nos textos anteriores para validar a instalação e configuração do ambiente eu comentei sobre o REPL, quando rodava o comando &lt;code&gt;clj&lt;/code&gt; ou &lt;code&gt;lein repl&lt;/code&gt;. Vamos então descobrir o que é e para que serve o REPL. &lt;/p&gt;

&lt;h2&gt;
  
  
  REPL
&lt;/h2&gt;

&lt;p&gt;REPL (eu falo &lt;em&gt;répou&lt;/em&gt;) é um acrônimo para &lt;strong&gt;R&lt;/strong&gt;ead-&lt;strong&gt;E&lt;/strong&gt;val-&lt;strong&gt;P&lt;/strong&gt;rint &lt;strong&gt;L&lt;/strong&gt;oop. Fazendo uma tradução livre seria um &lt;strong&gt;laço de leitura-execução-impressão&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;É uma ferramenta de interação onde é possível executar códigos da linguagem, facilitando o desenvolvimento, uma validação de função, entre outros.&lt;br&gt;
Um exemplo de REPL de javascript é o &lt;em&gt;console&lt;/em&gt; do navegador, nele você consegue escrever uma instrução em javascript, o navegador então irá: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ler a instrução que você colocou;&lt;/li&gt;
&lt;li&gt;Executar a instrução;&lt;/li&gt;
&lt;li&gt;Imprimir o resultado da instrução;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depois disso ficará esperando uma nova instrução e repetirá o processo, ficando num laço eterno.&lt;br&gt;
Diversas linguagens possuem isso e é uma excelente forma de começar a aprender a linguagem.&lt;/p&gt;
&lt;h2&gt;
  
  
  Na prática
&lt;/h2&gt;

&lt;p&gt;Abra o REPL rodando o comando &lt;code&gt;lein repl&lt;/code&gt; no terminal.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Se não tiver o Leiningen instalado, sugiro dar uma lida no &lt;a href="https://dev.to/afucher/leinigen-4akf"&gt;Leinigen: Configurando ambiente dev para Clojure&lt;/a&gt;, que lá explico passo-a-passo como instalar.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Uma vez executado, irá nos mostrar algumas informações como versão do Clojure e da &lt;em&gt;JDK&lt;/em&gt;, e também sobre um servidor &lt;em&gt;nREPL&lt;/em&gt;. Por enquanto podemos ignorar o &lt;em&gt;nREPL&lt;/em&gt;, mas sim é possível conectar de remoto nesse REPL 🤯&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iMt5wVb1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/md3ikow63hmyf0zqi8og.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iMt5wVb1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/md3ikow63hmyf0zqi8og.png" alt="terminal com a execução do REPL" width="794" height="247"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Olá, mundo!
&lt;/h2&gt;

&lt;p&gt;O REPL agora está parado no laço aguardando uma instrução para executar e imprimir o resultado. Vamos fazer um pequeno teste para ver como funciona.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Por enquanto não repare na sintaxe ou qualquer aspecto da linguagem, o foco é o REPL.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para começar que tal o famoso &lt;code&gt;Hello world!&lt;/code&gt;? Para isso execute o seguinte código no REPL &lt;code&gt;(pprint "Hello world!")&lt;/code&gt; e vamos analisar a saída:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;println &lt;span class="s2"&gt;"Hello world!"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="c"&gt;#READ&lt;/span&gt;
Hello world!                    &lt;span class="c"&gt;#EVAL&lt;/span&gt;
nil                             &lt;span class="c"&gt;#PRINT&lt;/span&gt;
&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;                          &lt;span class="c"&gt;#LOOP&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É possível ver todo o laço, primeiro ele lê a entrada da nossa instrução, e em seguida executa o código que nesse caso é para imprimir o texto "Hello world!". Depois o &lt;code&gt;nil&lt;/code&gt; pode ser confuso, mas é a impressão do resultado da execução, que nesse caso é nulo dado que esse é o retorno da chamada do &lt;code&gt;println&lt;/code&gt;. E no final volta para o estado de esperar a próxima execução.&lt;/p&gt;

&lt;p&gt;Agora vamos executar uma instrução que não imprima nada, como no caso anterior. Vamos somar 1 e 1 usando o código &lt;code&gt;(+ 1 1)&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;+ 1 1&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="c"&gt;#READ&lt;/span&gt;
2              &lt;span class="c"&gt;#(EVAL) PRINT &lt;/span&gt;
&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;         &lt;span class="c"&gt;#LOOP&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse exemplo o passo de executar o código não aparece, pois a soma é feita em memória. Mas depois conseguimos checar que no terminal é impresso o resultado da soma &lt;code&gt;2&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;Eai, o que achou? O REPL é excelente para conhecer funções e estruturas de dados em Clojure. Veja a &lt;a href="https://clojuredocs.org/clojure.core/println"&gt;documentação do println&lt;/a&gt; e tente outras funções.&lt;br&gt;
Caso queira se aprofundar, existem conteúdos também sobre REPL Driven Development bem interessantes! Sugiro a palestra &lt;a href="https://www.youtube.com/watch?v=gIoadGfm5T8"&gt;REPL Driven Development, Clojure's Superpower - Sean Corfield&lt;/a&gt; (em inglês)&lt;/p&gt;

&lt;p&gt;Abraços, e até uma próxima!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>clojure</category>
      <category>programming</category>
      <category>repl</category>
    </item>
    <item>
      <title>Leinigen: Configurando ambiente dev para Clojure</title>
      <dc:creator>Arthur Fücher</dc:creator>
      <pubDate>Tue, 31 Jan 2023 13:00:00 +0000</pubDate>
      <link>https://dev.to/afucher/leinigen-4akf</link>
      <guid>https://dev.to/afucher/leinigen-4akf</guid>
      <description>&lt;p&gt;Aloha!&lt;br&gt;
No outro texto compartilhei sobre &lt;a href="https://dev.to/afucher/clojure-instalando-no-windows-496e"&gt;como instalar Clojure no Windows&lt;/a&gt;, agora iremos ver uma ferramenta muito utilizada em projetos Clojure: &lt;strong&gt;Leinigen&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  O que é?
&lt;/h2&gt;

&lt;p&gt;De acordo com o &lt;a href="https://leiningen.org/"&gt;site oficial&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;for automating Clojure projects without setting your hair on fire.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Em uma tradução livre:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;para automatizar projetos clojure sem colocar fogo no seu cabelo&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para quem vem do javascript, eu costumo comparar ao &lt;a href="https://www.npmjs.com/"&gt;NPM&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A real é que o leinigen fornece diversas facilidades para criar e rodar projeto, rodar testes, instalar dependências, etc...&lt;/p&gt;
&lt;h2&gt;
  
  
  Instalando
&lt;/h2&gt;

&lt;p&gt;Como sempre, fui no &lt;a href="https://leiningen.org/"&gt;site oficial&lt;/a&gt; e segui o passo-a-passo.&lt;br&gt;
Assim como o Clojure, ele precisa que você tenha o JAVA instalado. Como já temos, comecei a instalação que é bastante simples.&lt;/p&gt;

&lt;p&gt;A primeira coisa é fazer o download do arquivo &lt;a href="https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein.bat"&gt;lein.bat&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depois precisamos adicionar o diretório desse arquivo no &lt;code&gt;PATH&lt;/code&gt; do &lt;em&gt;Windows&lt;/em&gt;. Para isso basta ir nas variáveis de ambientes do &lt;em&gt;Windows&lt;/em&gt;, localizar a &lt;code&gt;PATH&lt;/code&gt; e incluir o diretório.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Eu crio uma pasta &lt;code&gt;D:\Utils&lt;/code&gt; e já configuro no &lt;code&gt;PATH&lt;/code&gt;. Nela coloco todos os arquivos de script que quero deixar disponível no terminal ;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O último passo é rodar o script que irá fazer a instalação.&lt;/p&gt;

&lt;p&gt;⚠️⚠️⚠️ Quando rodei na minha máquinha deu erro, dizendo que não encontrou um arquivo &lt;code&gt;.jar&lt;/code&gt;, para tentar rodar &lt;code&gt;lein self-install&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\u&lt;/span&gt;ser&lt;span class="se"&gt;\.&lt;/span&gt;lein&lt;span class="se"&gt;\s&lt;/span&gt;elf-installs&lt;span class="se"&gt;\l&lt;/span&gt;einingen-2.10.0-standalone.jar can not be found.
You can try running &lt;span class="s2"&gt;"lein self-install"&lt;/span&gt;
or change LEIN_JAR environment variable
or edit lein.bat to &lt;span class="nb"&gt;set &lt;/span&gt;appropriate LEIN_JAR path.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acredito que a doc do site esteja desatualizada, pois rodei o comando sugerido e funcionou 😇&lt;/p&gt;

&lt;p&gt;&lt;code&gt;lein self-install&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Validando
&lt;/h2&gt;

&lt;p&gt;Para validar a instalação, você pode rodar o comando &lt;code&gt;lein&lt;/code&gt; no terminal. Ele trará uma lista de comandos que você pode executar.&lt;br&gt;
É bem interessante para ver a quantidade de coisas que o Leiningen faz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lein
Leiningen is a tool &lt;span class="k"&gt;for &lt;/span&gt;working with Clojure projects.

Several tasks are available:
change              Rewrite project.clj with f applied to the value at key-or-path.
check               Check syntax and warn on reflection.
classpath           Write the classpath of the current project to output-file.
clean               Removes all files from paths &lt;span class="k"&gt;in &lt;/span&gt;clean-targets &lt;span class="k"&gt;for &lt;/span&gt;a project
compile             Compile Clojure &lt;span class="nb"&gt;source &lt;/span&gt;into .class files.
deploy              Deploy jar and pom to remote repository.
deps                Download and examine dependencies.
&lt;span class="k"&gt;do                  &lt;/span&gt;Higher-order task to perform other tasks &lt;span class="k"&gt;in &lt;/span&gt;succession.
&lt;span class="nb"&gt;help                &lt;/span&gt;Display a list of tasks or &lt;span class="nb"&gt;help &lt;/span&gt;&lt;span class="k"&gt;for &lt;/span&gt;a given task or subtask.
&lt;span class="nb"&gt;install             &lt;/span&gt;Install jar and pom to the &lt;span class="nb"&gt;local &lt;/span&gt;repository&lt;span class="p"&gt;;&lt;/span&gt; typically ~/.m2.
jar                 Package up all the project&lt;span class="s1"&gt;'s files into a jar file.
javac               Compile Java source files.
new                 Generate scaffolding for a new project based on a template.
plugin              DEPRECATED. Please use the :user profile instead.
pom                 Write a pom.xml file to disk for Maven interoperability.
repl                Start a repl session either with the current project or standalone.
retest              Run only the test namespaces which failed last time around.
run                 Run the project'&lt;/span&gt;s &lt;span class="nt"&gt;-main&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
search              Search Central and Clojars &lt;span class="k"&gt;for &lt;/span&gt;published artifacts.
show-profiles       List all available profiles or display one &lt;span class="k"&gt;if &lt;/span&gt;given an argument.
&lt;span class="nb"&gt;test                &lt;/span&gt;Run the project&lt;span class="s1"&gt;'s tests.
trampoline          Run a task without nesting the project'&lt;/span&gt;s JVM inside Leiningen&lt;span class="s1"&gt;'s.
uberjar             Package up the project files and all dependencies into a jar file.
update-in           Perform arbitrary transformations on your project map.
upgrade             Upgrade Leiningen to specified version or latest stable.
vcs                 Interact with the version control system.
version             Print version for Leiningen and the current JVM.
with-profile        Apply the given task with the profile(s) specified.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Outra coisa é que você pode rodar o REPL através do comando &lt;code&gt;lein repl&lt;/code&gt;, o mesmo que rodamos quando instalamos o Clojure usando &lt;code&gt;clj&lt;/code&gt;.&lt;br&gt;
Com o &lt;code&gt;lein&lt;/code&gt; ele faz mais coisas, mas que mostrarei em outros textos.&lt;br&gt;
Uma coisa legal, é que agora para sair do REPL basta digitar &lt;code&gt;exit&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; lein repl
nREPL server started on port 52228 on host 127.0.0.1 - nrepl://127.0.0.1:52228
REPL-y 0.5.1, nREPL 1.0.0
Clojure 1.11.1
OpenJDK 64-Bit Server VM 17.0.5+8
    Docs: &lt;span class="o"&gt;(&lt;/span&gt;doc &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="nt"&gt;-name-here&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
          &lt;span class="o"&gt;(&lt;/span&gt;find-doc &lt;span class="s2"&gt;"part-of-name-here"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
  Source: &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;source &lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="nt"&gt;-name-here&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
 Javadoc: &lt;span class="o"&gt;(&lt;/span&gt;javadoc java-object-or-class-here&lt;span class="o"&gt;)&lt;/span&gt;
    Exit: Control+D or &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; or &lt;span class="o"&gt;(&lt;/span&gt;quit&lt;span class="o"&gt;)&lt;/span&gt;
 Results: Stored &lt;span class="k"&gt;in &lt;/span&gt;vars &lt;span class="k"&gt;*&lt;/span&gt;1, &lt;span class="k"&gt;*&lt;/span&gt;2, &lt;span class="k"&gt;*&lt;/span&gt;3, an exception &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;e

&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;exit
&lt;/span&gt;Bye &lt;span class="k"&gt;for &lt;/span&gt;now!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se quiser continuar vendo mais sobre Leiningen sugiro ver o &lt;a href="https://codeberg.org/leiningen/leiningen/src/branch/stable/doc/TUTORIAL.md"&gt;tutorial&lt;/a&gt; que eles tem&lt;/p&gt;




&lt;p&gt;Já conhecia o Leiningen? Conseguiu instalar? Compartilha aí nos comentários.&lt;/p&gt;

&lt;p&gt;Espero que tenha gostado da leitura! Até breve.&lt;/p&gt;

&lt;p&gt;Abraços&lt;/p&gt;

</description>
      <category>clojure</category>
      <category>beginners</category>
      <category>leiningen</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Clojure: Instalando no Windows</title>
      <dc:creator>Arthur Fücher</dc:creator>
      <pubDate>Tue, 24 Jan 2023 12:00:00 +0000</pubDate>
      <link>https://dev.to/afucher/clojure-instalando-no-windows-496e</link>
      <guid>https://dev.to/afucher/clojure-instalando-no-windows-496e</guid>
      <description>&lt;p&gt;Estou acostumado a usar Clojure no MacOS, nunca tinha tentado instalar no Windows. &lt;/p&gt;

&lt;h2&gt;
  
  
  Documentação
&lt;/h2&gt;

&lt;p&gt;Primeira coisa que fiz foi ler a &lt;a href="https://clojure.org/guides/install_clojure#_windows_instructions" rel="noopener noreferrer"&gt;documentação oficial&lt;/a&gt;, nela consta instruções para cada Sistema Operacional e também os pré-requisitos necessários. A documentação é simples e direta, o que facilita bastante todo o processo&lt;/p&gt;

&lt;h2&gt;
  
  
  Pré-requisito
&lt;/h2&gt;

&lt;p&gt;O único pré-requisito especificado nessa página é o JAVA&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sim, Clojure é uma linguagem que roda na JVM&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Na própria página com as instruções de cada SO, tem &lt;a href="https://clojure.org/guides/install_clojure#java" rel="noopener noreferrer"&gt;instruções para instalação do JAVA&lt;/a&gt;, inclusive com a recomendação de uma JDK específica. Fiz a instalação e validei através do terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;D:&lt;span class="se"&gt;\ &lt;/span&gt;java &lt;span class="nt"&gt;--version&lt;/span&gt;
openjdk 17.0.5 2022-10-18
OpenJDK Runtime Environment Temurin-17.0.5+8 &lt;span class="o"&gt;(&lt;/span&gt;build 17.0.5+8&lt;span class="o"&gt;)&lt;/span&gt;
OpenJDK 64-Bit Server VM Temurin-17.0.5+8 &lt;span class="o"&gt;(&lt;/span&gt;build 17.0.5+8, mixed mode, sharing&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Instalação
&lt;/h2&gt;

&lt;p&gt;A instalação do Clojure no Windows está em alpha e fica numa página separada: &lt;a href="https://github.com/clojure/tools.deps.alpha/wiki/clj-on-Windows" rel="noopener noreferrer"&gt;Clj on Windows&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nessa página constam mais 2 pré-requisitos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;a href="https://aka.ms/wmf5download" rel="noopener noreferrer"&gt;PowerShell 5&lt;/a&gt; (ou mais recente, incluindo &lt;a href="https://aka.ms/pscore6" rel="noopener noreferrer"&gt;PowerShell Core&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.microsoft.com/net/download" rel="noopener noreferrer"&gt;.NET Core SDK 2.1+ or .NET Framework 4.5+&lt;/a&gt; (ou mais recente)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No meu caso eu tinha ambos os pré-requisitos instalados, portanto segui para o próximo passo que era a instalação em si do Clojure.&lt;br&gt;
Para instalar eles disponbilizam um comando para rodar no PowerShell que irá fazer o download do script de instalação e executá-lo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;D:&lt;span class="se"&gt;\ &lt;/span&gt;Invoke-Expression &lt;span class="o"&gt;(&lt;/span&gt;New-Object System.Net.WebClient&lt;span class="o"&gt;)&lt;/span&gt;.DownloadString&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://download.clojure.org/install/win-install-1.11.1.1165.ps1'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
Downloading Clojure tools
AVISO: Clojure will &lt;span class="nb"&gt;install &lt;/span&gt;as a module &lt;span class="k"&gt;in &lt;/span&gt;your PowerShell module path.

Possible &lt;span class="nb"&gt;install &lt;/span&gt;locations:
  1&lt;span class="o"&gt;)&lt;/span&gt; C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\u&lt;/span&gt;ser&lt;span class="se"&gt;\D&lt;/span&gt;ocuments&lt;span class="se"&gt;\W&lt;/span&gt;indowsPowerShell&lt;span class="se"&gt;\M&lt;/span&gt;odules
  2&lt;span class="o"&gt;)&lt;/span&gt; C:&lt;span class="se"&gt;\P&lt;/span&gt;rogram Files&lt;span class="se"&gt;\W&lt;/span&gt;indowsPowerShell&lt;span class="se"&gt;\M&lt;/span&gt;odules
  3&lt;span class="o"&gt;)&lt;/span&gt; C:&lt;span class="se"&gt;\W&lt;/span&gt;indows&lt;span class="se"&gt;\s&lt;/span&gt;ystem32&lt;span class="se"&gt;\W&lt;/span&gt;indowsPowerShell&lt;span class="se"&gt;\v&lt;/span&gt;1.0&lt;span class="se"&gt;\M&lt;/span&gt;odules
Enter number of preferred &lt;span class="nb"&gt;install &lt;/span&gt;location: 1

Installing PowerShell module
Removing download
Clojure now installed. Use &lt;span class="s2"&gt;"clj -h"&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;help.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Veja que o script pergunta onde deseja instalar, na própria documentação eles explicam que a opção 1 é a única que não precisa ser &lt;code&gt;admin&lt;/code&gt;, acabei optando por ela.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validação
&lt;/h2&gt;

&lt;p&gt;Para validar a instalação abri uma nova instância do PowerShell rodei o comando &lt;code&gt;clj&lt;/code&gt;, na primeira vez ele faz o download de algumas dependências:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;D:&lt;span class="se"&gt;\ &lt;/span&gt;clj 
Downloading: org/clojure/clojure/1.11.1/clojure-1.11.1.pom from central
Downloading: org/clojure/core.specs.alpha/0.2.62/core.specs.alpha-0.2.62.pom from central
Downloading: org/clojure/spec.alpha/0.3.218/spec.alpha-0.3.218.pom from central
Downloading: org/clojure/pom.contrib/1.1.0/pom.contrib-1.1.0.pom from central
Downloading: org/clojure/spec.alpha/0.3.218/spec.alpha-0.3.218.jar from central
Downloading: org/clojure/core.specs.alpha/0.2.62/core.specs.alpha-0.2.62.jar from central
Downloading: org/clojure/clojure/1.11.1/clojure-1.11.1.jar from central
Clojure 1.11.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após baixar as dependências, ele mostra a versão do Clojure que está rodando e habilita o REPL.&lt;br&gt;
Fiz uma execução simples para ver se realmente estava tudo certo, somando 1 e 1:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user=&amp;gt; (+ 1 1)
2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aparentemente está tudo certo!&lt;/p&gt;

&lt;p&gt;Para finalizar o REPL pode utilizar &lt;code&gt;Ctrl+C&lt;/code&gt;&lt;/p&gt;




&lt;p&gt;Eai, conseguiu instalar no Windows? Me conta aí se teve alguma dificuldade ou se foi tranquilo.&lt;/p&gt;

</description>
      <category>career</category>
      <category>learning</category>
      <category>mentorship</category>
    </item>
    <item>
      <title>Dedicação total a você</title>
      <dc:creator>Arthur Fücher</dc:creator>
      <pubDate>Tue, 17 Jan 2023 12:30:00 +0000</pubDate>
      <link>https://dev.to/afucher/dedicacao-total-a-voce-1hld</link>
      <guid>https://dev.to/afucher/dedicacao-total-a-voce-1hld</guid>
      <description>&lt;p&gt;Hoje, 17 de janeiro é o último dia da minha licença paternidade. Foram 100 dias de muito aprendizado, choro, alegria e uma linda construção de laço entre pai e filha.&lt;/p&gt;




&lt;p&gt;No dia 2 de março de 2022 nasceu a Laura, minha primeira filha. Todo o processo até o momento do parto foi cheio de altos e baixos. A hora do parto foi uma das coisas mais emocionantes e maravilhosas que já vivi.&lt;/p&gt;

&lt;p&gt;Ter tido a oportunidade de ficar 100 dias de licença, totalmente dedicado a cuidar da minha filha, tornou tudo mais especial.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Você disse 100 dias?? &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sim, isso mesmo. Você leu certo! Recentemente o Nubank mudou a política de licença paternidade. Alteraram para licença parental, e como base, qualquer pessoa tem direito a 120 dias de licença 👶.&lt;/p&gt;

&lt;p&gt;Isso aconteceu depois da Laura já ter nascido e eu ter tirado 20 dias de licença que era o que existia antes, e o Nubank liberou retroativo esse benefício. Se quiser saber mais, fizeram um &lt;a href="https://blog.nubank.com.br/licenca-parental-nubank-por-que-e-importante/" rel="noopener noreferrer"&gt;post&lt;/a&gt; no blog sobre isso &amp;lt;3 &lt;br&gt;
Participei do grupo que estava organizando o pedido de licença parental para o Nubank, foi um período curto ainda durante o período da gravidez. Confesso que isso me deixou muito feliz, fazer parte de algo assim é de extrema satisfação.&lt;/p&gt;

&lt;h2&gt;
  
  
  Única certeza
&lt;/h2&gt;

&lt;p&gt;Desde que saiu a notícia eu tinha a certeza que isso era a coisa mais importante para mim, eu tinha isso na minha cabeça e nada tirava. O que foi muito importante, pois eu acabei mudando de papel dentro do Nubank 3 meses antes de sair.&lt;br&gt;
Acho que essa certeza, essa vontade de sair de licença, veio muito devido a um sentimento relacionado a paternidade que eu tive:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Eu não me sentia pai.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Durante a gravidez a mãe cria um vínculo com a criança, e eu não sentia nada. Achei que quando a Laura nascesse de alguma forma isso mudaria, mas não estava acontecendo. E foi nessa licença que eu vi a oportunidade de criar esse vínculo, queria passar tempo com a minha filha dedicado a ela. Óbvio que antes disso eu participava de todos os momentos possíveis, estava trabalhando de casa o que ajudava muito! Mas não é a mesma coisa, minha atenção durante a maior parte do dia estava no trabalho.&lt;/p&gt;

&lt;p&gt;E o resto dentro de mim era pura incerteza.&lt;/p&gt;

&lt;h2&gt;
  
  
  Incertezas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Vou saber o que fazer? Nós vamos nos adaptar?&lt;/li&gt;
&lt;li&gt;E o trabalho? A certeza de tirar a licença era inabalável, mas poxa.. será que fiz bem em trocar de equipe agora? To mega empolgado com o trampo novo, como vai ser quando eu voltar?&lt;/li&gt;
&lt;li&gt;Vou saber brincar? Incentivar? Ajudar no desenvolvimento?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Me perguntaram outro dia: o que cansa mais, trabalhar ou cuidar da Laura? - Respondi que no trabalho eu sei o que estou fazendo, tenho domínio .. cuidar da Laura foi cada dia um aprendizado. Cada dia uma adaptação nova. Cada dia um choro compensado por sorrisos diferentes.&lt;/p&gt;

&lt;p&gt;Eu amo Agilidade e nunca segui tanto o valor de &lt;strong&gt;Responder a mudanças mais que seguir um plano&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Memórias e Vínculos
&lt;/h2&gt;

&lt;p&gt;Essa licença me deu a oportunidade de começar a criar o vínculo com a minha filha.&lt;br&gt;
Poder lembrar que foi a minha perna que serviu de obstáculo para ela exercitar e &lt;strong&gt;começar a engatinhar&lt;/strong&gt;. Ali. Sentados. No chão da sala. Durante a tarde. De vários dias.&lt;br&gt;
&lt;strong&gt;Enrolar na cama pra levantar&lt;/strong&gt;. E quando for levantar brincar de cócegas até gargalhar.&lt;br&gt;
Ser o único homem com uma bebê na praça a tarde. Seja caminhando com o carrinho para fazer um exercício. Seja &lt;strong&gt;sentados na grama comendo uma banana&lt;/strong&gt;.&lt;br&gt;
Lembrar também de quando falhei. De quando &lt;strong&gt;deixei cair&lt;/strong&gt;. De quando esqueci de passar uma pomada. Porque é um aprendizado.&lt;br&gt;
E de longe o mais importante, que foi passar, realmente, pela experiência exaustiva que é cuidar de uma bebê praticamente o tempo todo (por que o leite a mamãe era responsável 💜 e várias outras coisas)&lt;/p&gt;




&lt;p&gt;Esse texto tem a intenção de mostrar para outras figuras paternas a importância da licença paternidade. O quão intenso é esse momento e a oportunidade única que é.&lt;br&gt;
E outra coisa, isso é uma questão muito importante quando empresas falam de diversidade, em inúmeros pontos. Se sua empresa fala de diversidade, e não discute sobre licença parental, acho que está na hora de começar.&lt;/p&gt;




&lt;p&gt;Obrigado as pessoas do Nubank que tornaram isso possível.&lt;br&gt;
Obrigado Mayara que cobrou e não deixou eu cair no comforto. Que brigava quando era necessário, e que deu a luz a coisa mais fofa da minha vida.&lt;br&gt;
Obrigado Laura, por ter me escolhido, pelos seus sorrisos e gargalhadas.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>api</category>
      <category>react</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
