<?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: Thaise Medeiros</title>
    <description>The latest articles on DEV Community by Thaise Medeiros (@thai_medeiros).</description>
    <link>https://dev.to/thai_medeiros</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%2F977726%2Feb77c9c4-d315-4778-93b4-7ae46f7b2caa.png</url>
      <title>DEV Community: Thaise Medeiros</title>
      <link>https://dev.to/thai_medeiros</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thai_medeiros"/>
    <language>en</language>
    <item>
      <title>Guia Prático: Primeiros Passos com C#</title>
      <dc:creator>Thaise Medeiros</dc:creator>
      <pubDate>Thu, 13 Feb 2025 13:00:00 +0000</pubDate>
      <link>https://dev.to/unhacked/guia-pratico-primeiros-passos-com-c-4a3e</link>
      <guid>https://dev.to/unhacked/guia-pratico-primeiros-passos-com-c-4a3e</guid>
      <description>&lt;p&gt;Então você decidiu começar com C#? Excelente escolha! Neste guia prático vou te mostrar exatamente por onde começar, sem complicações.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que C#?
&lt;/h2&gt;

&lt;p&gt;Antes de mergulharmos no código, é importante entender por que o C# é uma excelente escolha para iniciantes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sintaxe clara e expressiva&lt;/li&gt;
&lt;li&gt;Compilação que ajuda a encontrar erros rapidamente&lt;/li&gt;
&lt;li&gt;Ferramentas gratuitas e robustas&lt;/li&gt;
&lt;li&gt;Documentação extensa em português&lt;/li&gt;
&lt;li&gt;Comunidade ativa e acolhedora&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Preparando o Ambiente
&lt;/h2&gt;

&lt;p&gt;Vamos começar configurando seu ambiente de desenvolvimento:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Baixe o Visual Studio Community em: &lt;a href="https://visualstudio.microsoft.com/pt-br/" rel="noopener noreferrer"&gt;https://visualstudio.microsoft.com/pt-br/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Durante a instalação, selecione "Desenvolvimento para Desktop com .NET"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depois de instalar o Visual Studio Community, vamos criar nosso primeiro projeto passo a passo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Abra o Visual Studio Community&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clique em "Criar novo projeto" na tela inicial ou vá em Arquivo &amp;gt; Novo &amp;gt; Projeto&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Escolha o tipo de projeto&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Na barra de pesquisa, digite "Console"&lt;/li&gt;
&lt;li&gt;Selecione "Aplicativo do Console"&lt;/li&gt;
&lt;li&gt;Certifique-se que está selecionado C# como linguagem&lt;/li&gt;
&lt;li&gt;Clique em "Próximo"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Configure seu projeto&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nome do Projeto: MeuPrimeiroProjeto&lt;/li&gt;
&lt;li&gt;Local: Escolha uma pasta onde quer salvar&lt;/li&gt;
&lt;li&gt;Nome da Solução: Deixe igual ao nome do projeto&lt;/li&gt;
&lt;li&gt;Clique em "Próximo"&lt;/li&gt;
&lt;li&gt;Na próxima tela, selecione ".NET 8.0" como versão&lt;/li&gt;
&lt;li&gt;Clique em "Criar"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Entendendo a estrutura inicial&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;namespace MeuPrimeiroProjeto
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Olá, Mundo!");
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Modificando o código&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apague todo o código gerado&lt;/li&gt;
&lt;li&gt;Digite o seguinte código:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Console.WriteLine("Olá! Qual é seu nome?");
string nome = Console.ReadLine();
Console.WriteLine($"Bem-vindo ao C#, {nome}!");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6. Executando o programa&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pressione F5 para executar ou clique no botão verde "Iniciar" no topo da tela&lt;/li&gt;
&lt;li&gt;Uma janela preta (console) irá abrir&lt;/li&gt;
&lt;li&gt;Digite seu nome quando solicitado&lt;/li&gt;
&lt;li&gt;Veja a mensagem personalizada&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. Entendendo o que aconteceu&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Console.WriteLine()&lt;/code&gt; - Exibe texto na tela&lt;br&gt;
&lt;code&gt;Console.ReadLine()&lt;/code&gt; - Lê o que o usuário digitar&lt;br&gt;
A variável &lt;code&gt;nome&lt;/code&gt; guarda o texto digitado&lt;br&gt;
&lt;code&gt;$"..."&lt;/code&gt; permite incluir variáveis no texto usando &lt;code&gt;{}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Experimente Modificar&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tente adicionar mais perguntas&lt;/li&gt;
&lt;li&gt;Experimente fazer cálculos simples&lt;/li&gt;
&lt;li&gt;Teste diferentes tipos de mensagens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Dica:&lt;/strong&gt; Se algo der errado, não se preocupe! O Visual Studio sublinhará em vermelho os erros e te dará dicas de como corrigi-los.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if(VoceChegouAqui== true)
{
    Console.WriteLine("Conquista desbloqueada: Primeiro código em C# concluído!");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Parabéns! Você deu o primeiro passo na sua jornada com C#! Você já tem seu ambiente configurado e criou seu primeiro programa interativo. &lt;/p&gt;

&lt;p&gt;Pode parecer simples, mas não subestime esta conquista. Cada pessoa que desenvolve com C#, desde iniciantes até as mais experientes, começou exatamente onde você está agora: com um "Olá, Mundo!" na tela.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>beginners</category>
      <category>dotnet</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A arte das coleções em .NET - List</title>
      <dc:creator>Thaise Medeiros</dc:creator>
      <pubDate>Thu, 13 Apr 2023 13:00:00 +0000</pubDate>
      <link>https://dev.to/unhacked/a-arte-das-colecoes-em-net-list-3b3f</link>
      <guid>https://dev.to/unhacked/a-arte-das-colecoes-em-net-list-3b3f</guid>
      <description>&lt;p&gt;Com certeza você já precisou lidar com dados e optou por usar List, seja por toda a praticidade que esta classe proporciona ou por ser uma das mais difundidas. Uma das perguntas que eu mais gosto de me fazer quando estou programando é: por que vou usar isto aqui? Essa é uma das perguntas que vamos responder agora no segundo artigo da série sobre coleções.&lt;/p&gt;

&lt;h2&gt;
  
  
  Definindo a List
&lt;/h2&gt;

&lt;p&gt;Como vimos no &lt;a href="https://dev.to/unhacked/a-arte-das-colecoes-em-net-intro-j9a"&gt;artigo anterior&lt;/a&gt;, a recomendação é usar coleções genéricas, então encontramos a classe &lt;code&gt;List&amp;lt;T&amp;gt;&lt;/code&gt; no &lt;em&gt;namespace&lt;/em&gt; System.Collections.Generic. A &lt;code&gt;List&amp;lt;T&amp;gt;&lt;/code&gt; representa uma lista fortemente tipada de objetos que podem ser acessados por índice e possui métodos para pesquisar, classificar e manipular as listas. Por baixo dos panos, a &lt;code&gt;List&amp;lt;T&amp;gt;&lt;/code&gt; é um array unidimensional que começa em índice zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  Utilizando a &lt;code&gt;List&amp;lt;T&amp;gt;&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Para inicializar uma lista do tipo Aluno, escrevemos assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List&amp;lt;Aluno&amp;gt; alunos = new List&amp;lt;Aluno&amp;gt;();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao utilizarmos o construtor sem parâmetros, iremos criar uma lista com a capacidade padrão, que é 4. Após a inicialização, podemos adicionar itens à lista usando o método Add() passando o objeto aluno como parâmetro, assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;alunos.Add(new Aluno { Id = 1, Nome = "Thaise" });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora aqui é a dica de ouro para otimizar seu código usando &lt;code&gt;List&amp;lt;T&amp;gt;&lt;/code&gt; com uma grande quantidade de itens! Se não definirmos a capacidade, o .NET vai criar uma com capacidade para até 4 itens, que é o padrão. Toda vez que um item é adicionado, é verificado se a capacidade da lista comporta mais um item. Caso a capacidade seja menor que a quantidade de itens mais 1, que estamos tentando adicionar, será criada uma nova lista com a capacidade duplicada e os itens da lista atual serão copiados para a nova. &lt;/p&gt;

&lt;p&gt;Por exemplo: no nosso código acima, criamos uma lista de alunos usando o construtor sem parâmetros e adicionamos um aluno nela. Neste momento, temos uma lista de alunos com capacidade para até 4 itens e um item adicionado. Agora vamos inserir mais 3 itens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;alunos.Add(new Aluno { Id = 2, Nome = "Ana" });
alunos.Add(new Aluno { Id = 3, Nome = "Cristiano" });
alunos.Add(new Aluno { Id = 4, Nome = "Maggie" });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste momento ainda temos uma lista com capacidade para até 4 itens e agora com 4 itens. Isso significa que estamos utilizando a capacidade máxima. Quando adicionarmos mais um item, a verificação para saber se a lista comporta mais um item vai retornar negativa. Para comportar mais itens, será criada uma nova lista com a capacidade duplicada da atual, que será 8. Os itens da lista atual serão copiados para a nova e aí sim será adicionado o quinto item, fazendo com que ainda sobre 3 posições. Essa lógica é repetida quantas vezes forem necessárias para comportar os itens que estamos adicionando e assim vamos criando listas com capacidade de 4, 8, 16, 32, 64, 128... E as listas antigas simplesmente são deixados para trás e ficam a cargo do Garbage Collector fazer a limpeza delas. Dependendo da quantidade, isso gera pressão desnecessária no GC afetando a performance da sua aplicação. Entenderam a importância de definirmos a capacidade? Para isso, basta usar o construtor com o parâmetro int:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List&amp;lt;Aluno&amp;gt; alunos = new List&amp;lt;Aluno&amp;gt;(500);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Usar a capacidade na inicialização da lista é uma abordagem extremamente simples mas muito útil ao lidar com grande quantidade dados. "Ah, mas e quando eu não sei quantos itens serão adicionados?" Aqui entra a importância de entendermos a volumetria da aplicação que estamos trabalhando. A ideia não é acertarmos a quantidade exata, mas termos uma noção para evitarmos pressão desnecessária no &lt;em&gt;Garbage Collector&lt;/em&gt;. Quer entender com mais detalhes como isso funciona no GC? Confira &lt;a href="https://dev.to/unhacked/como-um-parametro-simples-pode-economizar-memoria-36pp"&gt;aqui&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Referências
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1?view=net-7.0" rel="noopener noreferrer"&gt;&lt;code&gt;List&amp;lt;T&amp;gt;&lt;/code&gt; Class&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/dotnet/runtime/blob/main/src/libraries/System.Private.CoreLib/src/System/Collections/Generic/List.cs" rel="noopener noreferrer"&gt;Github - dotnet runtime&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A arte das coleções em .NET - Intro</title>
      <dc:creator>Thaise Medeiros</dc:creator>
      <pubDate>Tue, 11 Apr 2023 14:45:19 +0000</pubDate>
      <link>https://dev.to/unhacked/a-arte-das-colecoes-em-net-intro-j9a</link>
      <guid>https://dev.to/unhacked/a-arte-das-colecoes-em-net-intro-j9a</guid>
      <description>&lt;p&gt;Eu tenho estudado bastante sobre estrutura de dados e coleções em .NET. É incrível como entender o funcionamento e a aplicação de cada uma tem o poder de evoluir significativamente a qualidade do código que escrevemos. Por este motivo, decidi escrever uma série de artigos abordando as diferenças entre elas e quando utilizá-las.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que são coleções?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Dados semelhantes podem normalmente ser tratados com mais eficiência quando armazenados e manipulados como uma coleção."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Podemos encontrar as coleções na classe System.Array ou nas classes dentro dos &lt;em&gt;namespaces&lt;/em&gt;: System.Collections, System.Collections.Generic, System.Collections.Concurrent e System.Collections.Immutable. Utilizando-as, teremos acesso aos métodos para adicionar, remover e modificar os elementos contidos em uma coleção.&lt;/p&gt;

&lt;p&gt;Os dois tipos principais de coleções são as genéricas (System.Collections.Generic) e as não genéricas (System.Collections). A diferença entre elas é que as genéricas possibilitam criar coleções fortemente tipadas. Para exemplificar, imagine que tenhamos a classe Aluno conforme demonstrado abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class Aluno
{
    public long Id {get; set;}
    public string Nome {get; set;}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É possível criar uma coleção de alunos utilizando a nossa classe Aluno como tipo. Sendo assim, teríamos a possibilidade de manipular os itens sem a necessidade de conversão, afastando o tão temido &lt;em&gt;boxing/unboxing&lt;/em&gt; entre os tipos. Por este motivo, a Microsoft aconselha a utilização de coleções genéricas sempre que possível pois elas fornecem melhor desempenho e segurança de tipos. &lt;/p&gt;

&lt;p&gt;As coleções concorrentes (System.Collections.Concurrent) permitem operações &lt;em&gt;thread-safe&lt;/em&gt; eficientes quando temos acesso à coleção através de múltiplas &lt;em&gt;threads&lt;/em&gt; e as imutáveis (System.Collections.Immutable) também são &lt;em&gt;thread-safe&lt;/em&gt; e, como o nome diz, esta coleção não pode ser modificada: as operações são feitas em cima de uma cópia da coleção original. &lt;/p&gt;

&lt;p&gt;Para esta série, iremos focar nas coleções genéricas e não genéricas o que vai nos dar muito assunto! &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;As coleções muitas das vezes são tratadas como simples e não damos a devida importância aos tipos e onde se encaixam. Após essa introdução e apresentação sobre coleções no .NET, no próximo post falaremos sobre uma coleção que provavelmente todo mundo já ouviu falar e é muito utilizada: Lista.&lt;/p&gt;

&lt;h4&gt;
  
  
  Referências:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-us/dotnet/standard/collections/" rel="noopener noreferrer"&gt;Collections and Data Structures&lt;/a&gt;&lt;br&gt;
&lt;a href="https://learn.microsoft.com/en-us/dotnet/standard/collections/selecting-a-collection-class" rel="noopener noreferrer"&gt;Selecting a Collection Class&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>csharp</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
