<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Gabriel Lima - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Gabriel Lima - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Fri, 22 May 2026 09:47:04 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/author/gabriel/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Qual linguagem de programação eu deveria aprender primeiro em 2022? (Resolvido) ]]>
                </title>
                <description>
                    <![CDATA[ A jornada da maioria das pessoas ao aprender a programar começa com uma pesquisa de madrugada no Google. Geralmente é algo como "Aprender _____" Como será, no entanto, que eles decidem qual linguagem pesquisar? > "Eles sempre fazem piadas com o Java no Vale do Silício. Acho que é o ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/qual-linguagem-de-programacao-eu-deveria-aprender-primeiro-em-2022-resolvido/</link>
                <guid isPermaLink="false">62484e3a6daab205304af872</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gabriel Lima ]]>
                </dc:creator>
                <pubDate>Mon, 12 Sep 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/1_1XEF9NuNQy0rSu4kVdbb6A.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/what-programming-language-should-i-learn-first-19a33b0a467d/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What Programming Language Should I Learn First in 2024? [Solved]</a>
      </p><p>A jornada da maioria das pessoas ao aprender a programar começa com uma pesquisa de madrugada no Google.</p><p>Geralmente é algo como "Aprender _____"</p><p>Como será, no entanto, que eles decidem qual linguagem pesquisar?</p><blockquote>"Eles sempre fazem piadas com o Java no Vale do Silício. Acho que é o que eu vou aprender."</blockquote><p>Ou:</p><blockquote>"Haskell. Parece estar na moda agora. Haskell."</blockquote><p>Ou:</p><blockquote>"Aquele esquilinho do Go é tão fofinho."</blockquote><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*7kbd-tVk3co-9RiilFN1TA.png" class="kg-image" alt="1*7kbd-tVk3co-9RiilFN1TA" width="600" height="400" loading="lazy"></figure><p>‌Existe, também, o resto de nós que, provavelmente, procuraremos por algo do tipo:</p><blockquote>"Qual linguagem de programação eu deveria aprender primeiro?"</blockquote><p>Poucas perguntas são feitas tão frequentemente ao ponto de ganhar um infográfico completo sobre elas. Essa é uma delas:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_OF594B5qtCJR9MFSRTI-5g.png" class="kg-image" alt="1_OF594B5qtCJR9MFSRTI-5g" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_OF594B5qtCJR9MFSRTI-5g.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_OF594B5qtCJR9MFSRTI-5g.png 800w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption><a href="http://carlcheo.com/startcoding">Crédito da imagem</a></figcaption></figure><p>Decidir sua primeira linguagem de programação pode ser um processo divertido – tipo um daqueles quizzes de personalidade – "Qual personagem do Quentin Tarantino você é?".</p><p>Antes, no entanto, de você começar a aprender Ruby porque você adorava brincar com Play-Doh quando era criança, deixe-me lembrar: as apostas são bem altas aqui.</p><p>Vai demorar muitas horas de prática para você se tornar remotamente alguém competente com a sua primeira linguagem de programação.</p><p>Então você deve considerar os seguintes fatores:</p><ul><li>o mercado de trabalho para a linguagem</li><li>as perspectivas de longo prazo da linguagem</li><li>qual é a facilidade para aprender a linguagem</li><li>quais projetos você poderá construir enquanto estiver aprendendo (e compartilhar com os amigos para mantê-lo motivado)</li></ul><p>A cada ano, uma nova linguagem aparece. Com ela, novos artigos acadêmicos – e novas tirinhas também.</p><p>Sério, olha essa pérola do mês passado:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_she624Vf-hrpgLdWd8hKKw.jpeg" class="kg-image" alt="1_she624Vf-hrpgLdWd8hKKw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_she624Vf-hrpgLdWd8hKKw.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_she624Vf-hrpgLdWd8hKKw.jpeg 800w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"></figure><p>Quando se trata de escolher a primeira linguagem de programação, opção é o que não falta. Para restringir um pouco, aqui estão as pesquisas mais comuns do Google relacionadas à aprendizagem de programação nos últimos 12 anos:</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/1*znaagCC5fn0-Dqy43ILeqQ.png" class="kg-image" alt="1*znaagCC5fn0-Dqy43ILeqQ" width="600" height="400" loading="lazy"></figure><p>O Java teve seus altos e baixos.</p><p>O Python cresceu gradualmente e se tornou a escolha mais popular.</p><p>Escondido abaixo deles, porém, está a pequena locomotiva, lentamente ganhando popularidade nos últimos anos. Essa locomotiva é o JavaScript.</p><p>Antes de falar sobre essas linguagens de programação, deixe-me esclarecer:</p><ul><li>Não estou argumentando que uma linguagem qualquer é objetivamente melhor do que qualquer outra</li><li>Concordo com o fato de que os desenvolvedores devem eventualmente aprender mais de uma linguagem</li><li>Estou argumentando que, primeiro, eles devem aprender bem uma linguagem. Como você provavelmente já pode adivinhar se deu uma olhada geral no texto – essa linguagem deve ser o JavaScript.</li></ul><p>Vamos começar explorando como a programação vem sendo ensinada atualmente na escola.</p><h3 id="introdu-o-ci-ncia-da-computa-o"><strong>Introdução à Ciência da Computação</strong></h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_eu4cWRZXUt3ybNFzeT-q8Q.png" class="kg-image" alt="1_eu4cWRZXUt3ybNFzeT-q8Q" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_eu4cWRZXUt3ybNFzeT-q8Q.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_eu4cWRZXUt3ybNFzeT-q8Q.png 733w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"></figure><p>As universidades têm, tradicionalmente, ensinado programação dentro do guarda-chuva da ciência da computação, que é vista por si só como uma extensão da matemática, ou vinculada à formação de engenharia elétrica.</p><p>Provavelmente, você já deve ter ouvido o seguinte:</p><blockquote>"A educação em ciência da computação não pode fazer de ninguém um programador especialista, assim como estudar pincéis e pigmentos não pode fazer de alguém um especialista em pintura." — Eric S. Raymond</blockquote><p>Nesses últimos anos, várias faculdades continuam tratando programação como ciência da computação e ciência da computação como matemática.</p><p>Como resultado, muitos dos cursos introdutórios de programação focam em uma linguagem de baixo nível de abstração, como o C, ou linguagens com foco em matemática, como o MATLAB.</p><p>Os chefes de departamento geralmente se mantêm nesse ritmo, apontando para tabelas de classificação anuais de linguagens de programação, como o <a href="https://www.tiobe.com/tiobe-index/">Índice TIOBE</a> (em inglês), ou este índice do <a href="https://spectrum.ieee.org/the-2016-top-programming-languages">IEEE</a> (em inglês):</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_8yWwh_UrWeoxYSVsWTnEBA.png" class="kg-image" alt="1_8yWwh_UrWeoxYSVsWTnEBA" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_8yWwh_UrWeoxYSVsWTnEBA.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_8yWwh_UrWeoxYSVsWTnEBA.png 636w" width="600" height="400" loading="lazy"></figure><p>‌A maior parte desses rankings parece virtualmente idêntica ao que era há 10 anos.</p><p>Mudanças acontecem, contudo, mesmo nas universidades.</p><p>Em 2014, <a href="http://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-u-s-universities/fulltext">o Python ultrapassou o Java</a> (em inglês) como a linguagem mais popular nos principais programas de Ciência da Computação dos EUA.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_728HWv2YP3PjY1_QmGQg1g.png" class="kg-image" alt="1_728HWv2YP3PjY1_QmGQg1g" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_728HWv2YP3PjY1_QmGQg1g.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_728HWv2YP3PjY1_QmGQg1g.png 700w" width="600" height="400" loading="lazy"></figure><p>Mais uma mudança, porém, está fadada a acontecer, eventualmente. Se você olhar para as linguagens atualmente usadas no mercado de trabalho, você tem números totalmente diferentes:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_fUxhG3xtbuyAH-NCPYs4lQ.png" class="kg-image" alt="1_fUxhG3xtbuyAH-NCPYs4lQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_fUxhG3xtbuyAH-NCPYs4lQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_fUxhG3xtbuyAH-NCPYs4lQ.png 800w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>JavaScript é de longe a linguagem mais popular entre os 49.397 desenvolvedores que responderam à pesquisa do Stack Overflow em 2016.</figcaption></figure><p>Mais da metade de todos os desenvolvedores usa JavaScript. É vital para o desenvolvimento no front-end da web e está ficando cada vez mais relevante para o desenvolvimento no back-end. Elaestá rapidamente se expandindo para áreas como o desenvolvimento de jogos e a Internet das Coisas.</p><p>As postagens de trabalhos mencionam o JavaScript mais que qualquer outra linguagem, excetuando o Java:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_Nju6ZEORusBE-4UB290Ftw.png" class="kg-image" alt="1_Nju6ZEORusBE-4UB290Ftw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_Nju6ZEORusBE-4UB290Ftw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_Nju6ZEORusBE-4UB290Ftw.png 800w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>Dados do maior site de anúncios de emprego do mundo, <a href="https://www.indeed.com/jobtrends/q-java-q-python-q-javascript-q-ruby-q-php-q-android-q-ios.html">indeed.com</a></figcaption></figure><p>Não foi por acidente que construímos o currículo da nossa <a href="https://www.freecodecamp.com">comunidade open source</a> com base no JavaScript. Nos últimos dois anos, mais de 5 mil pessoas usaram o FreeCodeCamp para conseguir seu primeiro emprego como desenvolvedor.</p><p>Eu não estou defendendo o JavaScript porque eu o ensino. Eu ensino JavaScript porque é o caminho mais garantido para o primeiro emprego de desenvolvedor.</p><p>No entanto, será que o JavaScript é o ideal pra você? Vale a pena fazer do JavaScript sua primeira linguagem de programação? Vamos explorar aqueles fatores que eu mencionei anteriormente.</p><h3 id="fator-n-1-mercado-de-trabalho"><strong>Fator nº 1: Mercado de trabalho</strong></h3><p>Se você está aprendendo programação puramente por curiosidade intelectual, sinta-se livre para pular esse fator. Se você, no entanto — <a href="https://medium.freecodecamp.com/we-asked-15-000-people-who-they-are-and-how-theyre-learning-to-code-4104e29b2781#.30hlfqj32">como a maioria das pessoas que está aprendendo programação</a> – quer usar essa habilidade para conseguir um emprego, essa é uma consideração importante.</p><p>Como mencionei anteriormente, o Java é mais mencionado nos anúncios de emprego do que qualquer outra linguagem de programação. O JavaScript é a segunda – por pouco.</p><p>Aqui está algo importante sobre o JavaScript: mesmo existindo há 20 anos, apenas recentemente ele se tornou uma ferramenta séria, com a qual empresas como Netflix, Walmart e PayPal já criaram aplicações inteiras.</p><p>Como resultado, várias empresas estão contratando desenvolvedores JavaScript, mas não há muitos no mercado de trabalho.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_EanhlHoMIsF-By0gRrAcYQ.png" class="kg-image" alt="1_EanhlHoMIsF-By0gRrAcYQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_EanhlHoMIsF-By0gRrAcYQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_EanhlHoMIsF-By0gRrAcYQ.png 800w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>Dados do <a href="https://www.indeed.com/jobtrends/q-java-q-python-q-javascript-q-ruby-q-php-q-android-q-ios.html">Indeed.com</a></figcaption></figure><p>Existem 2,7 desenvolvedores Java competindo para cada vaga com Java.‌‌ A competição por vagas em PHP e iOS é igualmente disputada.</p><p>Porém, para cada vaga com JavaScript, são apenas 0,6 desenvolvedores JavaScript. É um mercado sedento por desenvolvedores com habilidade em JavaScript.</p><h3 id="fator-n-2-buscas-de-longo-prazo"><strong>Fator nº 2: Buscas de longo prazo</strong></h3><p>Em média, um projeto em JavaScript recebe duas vezes mais pull requests do que um projeto em Java, Python ou Ruby. Em cima disso, o JavaScript está crescendo mais rápido do que qualquer outra linguagem popular.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_-GxMW33X9Gb5lboyN02hKw.png" class="kg-image" alt="1_-GxMW33X9Gb5lboyN02hKw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_-GxMW33X9Gb5lboyN02hKw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_-GxMW33X9Gb5lboyN02hKw.png 800w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>Fonte: <a href="https://octoverse.github.com/">State of the Octoverse 2016</a>, do GitHub</figcaption></figure><p>O ecossistema do JavaScript também se beneficia de um investimento pesado de dinheiro e engenharia de empresas como Google, Microsoft, Facebook e Netflix.</p><p>Por exemplo, o TypeScript (um superset estaticamente tipado do JavaScript) tem mais de 100 contribuintes open source, muitos deles são funcionários da Microsoft e do Google que são pagos para trabalhar nele.</p><p>Esse tipo de cooperação entre empresas é difícil de encontrar com o Java. A Oracle – que efetivamente é a dona do Java pela aquisição da Sun Microsystems – <a href="https://medium.freecodecamp.com/why-todays-victory-over-oracle-matters-so-much-to-developers-4e24b4a368b5#.pk8efc9um">frequentemente processa</a> empresas que tentam expandi-lo (texto em inglês).</p><h3 id="fator-n-3-dificuldade-de-aprender"><strong>Fator nº 3: Dificuldade de aprender</strong></h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_d8TITW3skawGd-ioyHh2nQ.png" class="kg-image" alt="1_d8TITW3skawGd-ioyHh2nQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_d8TITW3skawGd-ioyHh2nQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_d8TITW3skawGd-ioyHh2nQ.png 744w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>Essa é uma paródia de um <a href="https://xkcd.com/435/" rel="noopener">quadrinho do XKCD</a>.</figcaption></figure><p>A maioria dos programadores concorda que linguagens de script de alto nível são fáceis de aprender. O JavaScript entra nessa categoria, junto com o Python e o Ruby.</p><p>Mesmo que as universidades continuem ensinando linguagens como Java e C++ como primeiras linguagens, elas são consideravelmente mais difíceis de aprender.</p><h3 id="fator-n-4-projetos-que-voc-pode-construir"><strong>Fator nº 4: Projetos que você pode construir</strong></h3><p>É aqui que o JavaScript realmente brilha. Ele roda em qualquer dispositivo que tiver um navegador, diretamente no navegador. Você pode construir basicamente qualquer coisa com JavaScript e compartilhar por aí.</p><p>Por causa da onipresença do JavaScript, Jeff Atwood, co-fundador do Stack Overflow, cunhou sua – agora – famosa lei:</p><blockquote>"<em>Qualquer aplicação que puder ser escrita em JavaScript, acabará sendo escrita em JavaScript</em>."</blockquote><p>E a <a href="https://www.reddit.com/r/atwoodslaw/">cada mês que passa</a> (em inglês), a lei de Atwood continua forte.</p><p>O Java também prometeu em algum momento rodar em qualquer lugar. Você pode até se lembrar dos <a href="http://motherboard.vice.com/read/a-brief-history-of-the-java-applet">Java Applets</a> (em inglês) que a Oracle oficialmente descontinuou no começo desse ano.</p><p>O Python sofre muito com os mesmos problemas:</p><blockquote>"Como eu posso dar esse jogo que eu fiz para um amigo? Melhor ainda, existe uma maneira de colocá-lo no meu celular e então mostrar para as outras crianças na escola sem eles terem que instalar? Hm." — James Hague, em <a href="http://prog21.dadgum.com/203.html" rel="noopener">Retiring Python as a Teaching Language</a> (em inglês)</blockquote><p>Para contrastar, aqui estão alguns apps que os membros da nossa comunidade <em>open source</em> construiu nos seus navegadores usando o CodePen. Você pode clicar e começar a usar agora mesmo no seu navegador:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_i-bre5pF0rk6Wgz5yjugjw.png" class="kg-image" alt="1_i-bre5pF0rk6Wgz5yjugjw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_i-bre5pF0rk6Wgz5yjugjw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_i-bre5pF0rk6Wgz5yjugjw.png 742w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption><a href="http://s.codepen.io/adambeagle/debug/qOamaz" rel="noopener">Jogo do Simon (Genius, no Brasil) no estilo de 1970</a></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_GtVQI4LUU0-_Soyhi93LBg.png" class="kg-image" alt="1_GtVQI4LUU0-_Soyhi93LBg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_GtVQI4LUU0-_Soyhi93LBg.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_GtVQI4LUU0-_Soyhi93LBg.png 800w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption><a href="http://s.codepen.io/safx/debug/Ewcym" rel="noopener">O Jogo da Vida, da Conway</a></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_jkx-Vf8esZ0GYv_L6S2i9A.png" class="kg-image" alt="1_jkx-Vf8esZ0GYv_L6S2i9A" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_jkx-Vf8esZ0GYv_L6S2i9A.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_jkx-Vf8esZ0GYv_L6S2i9A.png 800w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption><a href="http://s.codepen.io/duttakapil/debug/BKGjOa" rel="noopener">Wikipédia com tema de Star Wars</a></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_PiI9yXaUNJANSffWvdotDQ.png" class="kg-image" alt="1_PiI9yXaUNJANSffWvdotDQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_PiI9yXaUNJANSffWvdotDQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_PiI9yXaUNJANSffWvdotDQ.png 800w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption><a href="http://s.codepen.io/Megabyteceer/debug/qbXJMQ" rel="noopener">Um jogo no estilo <em>roguelike dungeon crawler</em></a></figcaption></figure><h3 id="aprenda-bem-uma-linguagem-depois-aprenda-uma-segunda-"><strong>Aprenda bem uma linguagem. Depois aprenda uma segunda.</strong></h3><p>Se você continua pulando de linguagem para linguagem, <a href="https://medium.freecodecamp.com/a-cautionary-tale-of-learning-to-code-my-own-eddb24d9d5a7">você não vai chegar longe</a> (texto em inglês).</p><p>Para sair do básico, você precisa aprender bem a sua primeira linguagem.‌‌ Depois, sua segunda linguagem será muito, muito fácil.</p><p>A partir daí, você pode aprender outra e outra linguagem, e se tornar uma pessoa desenvolvedora mais completa por aprender várias linguagens:</p><ul><li>C é uma ótima maneira de aprender como computadores realmente funcionam em termos de gerenciamento de memória, e é superútil em computação de alto desempenho.</li><li>C++ é ótimo para desenvolvimento de jogos.</li><li>Python é maravilhoso para ciência e estatísticas.</li><li>Java é importante se você quiser trabalhar em empresas de tecnologia de grande escala.</li></ul><p><strong>Ainda assim, aprenda JavaScript primeiro.</strong></p><p>OK, agora vou tentar algo impossível – vou tentar antecipar as objeções dos comentários dos leitores.</p><h3 id="obje-o-n-1-mas-o-javascript-n-o-lento"><strong>Objeção nº 1: Mas o JavaScript não é lento?</strong></h3><p>O JavaScript é — para a maioria dos propósitos — tão rápido quando as linguagens de alto desempenho.</p><p>O JavaScript (na forma do Node.js) é, em ordens de magnitude, mais rápido que o Python, Ruby e PHP.</p><p>Ele é também quase tão rápida quanto as linguagens de alto desempenho, como o C++, o Java e o Go.</p><p>Abaixo estão os resultados de benchmark (comparação) das linguagens:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_h91cfcE8NlgyHfm4CLbV6w.png" class="kg-image" alt="1_h91cfcE8NlgyHfm4CLbV6w" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_h91cfcE8NlgyHfm4CLbV6w.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_h91cfcE8NlgyHfm4CLbV6w.png 800w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>Quanto menor, melhor.</figcaption></figure><h3 id="obje-o-n-2-mas-javascript-n-o-estaticamente-tipado">Objeção nº 2: Mas JavaScript não é estaticamente tipado</h3><p>Como o Python e o Ruby, o JavaScript é dinamicamente tipado, o que é conveniente. Ele, porém pode colocar você em maus lençóis. Aqui, eu pretendo, por exemplo, que o <code>exampleArray</code> seja um array. Eu configurei seus valores e verifiquei seu tamanho – que é o número de elementos que o array contém dentro dele.</p><pre><code>exampleArray = [1, 2]
-&gt; [1, 2]

exampleArray.length
-&gt; 2</code></pre><p>Acidentalmente, porém, eu reatribuí o valor dele para uma string.</p><pre><code>exampleArray = "text"
-&gt; "text"

exampleArray.length
-&gt; 4</code></pre><p>Esses tipos de erros acontecem o tempo todo em linguagens dinamicamente tipadas. A maioria dos desenvolvedores apenas colocam verificações para evitá-los e escreve os testes de acordo.</p><p>Se você realmente precisa de tipagem estática na sua primeira linguagem de programação, então, eu continuo recomendando que você aprenda JavaScript primeiro. Depois, você poderá aprender rapidamente o TypeScript.</p><blockquote>"O Typescript tem uma curva de aprendizado, mas se você já sabe JavaScript, será uma curva tranquila." — <a href="https://medium.freecodecamp.com/when-should-i-use-typescript-311cb5fe801b#.j920zs7g2" rel="noopener">Alex Ewerlöf, sobre o TypeScript</a> (em inglês)</blockquote><h3 id="obje-o-n-3-mas-eu-quero-construir-uma-aplica-o-para-dispositivos-m-veis"><strong>Objeção nº 3: Mas eu quero construir uma aplicação para dispositivos móveis</strong></h3><p>Eu continuo recomendando o JavaScript primeiro.</p><ol><li>O JavaScript tem várias ferramentas para fazer aplicações para dispositivos móveis, como o <a href="https://cordova.apache.org/">Angular Cordova</a> e o <a href="https://facebook.github.io/react-native/">ReactNative</a>.</li><li>Para a sua aplicação para dispositivos móveis realmente fazer algo interessante, ela provavelmente precisará de um back-end decente, que você desejará construir com um framework de desenvolvimento web, como o Node.js + Express.js.</li></ol><p>Além disso, vale ressaltar que os melhores dias do desenvolvimento de aplicações para dispositivos móveis podem muito bem estar por vir.</p><p>Para começo de conversa, por mais que as pessoas usem aplicações para dispositivos móveis, quase metade de todos os trabalhos de desenvolvedor são para o desenvolvimento web. Compare isso com meros 8% dos trabalhos que envolvem o desenvolvimento de aplicações para dispositivos móveis.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_6RsFHNgrzFyX-9p37FVtpA.jpeg" class="kg-image" alt="1_6RsFHNgrzFyX-9p37FVtpA" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/08/1_6RsFHNgrzFyX-9p37FVtpA.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/08/1_6RsFHNgrzFyX-9p37FVtpA.jpeg 800w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>As profissões de 49.525 desenvolvedores, com base nas respostas à pesquisa do Stack Overflow de 2016.</figcaption></figure><p>A grande visão de "há um aplicativo para isso" não se concretizou. Em vez disso, a maioria dos proprietários de <a href="http://www.recode.net/2016/9/16/12933780/average-app-downloads-per-month-comscore">smartphones parou de baixar novos aplicativos</a> (texto em inglês).</p><p>Claro – eles continuam usando aplicativos. Na maioria, o Facebook, Google Maps e vários outros. Então, a maioria da demanda por desenvolvedores de aplicações para dispositivos móveis está concentrada em alguns grandes empregadores.</p><p>As perspectivas para esses empregos de desenvolvimento para dispositivos móveis são difíceis de prever. Muitos aspectos do desenvolvimento, manutenção e de distribuição de aplicações para dispositivos móveis são fáceis com JavaScript. Então, empresas como o Facebook e o Google estão investindo pesado em ferramentas melhores para construir essas aplicações usando o JavaScript.</p><p>A partir de 2016, grande parte do desenvolvimento passou a ser de desenvolvimento web. Tudo que toca aquela grande plataforma é "a web". A próxima onda de dispositivos com os quais você conversará em sua casa, e os carros que pegam os seus filhos na escola – todos eles serão conectados usando a web também.</p><p>Isso significa usar o JavaScript.</p><h3 id="obje-o-n-4-o-javascript-n-o-uma-linguagem-de-brincadeirinha-que-foi-escrita-em-10-dias"><strong>Objeção nº 4: o JavaScript não é uma linguagem de brincadeirinha que foi escrita em 10 dias?</strong></h3><p>O JavaScript tem uma <a href="https://www.w3.org/community/webed/wiki/A_Short_History_of_JavaScript" rel="noopener">história peculiar</a> (em inglês).</p><p>Você, sem dúvida, ouvirá as pessoas fazerem piadas às suas custas.</p><p>Bem, as pessoas também adoram odiar o C++. Assim como o JavaScript, o C++ teve sucesso apesar desse ódio – e agora está em praticamente todos os lugares também.</p><p>Então, se alguém encrencar com você ao aprender JavaScript em vez da linguagem de elite dessa semana, lembre-se das famosas palavras do criador do C++:</p><blockquote>"Existem apenas dois tipos de linguagens de programação: aquelas das quais as pessoas sempre reclamam e aquelas que ninguém usa." — Bjarne Stroustrup</blockquote><p><strong>Eu escrevo apenas sobre <strong>program</strong>ação e tecnologia<strong>. </strong>Se você me seguir no <strong><a href="https://twitter.com/ossia" rel="noopener">Twitter</a></strong>,<strong> </strong>garanto que não estará perdendo seu tempo<strong>.</strong></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como criar um NFT e renderizá-lo no Marketplace da OpenSea ]]>
                </title>
                <description>
                    <![CDATA[ Neste artigo, eu vou mostrar para você como fazer um NFT sem nenhuma habilidade em engenharia de software. Depois, vamos aprender como fazer NFTs customizáveis ilimitados com o Brownie [https://eth-brownie.readthedocs.io/en/stable/], Python [https://www.python.org/] e o Chainlink [https://docs.chain.link/docs] (todos os links em inglês). Então, veremos como renderizar e vender nossa criação no ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-criar-um-nft-e-renderiza-lo-no-marketplace-da-opensea/</link>
                <guid isPermaLink="false">61fbd7f753557304fa19e91b</guid>
                
                    <category>
                        <![CDATA[ Blockchain ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gabriel Lima ]]>
                </dc:creator>
                <pubDate>Sat, 09 Apr 2022 15:06:09 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/04/Advanced-NFT-Deployment---1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-make-an-nft-and-render-on-opensea-marketplace/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Make an NFT and Render it on the OpenSea Marketplace</a>
      </p><p>Neste artigo, eu vou mostrar para você como fazer um NFT sem nenhuma habilidade em engenharia de software. Depois, vamos aprender como fazer NFTs customizáveis ilimitados com o <a href="https://eth-brownie.readthedocs.io/en/stable/">Brownie</a>, <a href="https://www.python.org/">Python</a> e o <a href="https://docs.chain.link/docs">Chainlink</a> (todos os links em inglês). Então, veremos como renderizar e vender nossa criação no Marketplace de NFTs da <a href="https://opensea.io/">OpenSea</a>.</p><p>Se estiver procurando por um tutorial que use o Truffle, JavaScript e alguns personagens medievais legais, dê uma olhada em como <a href="https://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/">Construir, Implantar e Vender seu NFT aqui</a> (em inglês).</p><h2 id="o-que-um-nft"><strong>O que é um NFT?</strong></h2><p><a href="https://eips.ethereum.org/EIPS/eip-721" rel="noopener">NFTs</a> (do inglês <em>non-fungible tokens</em>, ou &nbsp;"tokens não fungíveis") podem ser resumidos em uma palavra: "únicos". &nbsp;Eles são contratos inteligentes implantados em uma <em>blockchain</em> que representam algo único.</p><h3 id="erc20-x-erc721"><strong>ERC20 x ERC721</strong></h3><p>NFTs são tokens padrão de <em>blockchain,</em> similares ao <a href="https://www.investopedia.com/news/what-erc20-and-what-does-it-mean-ethereum/">ERC20</a> (em inglês), como AAVE, SNC e LINK (tecnicamente, um ERC677). ERC20s são tokens "fungíveis" o que significa que são "substituíveis" ou "intercambiáveis".</p><p>Por exemplo, a nota de dez reais vai valer R$ 10,00, não importando qual nota você use, desde que ela seja <em>uma nota</em> de dez reais. O código na nota pode até ser diferente, mas as notas são intercambiáveis e elas vão valer dez reais independentemente de outras coisas.</p><p>NFTs, por outro lado, são "não fungíveis". Eles seguem seu próprio padrão de token, o <a href="https://eips.ethereum.org/EIPS/eip-721">ERC721</a>. Por exemplo, a Mona Lisa é "não fungível". Mesmo que alguém faça uma cópia dela, sempre vai haver apenas uma Mona Lisa. Se a Mona Lisa tivesse sido criada em uma <em>blockchain</em>, ela seria um NFT.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/04/image-145-1.png" class="kg-image" alt="image-145-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/04/image-145-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/04/image-145-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/04/image-145-1.png 1200w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>Imagem original retirada da <a href="https://pt.wikipedia.org/wiki/Mona_Lisa">Wikipédia</a></figcaption></figure><h2 id="para-que-serve-um-nft"><strong>Para que serve um NFT?</strong></h2><p>NFTs agregam valor para os criadores, artistas, designers de jogos e outros por terem um histórico permanente de implantação armazenado <em>on-chain.</em></p><p>Você sempre saberá quem criou o NFT, quem o comprou, de onde ele veio e mais, o que dá a eles muito valor, mais do que arte tradicional. Na arte tradicional, pode ser bem difícil discernir o que é falso, enquanto um histórico <em>on-chain</em> é facilmente rastreável.</p><p>Como os contratos inteligentes e os NFTs são 100% programáveis, NFTs podem também ter <em>royalties</em> e qualquer outra funcionalidade embutida. Recompensar os artistas sempre foi um problema, dado que um trabalho artístico geralmente é apresentado sem nenhuma atribuição, como ouvir uma música no parque.</p><p>Mais e mais artistas e engenheiros estão aproveitando desse valor agregado, porque finalmente é uma boa maneira de recompensar os artistas por seu trabalho. Mais que isso, os NFTs são maneiras divertidas de botar para quebrar com sua criatividade e se tornar um colecionador em um mundo digital.</p><h3 id="o-valor-dos-nfts"><strong>O valor dos NFTs</strong></h3><p><br>Os NFTs percorreram um longo caminho e continuamos vendo recordes de vendas de NFTs, como "Everydays: The First 5.000 Days" sendo vendido por US$ 69,3 milhões.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/04/Screen-Shot-2021-03-31-at-9.48.19-AM.png" class="kg-image" alt="Screen-Shot-2021-03-31-at-9.48.19-AM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/04/Screen-Shot-2021-03-31-at-9.48.19-AM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/04/Screen-Shot-2021-03-31-at-9.48.19-AM.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/04/Screen-Shot-2021-03-31-at-9.48.19-AM.png 1190w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>Imagem retirada do <a href="https://twitter.com/ChristiesInc/status/1361670588608176128">Twitter</a></figcaption></figure><p>Então, existe um grande valor aqui, além de ser divertido, dinâmico e uma forma engajadora de criar arte em um mundo digital e aprender sobre criação de um contrato inteligente. Agora, eu vou ensinar a você tudo o que precisa saber sobre criar NFTs.</p><h2 id="como-criar-um-nft"><strong>Como criar um NFT</strong></h2><h3 id="o-que-n-o-vamos-ensinar"><strong>O que não vamos ensinar</strong></h3><p>A maneira mais fácil de fazer um NFT é ir a uma plataforma, como a <a href="https://opensea.io">Opensea</a>, a <a href="https://rarible.com">Rarible</a> ou a <a href="https://mintable.app/">Mintible</a>, e seguir o seu passo a passo para a implantação na plataforma escolhida.</p><p>Você pode seguir por esse caminho. No entanto, você pode acabar ligado à plataforma de alguma forma e ficará preso na funcionalidade que a plataforma tiver. Desse modo, você não poderá alcançar a personalização ilimitada nem utilizar realmente qualquer uma das vantagens que os NFTs têm. Mas se você for um engenheiro de software principiante, ou se não for muito técnico, esse caminho servirá para você.</p><p>Se você procura se tornar um engenheiro de software melhor, aprender um pouco sobre Solidity e ter o poder de criar algo com criatividade ilimitada, siga com a leitura!</p><p>Se você é novo com Solidity, não se preocupe. Também passaremos pelo básico.</p><h2 id="como-criar-um-nft-com-customiza-o-ilimitada"><strong>Como criar um NFT com customização Ilimitada</strong></h2><p>Vamos começar com o <a href="https://github.com/PatrickAlphaC/nft-mix">NFT Brownie Mix</a>. Esse é um repositório em desenvolvimento com muito código <em>boilerplate.</em></p><h3 id="pr-requisitos"><strong>Pré-requisitos</strong></h3><p>Precisaremos de alguns programas instalados antes de começar</p><ul><li><a href="https://www.python.org/downloads/">Python</a></li><li><a href="https://nodejs.org/pt-br/download/">Nodejs</a> e npm</li><li><a href="https://metamask.io/">Metamask</a></li></ul><p>Se você não está familiarizado com o Metamask, você pode seguir <a href="https://docs.chain.link/docs/deploy-your-first-contract/#install-and-fund-your-metamask-wallet">esse tutorial</a> (em inglês) para configurá-lo.</p><h3 id="rinkeby-testnet-eth-e-link"><strong>Rinkeby Testnet ETH e LINK</strong></h3><p>Estaremos trabalhando também com o Rinkeby Ethereum Testnet para realizar a implantação dos nossos contratos em uma blockchain real, de graça!</p><p><em>Testnets</em> são formas excelentes de testar como os contratos se comportam no mundo real.</p><p>Precisaremos do <em>Rinkeby ETH</em> e do <em>Rinkeby LINK</em>, que conseguimos gratuitamente nos links da <a href="https://docs.chain.link/docs/link-token-contracts/#rinkeby">documentação do Chainlink</a> (em inglês)</p><p>Também precisaremos adicionar o token do <em>Rinkeby LINK</em> na nossa <em>metamask, o </em>que podemos fazer seguindo a <a href="https://docs.chain.link/docs/acquire-link/">documentação de como conseguir o LINK</a> (em inglês).</p><p>Se você continuar confuso, <a href="https://www.youtube.com/watch?v=4ZgFijd02Jo">você pode usar este vídeo como guia</a> (em inglês), apenas certifique-se de usar o <em>Rinkerby</em> ao invés do Ropsten.</p><p>Quando trabalhamos com uma plataforma de contratos inteligentes, como a Ethereum, precisamos pagar um pouco de ETH. Quando retiramos dados <em>off-chain</em> precisamos pagar com um pouco de LINK. Por este motivo, nós precisamos dos testnets Link e ETH.</p><p>Maravilha, agora vamos mergulhar. <a href="https://testnets.opensea.io/assets/0x8acb7ca932892eb83e4411b59309d44dddbc4cdf/0">Este é o NFT que vamos implantar na OpenSea.</a></p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/04/Screen-Shot-2021-03-31-at-10.58.35-AM.png" class="kg-image" alt="Screen-Shot-2021-03-31-at-10.58.35-AM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/04/Screen-Shot-2021-03-31-at-10.58.35-AM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/04/Screen-Shot-2021-03-31-at-10.58.35-AM.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/04/Screen-Shot-2021-03-31-at-10.58.35-AM.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/04/Screen-Shot-2021-03-31-at-10.58.35-AM.png 2000w" sizes="(min-width: 1200px) 1200px" width="600" height="400" loading="lazy"></figure><h3 id="come-ando"><strong>Começando</strong></h3><pre><code class="language-bash">git clone https://github.com/PatrickAlphaC/nft-mix
cd nft-mix</code></pre><p>Ótimo! Agora, precisamos instalar o <code>ganache-cli</code> e o <code>eth-brownie</code>.</p><pre><code>pip install eth-brownie
npm install -g ganache-cli</code></pre><p>Então, podemos <a href="https://www.twilio.com/blog/2017/01/how-to-set-environment-variables.html">configurar nossas variáveis de ambiente</a> (em inglês). Se você não é familiarizado com variáveis de ambiente, pode apenas adicioná-las no seu arquivo <code>.env</code> e executar:</p><p><code>source .env</code></p><p>Deve existir um arquivo <code>.env</code> no repositório que você acabou de clonar com as variáveis de ambiente comentadas. Retire-as dos comentários para usá-las!</p><p>Você vai precisar de um <code>WEB3_INFURA_PROJECT_ID</code> e de uma <code>PRIVATE_KEY</code>. O <code>WEB3_INFURA_PROJECT_ID</code> pode ser encontrado ao se cadastrar com uma conta gratuita no <a href="https://infura.io">Infura</a>. Assim, teremos uma maneira de enviar as transações para a <em>blockchain</em>.</p><p>Também vamos precisar de uma <em>private key</em>, que você consegue pegar em sua Metamask. Clique nos 3 pontinhos, vá em <code>Account Details</code> e depois em <code>Export Private Key</code>. NÃO compartilhe essa chave com ninguém se você colocar dinheiro de verdade nela!</p><figure class="kg-card kg-code-card"><pre><code>export PRIVATE_KEY=YOUR_KEY_HERE
export WEB3_INFURA_PROJECT_ID=YOUR_PROJECT_ID_HERE</code></pre><figcaption>.env</figcaption></figure><p>Agora, podemos implantar nosso contrato NFT e criar nosso primeiro colecionável com os dois comandos a seguir.</p><pre><code>brownie run scripts/simple_collectible/deploy_simple.py --network rinkeby
brownie run scripts/simple_collectible/create_collectible.py --network rinkeby</code></pre><p>O primeiro script implanta nosso contrato NFT na <em>blockchain</em> da <em>Rinkerby, </em>e o segundo cria nosso colecionável.</p><p>Você acabou de implantar seu primeiro contrato inteligente!</p><p>Por enquanto, ele não faz muita coisa, mas não se preocupe – vou mostrar para você como renderizá-lo na OpenSea na parte avançada desse tutorial. Mas, antes, vamos olhar para o padrão de token ERC721.</p><h2 id="o-padr-o-de-token-erc721"><strong>O padrão de token ERC721</strong></h2><p>Vamos dar uma olhada no contrato que acabamos de implantar no arquivo <code>SimpleCollectible.sol</code>.</p><pre><code class="language-javascript">// SPDX-License-Identifier: MIT
pragma solidity 0.6.6;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract SimpleCollectible is ERC721 {
    uint256 public tokenCounter;
    constructor () public ERC721 ("Dogie", "DOG"){
        tokenCounter = 0;
    }

    function createCollectible(string memory tokenURI) public returns (uint256) {
        uint256 newItemId = tokenCounter;
        _safeMint(msg.sender, newItemId);
        _setTokenURI(newItemId, tokenURI);
        tokenCounter = tokenCounter + 1;
        return newItemId;
    }

}
</code></pre><p>Estamos usando o pacote <a href="https://github.com/OpenZeppelin/openzeppelin-contracts">OpenZeppelin</a> (em inglês) para o token ERC721. Esse pacote que importamos nos permite usar todas as funções típicas de um token ERC721. Isso define todas as funcionalidades que nossos tokens vão ter, como <code>transfer</code>, que move tokens para novos usuários, <code>safeMint</code> que cria novos tokens e mais.</p><p>Você pode encontrar todas as funções que são fornecidas ao nosso contrato lendo o <a href="https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol">Contrato de Token ERC721 OpenZeppelin.</a> Nosso contrato herda essas funções nessa linha:</p><pre><code>contract SimpleCollectible is ERC721 {</code></pre><p>É assim que a <em>Solidity</em> trabalha com herança. Quando nós implantamos um contrato, o <code>constructor</code> é automaticamente chamado e recebe alguns parâmetros.</p><pre><code>constructor () public ERC721 ("Dogie", "DOG"){
        tokenCounter = 0;
    }</code></pre><p>Também usamos o construtor do <code>ERC721</code> no nosso construtor. Temos que dar a ele um nome e um símbolo. No nosso caso, é "Dogie"e "DOG". Isso significa que todos os NFTS criados serão do tipo Dogie/DOG.</p><p>É como todos os Pokémons nas cartas de pokémons. Eles no final são pokémons, ou todo jogador de baseball nas cartas colecionáveis (trading cards) continuam jogadores de baseball. Cada jogador é único, mas eles continuam sendo jogadores de baseball. Nós estamos apenas usando o tipo <code>DOG</code>.</p><p>Nós temos um <code>tokenCounter</code> no topo que conta quantos NFTs já criamos daquele tipo. Cada novo token ganha um <code>tokenId</code> baseado no <code>tokenCounter</code> atual.</p><p>Atualmente, nós podemos criar um NFT com a função <code>createCollectible</code>. É ela que chamamos no nosso script <code>create_collectible.py</code>.</p><pre><code>function createCollectible(string memory tokenURI) public returns (uint256) {
        uint256 newItemId = tokenCounter;
        _safeMint(msg.sender, newItemId);
        _setTokenURI(newItemId, tokenURI);
        tokenCounter = tokenCounter + 1;
        return newItemId;
    }</code></pre><p>A função <code>_safeMint</code> cria o novo NFT e o atribui a quem chamou <code>createdCollectible</code>, também conhecido como<code>msg.sender</code>, com um <code>newItemId</code> derivado de <code>tokenCounter</code>. É assim que podemos acompanhar quem é proprietário de quê, verificando o proprietário do <code>tokenId</code>.</p><p>Você vai perceber que também chamamos a função <code>_setTokenURI</code>. Vamos conversar sobre ela.</p><h2 id="o-que-s-o-metadados-de-nft-e-tokenuri"><strong>O que são metadados de NFT e tokenURI?</strong></h2><p>Quando os contratos inteligentes estavam sendo criados e os NFTs estavam sendo criados, as pessoas rapidamente perceberam que é beeeeeem caro implantar muitos dados na <em>blockchain</em>. Imagens pequenas de um KB podem facilmente <a href="https://ethereum.stackexchange.com/questions/872/what-is-the-cost-to-store-1kb-10kb-100kb-worth-of-data-into-the-ethereum-block/896#896">custar mais de 1 milhão de dólares para guardar</a> (em inglês).</p><p>Isso é claramente um problema para os NFTs, já que, ao ser o proprietário de arte criativa, você tem que guardar essa informação em algum lugar. Eles também queriam uma maneira mais leve de guardar os atributos sobre NFTs – e é aqui que &nbsp;os metadados e o tokenURI entram em ação.</p><h3 id="tokenuri"><strong>TokenURI</strong></h3><p>O <code>tokenURI</code> em um NFT é um identificador único da "aparência" daquele token. Um URI pode ser uma chamada HTTPS para uma API, um hash IPFS, ou <a href="https://danielmiessler.com/study/difference-between-uri-url/">qualquer outra coisa</a> exclusiva.</p><p>Eles seguem um padrão de mostrar os metadados que têm essa aparência:</p><pre><code class="language-json">{
    "name": "name",
    "description": "description",
    "image": "https://ipfs.io/ipfs/QmTgqnhFBMkfT9s8PHKcdXBn1f5bG3Q5hmBaR4U6hoTvb1?filename=Chainlink_Elf.png",
    "attributes": [
        {
            "trait_type": "trait",
            "value": 100
        }
    ]
}</code></pre><p>Eles mostram como um NFT é e seus atributos. O atributo <code>image</code> aponta para outro URI da aparência do NFT. Isso facilita para as plataformas de NFT como a Opensea, Rarible e Mintable renderizar NFTs nas suas plataformas, já que todos estão esperando receber esses metadados.</p><h3 id="metadados-off-chain-x-metadados-on-chain">Metadados off-chain x metadados on-chain</h3><p>Agora, você pode estar pensando "Peraí... se os metadados não estão on-chain, significa que o meu NFT pode sumir em algum momento"? E você não poderia estar mais correto.</p><p>Você também estaria correto em pensar que metadados off-chain significam que você não pode usá-los para que seus contratos inteligentes interajam um com o outro.</p><p>Esse é o motivo pelo qual nós queremos focar nos metadados on-chain, para que assim possamos programar nossos NFTs para interagir uns com os outros.</p><p>No entanto, ainda precisamos da parte da imagem (<code>image</code>) dos metadados off-chain, pois não temos uma maneira otimizada de armazenar imagens grandes on-chain. Mas não se preocupe. Podemos fazer isso gratuitamente em uma rede descentralizada ainda usando <a href="https://ipfs.io/">IPFS</a>.</p><p>Aqui está um exemplo de um imageURI do IPFS que mostra o <a href="https://opensea.io/assets/0x8d78277bc2c63f07efc2c0c8a8512de4ad459a05/1">Chainlink Elf</a> criado no tutorial <a href="https://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/">Dungeons and Dragons</a> (em inglês).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/04/Screen-Shot-2021-03-31-at-12.15.22-PM.png" class="kg-image" alt="Screen-Shot-2021-03-31-at-12.15.22-PM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/04/Screen-Shot-2021-03-31-at-12.15.22-PM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/04/Screen-Shot-2021-03-31-at-12.15.22-PM.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/04/Screen-Shot-2021-03-31-at-12.15.22-PM.png 1030w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>Chainlink Elf</figcaption></figure><p>Não definimos um tokenURI para o NFT simplesmente porque queríamos apenas mostrar um exemplo básico.<br>Vamos pular para o NFT avançado agora, para que possamos ver alguns dos recursos incríveis que podemos fazer com metadados on-chain, para que o NFT seja renderizado na Opensea, e colocar nosso Dogie no ar!</p><p>Se você quiser um vídeo para refrescar sua memória sobre o que acabamos de ver na seção anterior, acompanhe esse <a href="https://www.youtube.com/watch?v=ZH_7nEIJDUY">vídeo sobre a implantação de um NFT simples</a>.</p><h2 id="nfts-din-micos-e-avan-ados"><strong>NFTs dinâmicos e avançados</strong></h2><p><a href="https://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/">NFTs dinâmicos</a> são NFTs que podem mudar com o tempo ou ter funcionalidades on-chain que podem ser usadas para interagir umas com as outras. Esses são as NFTs que tem customizações ilimitadas. Assim, podemos criar jogos inteiros, mundos ou algum tipo de arte interativa.<br>Vamos nos aprofundar na parte avançada desse tutorial.</p><h3 id="in-cio-r-pido-avan-ado"><strong>Início rápido avançado</strong></h3><p>Certifique-se de ter as testnets ETH e LINK, bem como o suficiente na sua metamask, e então execute o comando a seguir:</p><pre><code>brownie run scripts/advanced_collectible/deploy_advanced.py --network rinkeby
brownie run scripts/advanced_collectible/create_collectible.py --network rinkeby</code></pre><p>Nosso <em>collectible</em> aqui é uma reprodução de raças de cachorros aleatória retornada do <a href="https://docs.chain.link/docs/chainlink-vrf/">Chainlink VRF</a> (em inglês). Chainlink VRF é uma maneira de obter números aleatórios comprováveis e, portanto, realmente em falta em nossos NFTs. Em seguida, vamos criar seus metadados.</p><pre><code>brownie run scripts/advanced_collectible/create_metadata.py --network rinkeby</code></pre><p>Podemos, então, como opção, fazer upload desses dados para o IPFS para que possamos ter um tokenURI. Eu vou mostrar para você como fazer isso mais tarde. Por enquanto, vamos usar apenas o tokenURI de exemplo de:</p><pre><code>https://ipfs.io/ipfs/Qmd9MCGtdVz2miNumBHDbvj8bigSgTwnr4SbyH6DNnpWdt?filename=1-PUG.json</code></pre><p>Se você fizer o download do <a href="https://chrome.google.com/webstore/detail/ipfs-companion/nibjojkomfdiaoajekhjakgkdhaomnch?hl=en">IPFS Companion</a> no seu navegador, poderá usar aquele URL para ver o que o URI retorna. Ficará parecido com isso:</p><pre><code class="language-json">{
    "name": "PUG",
    "description": "An adorable PUG pup!",
    "image": "https://ipfs.io/ipfs/QmSsYRx3LpDAb1GZQm7zZ1AuHZjfbPkD6J7s9r41xu1mf8?filename=pug.png",
    "attributes": [
        {
            "trait_type": "cuteness",
            "value": 100
        }
    ]
}</code></pre><p>Então, podemos executar nosso script <code>set_tokenuri.py</code>:</p><pre><code>brownie run scripts/advanced_collectible/set_tokenuri.py --network rinkeby</code></pre><p>Teremos, então, uma saída como esta:</p><pre><code>Running 'scripts/advanced_collectible/set_tokenuri.py::main'...
Working on rinkeby
Transaction sent: 0x8a83a446c306d6255952880c0ca35fa420248a84ba7484c3798d8bbad421f88e
  Gas price: 1.0 gwei   Gas limit: 44601   Nonce: 354
  AdvancedCollectible.setTokenURI confirmed - Block: 8331653   Gas used: 40547 (90.91%)

Awesome! You can view your NFT at https://testnets.opensea.io/assets/0x679c5f9adC630663a6e63Fa27153B215fe021b34/0
Please give up to 20 minutes, and hit the "refresh metadata" button</code></pre><p>E podemos clicar no link que nos foi dado para ver como ficou no Opensea! Talvez você tenha que clicar no botão <code>refresh metadata</code> e esperar alguns minutos.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/04/Screen-Shot-2021-03-31-at-12.33.42-PM.png" class="kg-image" alt="Screen-Shot-2021-03-31-at-12.33.42-PM" width="600" height="400" loading="lazy"><figcaption>Atualizar os metadados</figcaption></figure><h2 id="as-ra-as-aleat-rias"><strong>As raças aleatórias</strong></h2><p>Vamos falar sobre o que acabamos de fazer. Aqui está nossa <code>AdvancedCollectible.sol</code>:</p><pre><code>pragma solidity 0.6.6;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@chainlink/contracts/src/v0.6/VRFConsumerBase.sol";

contract AdvancedCollectible is ERC721, VRFConsumerBase {
    uint256 public tokenCounter;
    enum Breed{PUG, SHIBA_INU, BRENARD}
    // add other things
    mapping(bytes32 =&gt; address) public requestIdToSender;
    mapping(bytes32 =&gt; string) public requestIdToTokenURI;
    mapping(uint256 =&gt; Breed) public tokenIdToBreed;
    mapping(bytes32 =&gt; uint256) public requestIdToTokenId;
    event requestedCollectible(bytes32 indexed requestId); 


    bytes32 internal keyHash;
    uint256 internal fee;
    uint256 public randomResult;
    constructor(address _VRFCoordinator, address _LinkToken, bytes32 _keyhash)
    public 
    VRFConsumerBase(_VRFCoordinator, _LinkToken)
    ERC721("Dogie", "DOG")
    {
        tokenCounter = 0;
        keyHash = _keyhash;
        fee = 0.1 * 10 ** 18;
    }

    function createCollectible(string memory tokenURI, uint256 userProvidedSeed) 
        public returns (bytes32){
            bytes32 requestId = requestRandomness(keyHash, fee, userProvidedSeed);
            requestIdToSender[requestId] = msg.sender;
            requestIdToTokenURI[requestId] = tokenURI;
            emit requestedCollectible(requestId);
    }

    function fulfillRandomness(bytes32 requestId, uint256 randomNumber) internal override {
        address dogOwner = requestIdToSender[requestId];
        string memory tokenURI = requestIdToTokenURI[requestId];
        uint256 newItemId = tokenCounter;
        _safeMint(dogOwner, newItemId);
        _setTokenURI(newItemId, tokenURI);
        Breed breed = Breed(randomNumber % 3); 
        tokenIdToBreed[newItemId] = breed;
        requestIdToTokenId[requestId] = newItemId;
        tokenCounter = tokenCounter + 1;
    }

    function setTokenURI(uint256 tokenId, string memory _tokenURI) public {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );
        _setTokenURI(tokenId, _tokenURI);
    }
}
</code></pre><p>Usamos o Chainlink VRF para criar uma raça aleatória de uma lista de <code>PUG, SHIBA_INU, BERNARD</code>. Quando chamamos a <code>createCollectible</code> desta vez, na verdade ,iniciamos uma solicitação para o nó Chainlink VRF off-chain e retornamos com um número aleatório para criar o NFT com uma dessas 3 raças.</p><p>Usar aleatoriedade verdadeira em seus NFTs é uma ótima maneira de criar escassez verdadeira e usar um número aleatório do oráculo Chainlink significa que seu número é comprovadamente aleatório, não podendo ser influenciado pelos mineradores.</p><p>Você pode aprender mais sobre isso <a href="https://docs.chain.link/docs/chainlink-vrf">na documentação do Chainlink VRF</a>(em inglês).</p><p>O nó Chainlink responde chamando a função <code>fulfillRandomness</code> e cria o <em>collectible</em> com base no número aleatório. Ainda temos que chamar <code>_setTokenURI</code> para dar ao nosso NFT a aparência que ele precisa.<br><br>Nós não demos nossos atributos do NFT aqui, mas os atributos são uma ótima maneira de fazer com que nossos NFTs batalhem e interajam. Você pode ver um ótimo exemplo de NFTs com atributos <a href="https://github.com/PatrickAlphaC/dungeons-and-dragons-nft">neste exemplo de Dungeons and Dragons</a> (em inglês).</p><h3 id="metadados-do-ipfs"><strong>Metadados do IPFS</strong></h3><p>Estamos usando o IPFS para guardar dois arquivos:</p><ol><li>A imagem do NFT (a imagem do pug)</li><li>O arquivo tokenURI (o arquivo JSON que também inclui o link da imagem)</li></ol><p>Nós usamos o IPFS por ser uma plataforma grátis e descentralizada. Também podemos adicionar nossos tokenURIs e imagens no IPFS fazendo download do <a href="https://docs.ipfs.io/install/ipfs-desktop/">IPFS desktop</a> (em inglês), clicando no botão <code>import</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/04/Screen-Shot-2021-03-31-at-12.43.13-PM.png" class="kg-image" alt="Screen-Shot-2021-03-31-at-12.43.13-PM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/04/Screen-Shot-2021-03-31-at-12.43.13-PM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/04/Screen-Shot-2021-03-31-at-12.43.13-PM.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/04/Screen-Shot-2021-03-31-at-12.43.13-PM.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/04/Screen-Shot-2021-03-31-at-12.43.13-PM.png 2120w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>Adicione um arquivo IFPS</figcaption></figure><p>Agora, podemos compartilhar o URI clicando nos três pontos ao lado do arquivo que queremos compartilhar, clicando em <code>share link</code> e copiando o link fornecido. Podemos adicionar esse link no nosso arquivo <code>set_tokenuri.py</code> para mudar o URI do token que queremos usar.</p><h3 id="persist-ncia"><strong>Persistência</strong></h3><p>No entanto, se o tokenURI estiver apenas em nosso <em>node</em>, isso significa que, quando nosso <em>node</em> estiver inativo, ninguém mais poderá visualizá-lo. Então, queremos que outros façam o <code>pin</code> do nosso NFT. Podemos usar um serviço que realiza o <code>pin</code> como o <a href="https://www.pinata.cloud">Pinata</a> para ajudar a manter nossos dados ativos mesmo quando nosso <em>node</em> no IPFS estiver inativo.<br><br>Imagino que, no futuro, mais e mais metadados serão armazenados em IPFS e plataformas de armazenamento serão descentralizadas. Servidores centralizados podem ficar inativos, e isso significaria que a arte dos NFTs nesses servidores seria perdida para sempre. Certifique-se de verificar onde está localizado o tokenURI do NFT que você usa!<br>Também espero que mais pessoas usem plataformas dStorage como <a href="https://docs.filecoin.io">Filecoin</a>, pois usar um serviço de pinning também não é tão descentralizado quanto deveria ser.</p><h2 id="indo-al-m"><strong>Indo além</strong></h2><p>Se você quiser ver um passo a passo em vídeo do NFT avançado que acabamos de fazer, <a href="https://www.youtube.com/watch?v=tCR7b9p9GiM">assista ao vídeo sobre NFT avançado</a>.<br><br>Agora, você tem as habilidades para criar NFTs lindos, divertidos, personalizados e interativos e renderizá-los em um marketplace.<br><br>NFTs são maneiras divertidas e poderosas de compensar os artistas com precisão por todo o trabalho duro que eles fazem. Boa sorte e lembre-se de se divertir!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Git push para uma branch remota – como fazer um push de uma branch local para a origin ]]>
                </title>
                <description>
                    <![CDATA[ O comando básico para enviar um push de uma branch local para um repositório remoto é o git push. Esse comando tem uma variedade de opções e parâmetros que podem ser passados a ele. Neste artigo, você aprenderá aqueles que você mais usará no dia a dia. Como fazer o ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/git-push-para-uma-branch-remota-como-fazer-um-push-de-uma-branch-local-para-a-origin/</link>
                <guid isPermaLink="false">61f7521253557304fa19d6cb</guid>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Gabriel Lima ]]>
                </dc:creator>
                <pubDate>Wed, 16 Feb 2022 03:25:14 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/02/git-push-to-remote-branch-article.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/git-push-to-remote-branch-how-to-push-a-local-branch-to-origin/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Git Push to Remote Branch – How to Push a Local Branch to Origin</a>
      </p><p>O comando básico para enviar um push de uma branch local para um repositório remoto é o <code>git push</code>.</p><p>Esse comando tem uma variedade de opções e parâmetros que podem ser passados a ele. Neste artigo, você aprenderá aqueles que você mais usará no dia a dia.</p><h2 id="como-fazer-o-push-de-uma-branch-local-para-a-branch-origin"><strong>Como fazer o push de uma branch local para a branch origin</strong></h2><p>Se você executar o comando <code>git push</code>, o Git por padrão escolherá dois parâmetros a mais para você: o <strong>repositório remoto </strong>para realizar o push e a <strong>branch</strong> do push.</p><p>A forma genérica do comando é esta:</p><pre><code>$ git push &lt;remote&gt; &lt;branch&gt;</code></pre><p>Por padrão, o Git escolhe a <code>origin</code> como repositório remoto e sua <em>branch atual </em>como a branch para o push.</p><p>Se a sua branch atual é a <code>main</code>, o comando <code>git push</code> vai completar os outros dois parâmetros pré-definidos – executando, efetivamente, <code>git push origin main</code>.</p><p>No exemplo abaixo, <code>origin</code> &nbsp;é um repositório remoto no GitHub. A branch atual é a <code>main</code>:</p><pre><code>(main)$ git remote -v 
origin  git@github.com:johnmosesman/burner-repo.git (fetch)
origin  git@github.com:johnmosesman/burner-repo.git (push)

(main)$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 274 bytes | 274.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:johnmosesman/burner-repo.git
   b7f661f..ab77dd6  main -&gt; main
</code></pre><p>Na saída da execução, você verá que a branch local <code>main</code> foi enviada para a branch remota <code>main</code>: </p><pre><code>To github.com:johnmosesman/burner-repo.git
   b7f661f..ab77dd6  main -&gt; main
</code></pre><h2 id="como-for-ar-o-push-de-uma-branch-no-git"><strong>Como forçar o push de uma branch no Git</strong></h2><p>Normalmente, você realizará um push para uma branch e essa ação será adicionada ao seu histórico de commits.</p><p>Existem, no entanto, situações em que você precisará <strong>sobrescrever</strong> de forma forçada o histórico de uma branch.</p><p>Existem alguns motivos para você precisar fazer isso.</p><p>O primeiro motivo é consertar um erro – apesar de que, provavelmente, seria melhor apenas fazer um novo commit, <a href="https://git-scm.com/docs/git-revert/pt_BR">revertendo as mudanças</a>.</p><p>O segundo motivo é um cenário mais comum. Após uma ação do tipo <a href="https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase"><strong><strong>rebase</strong></strong></a><strong> </strong>(texto em inglês) que altera o histórico de commits:</p><blockquote>Internamente, o Git realiza [um rebase] criando novos commits e aplicando-os à base especificada. É muito importante entender que, apesar de a branch parecer a mesma, ela é composta de commits inteiramente novos.</blockquote><p>O rebase cria commits inteiramente novos.</p><p>Isso significa que, se você tentar fazer o push de uma branch que sofreu rebase localmente – nas que não se encontra na branch remota – o repositório remoto vai reconhecer que o histórico de commits foi alterado e vai evitar que você faça o push enquanto não resolver as diferenças:</p><pre><code>(my-feature)$ git push
To github.com:johnmosesman/burner-repo.git
 ! [rejected]        my-feature -&gt; my-feature (non-fast-forward)
error: failed to push some refs to 'git@github.com:johnmosesman/burner-repo.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
</code></pre><p>Você poderia usar o comando <code>git pull</code> para fazer o merge das diferenças, mas se <em>realmente </em>quiser sobrescrever o repositório remoto, você pode adicionar a flag <code>--force</code> no seu comando push:</p><pre><code>(my-feature)$ git push --force origin my-feature
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 184 bytes | 184.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To github.com:johnmosesman/burner-repo.git
 + edb64e2...52f54da my-feature -&gt; my-feature (forced update)
</code></pre><p><strong>Observação<strong>:</strong></strong> você pode usar apenas <code>-f</code> ao invés de <code>--force</code>, para abreviar.</p><p>Um push forçado é uma ação destrutiva – use-a somente quando tiver certeza de que é isso mesmo que você quer fazer.</p><h3 id="force-push-com-lease"><strong>Force push com lease</strong></h3><p>Talvez você queira fazer um force push – mas só se ninguém tiver contribuído para a branch.</p><p>Se mais alguém contribuiu para sua branch e se tiver feito um push para o repositório remoto – e se você fizer um force push – você vai sobrescrever todas as mudanças que foram feitas por outros.</p><p>Para prevenir esse tipo de problema, você pode usar a opção <code>--force-with-lease</code>.</p><p>Novamente, <a href="https://git-scm.com/docs/git-push/pt_BR">pela documentação</a>:</p><blockquote>--force-with-lease sozinho, sem especificar os detalhes, protegerá todas as refs remotas que serão atualizadas, exigindo que o seu valor atual seja o mesmo que o da branch monitorada remotamente que temos para elas.</blockquote><p>Basicamente, você está dizendo ao Git para forçar a atualização dessa branch <em>apenas se</em> ela for exatamente igual ao que era da última vez que você a viu.</p><p>Se você estiver colaborando com outras pessoas na sua branch, é recomendado não usar a flag <code>--force</code> ou, ao menos, usar a opção <code>--force-with-lease</code> para prevenir a perda de mudanças que outros colaboradores tenham feito.</p><h2 id="como-fazer-um-push-para-uma-branch-com-um-nome-diferente-no-git"><strong>Como fazer um push para uma branch com um nome diferente no Git</strong></h2><p>Você normalmente fará o push da sua branch local para uma branch remota com o mesmo nome – mas nem sempre.</p><p>Para fazer um push para uma branch com o nome diferente, você vai precisar especificar <em>a</em> <em>branch da qual você deseja fazer o push</em> e a branch para qual você fará o push, separadas por dois-pontos (<code>:</code>).</p><p>Por exemplo, se você quer fazer um push de uma branch chamada <code>some-branch</code> para outra chamada <code>my-feature</code>:</p><pre><code>(some-branch)$ git push origin some-branch:my-feature
Total 0 (delta 0), reused 0 (delta 0)
To github.com:johnmosesman/burner-repo.git
 + 728f0df...8bf04ea some-branch -&gt; my-feature</code></pre><h3 id="como-fazer-um-push-de-todas-as-branches-locais-para-um-reposit-rio-remoto"><strong>Como fazer um push de todas as branches locais para um repositório remoto</strong></h3><p>Você não precisa fazer um push de todas as suas branches locais sempre, mas, se precisar, pode adicionar a flag <code>--all</code>:</p><pre><code>(main)$ git branch
* main
  my-feature

(main)$ git push --all
...
To github.com:johnmosesman/burner-repo.git
   b7f661f..6e36148  main -&gt; main
 * [new branch]      my-feature -&gt; my-feature
</code></pre><h2 id="conclus-o-"><strong>Conclusão:</strong></h2><p>O comando <code>git push</code> é um dos comandos que você mais usará. Existem várias opções que podem ser usadas com ele. Recomendo fortemente que você <a href="https://git-scm.com/docs/git-push/pt_BR">leia a documentação</a> para encontrar outras opções úteis e atalhos. </p><p>Se você gostou desse tutorial, o autor também fala sobre tópicos desse tipo no <a href="https://twitter.com/johnmosesman">Twitter</a>, além de escrever mais sobre o assunto <a href="https://johnmosesman.com">no seu site</a> (em inglês).</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
