<?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[ Dart - 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[ Dart - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Wed, 16 Sep 2026 21:11:18 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/dart/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Construtores em Dart – casos de uso e exemplos ]]>
                </title>
                <description>
                    <![CDATA[ A maioria de nós está familiarizada com o conceito de construtores. Eles nos permitem criar diferentes instâncias de nossas classes. Podemos especificar de quais parâmetros a classe deve depender quando ela está sendo instanciada e ocultar a lógica de inicialização interna. Podemos ter muitos construtores para diferentes casos de uso ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/construtores-em-dart-casos-de-uso-e-exemplos/</link>
                <guid isPermaLink="false">64daa777fa562503c1caf630</guid>
                
                    <category>
                        <![CDATA[ Dart ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Mon, 14 Aug 2023 23:43:31 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/60591ab5687d62084bf6a7c6.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/constructors-in-dart/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Constructors in Dart – Use Cases and Examples</a>
      </p><p>A maioria de nós está familiarizada com o conceito de construtores. Eles nos permitem criar diferentes instâncias de nossas classes. Podemos especificar de quais parâmetros a classe deve depender quando ela está sendo instanciada e ocultar a lógica de inicialização interna.</p><p>Podemos ter muitos construtores para diferentes casos de uso ou podemos confiar no padrão.</p><p>No Dart, os construtores desempenham um papel semelhante, mas há muitas variações que não existem na maioria das linguagens de programação. Este artigo abordará os diferentes casos de uso e exemplos de construtores.</p><p>Em todos os exemplos deste artigo, usaremos a classe a seguir:</p><pre><code class="language-dart">class Carro {
   String fabricante;
   String modelo;
   String anoFabricacao;
   bool comABS;
}</code></pre><h2 id="como-come-ar-a-usar-construtores-no-dart">Como começar a usar construtores no Dart</h2><p>Se você não especificar um construtor no Dart, ele criará um construtor padrão para você.</p><p>Isso não significa que você verá um construtor padrão gerado em sua classe. Em vez disso, ao criar uma nova instância de sua classe, esse construtor será chamado. Ele não terá argumentos e chamará o construtor da superclasse, sem argumentos também.</p><p>Para declarar um construtor em sua classe, você pode fazer o seguinte:</p><pre><code class="language-dart">class Carro {
	String fabricante;
   	String modelo;
   	String anoFabricacao;
   	bool comABS;
   
   	Carro(String fabricante, String modelo, int ano, bool comABS) {
    	this.fabricante = fabricante;
      	this.modelo = modelo;
      	this.anoFabricacao = ano;
      	this.comABS = comABS;
   	}
}</code></pre><p>Como você pode imaginar, deve haver um modo melhor de inicializar os campos da nossa classe – no Dart, fazemos isso assim:</p><pre><code class="language-dart">class Carro {
	String fabricante;
   	String modelo;
   	String anoFabricacao;
   	bool comABS;
   
   	Carro(this.fabricante, this.modelo, this.anoFabricacao, this.comABS);
}</code></pre><p>A maneira que usamos acima simplifica a sintaxe do Dart para realizar a tarefa.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/image-321.png" class="kg-image" alt="image-321" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/image-321.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/08/image-321.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/08/image-321.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/image-321.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1333" loading="lazy"><figcaption>Foto criada por <a href="https://unsplash.com/@lin_alessio?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Alession Lin</a>, extraída do <a href="https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit">Unsplash</a></figcaption></figure><h2 id="recursos-mais-complexos-do-construtor"><strong>Recursos mais complexos do construtor</strong></h2><p>Em outras linguagens, é possível sobrecarregar seu construtor. Isso significa que você pode ter construtores diferentes com o mesmo nome, mas com uma assinatura variável (ou um conjunto diferente de argumentos).</p><h3 id="construtores-nomeados-em-dart"><strong>Construtores nomeados em Dart</strong></h3><p>Em Dart, isso não é possível, mas há uma maneira de contornar isso. É chamada de <strong>construtores nomeados</strong>. Dar nomes diferentes aos seus construtores permite que sua classe tenha muitos construtores e represente melhor seus casos de uso fora da classe.</p><figure class="kg-card kg-code-card"><pre><code class="language-dart">class Carro {
	String fabricante;
   	String modelo;
   	String anoFabricacao;
   	bool comABS;
   
   	Carro(this.fabricante, this.modelo, this.anoFabricacao, this.comABS);
   
   	Carro.semABS(this.fabricante, this.modelo, this.anoFabricacao): comABS = false;
}</code></pre><figcaption>Exemplo de construtor nomeado</figcaption></figure><p>O construtor <strong>semABS</strong> inicializa a variável de instância <strong>comABS</strong> como <strong>false</strong>, antes que o corpo do construtor seja executado. Isso é conhecido como uma lista de inicializadores e você pode inicializar diversas variáveis, separadas por uma vírgula.</p><p>O caso de uso mais comum para listas de inicializadores é inicializar campos finais declarados por sua classe.</p><blockquote>✋ Tudo o que for colocado no lado direito dos dois-pontos (:) não tem acesso ao <strong><strong>this</strong></strong></blockquote><h3 id="construtores-de-f-brica-no-dart"><strong>Construtores "de fábrica" no Dart</strong></h3><p>Um construtor de fábrica é um construtor que pode ser usado quando você não deseja necessariamente que um construtor crie uma instância de sua classe.</p><p>Isso pode ser útil se você mantiver instâncias de sua classe na memória e não quiser criar uma outra a cada vez (ou se a operação de criação de uma instância for cara).</p><p>Outro caso de uso é se você tiver determinada lógica em seu construtor para inicializar um campo final que não pode ser feito na lista inicializadora.</p><figure class="kg-card kg-code-card"><pre><code class="language-dart">class Carro {
	String fabricante;
   	String modelo;
   	String anoFabricacao;
   	bool comABS;
   
   	factory Carro.ford(String modelo, String anoFabricacao, bool comABS) {
    	return CarroFord(modelo, anoFabricacao, comABS);
    }
}

class CarroFord extends Carro {
	CarroFord(String modelo, String anoFabricacao, bool comABS): super("Ford", modelo, anoFabricacao, comABS);
 
}</code></pre><figcaption>Exemplo do construtor de fábrica</figcaption></figure><h2 id="construtores-avan-ados-no-dart"><strong>Construtores avançados no Dart</strong></h2><h3 id="construtores-constantes-e-construtores-de-redirecionamento-no-dart"><strong>Construtores constantes e construtores de </strong><strong>redirecionamento </strong><strong>no Dart</strong></h3><p>O Dart também permite que você crie construtores constantes. O que isso significa exatamente? Se sua classe representa um objeto que nunca será alterado após sua criação, você pode se beneficiar do uso de um construtor constante. Você tem que se certificar de que todos os seus campos de classe são finais.</p><figure class="kg-card kg-code-card"><pre><code class="language-dart">class FordFocus {
   static const FordFocus fordFocus = FordFocus("Ford", "Focus", "2013", true);
   
   final String fabricante;
   final String modelo;
   final String anoFabricacao;
   final bool comABS;
   
   const FordFocus(this.fabricante, this.modelo, this.anoFabricacao, this.comABS);
   
}</code></pre><figcaption>Exemplo de construtor constante</figcaption></figure><p>Quando você deseja que um construtor chame outro construtor internamente, ele é chamado de <strong>construtores de redirecionamento</strong>.</p><figure class="kg-card kg-code-card"><pre><code class="language-dart">class Carro {
	String fabricante;
   	String modelo;
   	String anoFabricacao;
   	bool comABS;
   
   	Carro(this.fabricante, this.modelo, this.anoFabricacao, this.comABS);
   
   	Carro.semABS(this.fabricante, this.modelo, this.anoFabricacao): this(fabricante, modelo, anoFabricacao, false);
}</code></pre><figcaption>Exemplo de construtor de redirecionamento</figcaption></figure><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Cada um dos construtores que discutimos tem um propósito e um caso de uso diferentes. Cabe a você determinar e entender quando usar cada um. Espero que este artigo tenha dado a você o conhecimento necessário para fazer isso.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
