<?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: rodrigozan</title>
    <description>The latest articles on DEV Community by rodrigozan (@rodrigozan).</description>
    <link>https://dev.to/rodrigozan</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%2F718940%2F652b00b1-3bcd-4961-b842-dddb7e715bb9.jpeg</url>
      <title>DEV Community: rodrigozan</title>
      <link>https://dev.to/rodrigozan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rodrigozan"/>
    <language>en</language>
    <item>
      <title>Como ler scripts SQL Server grandes com Python</title>
      <dc:creator>rodrigozan</dc:creator>
      <pubDate>Wed, 07 May 2025 11:00:00 +0000</pubDate>
      <link>https://dev.to/rodrigozan/como-ler-scripts-sql-server-grandes-com-python-3mhg</link>
      <guid>https://dev.to/rodrigozan/como-ler-scripts-sql-server-grandes-com-python-3mhg</guid>
      <description>&lt;p&gt;&lt;strong&gt;Como Criar um Script Python para Ler Scripts Grandes do SQL Server Gerados no SQL Management Studio&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Recentemente precisei trabalhar com alguns scripts grandes de SQL Server. Isso se mostrou um grande desafio, especialmente quando você precisa analisar ou manipular esses scripts automaticamente. &lt;/p&gt;

&lt;p&gt;A solução que encontrei foi usar um script Python para ler e processar esses arquivos. Isso facilitou o gerenciamento e a análise de dados de maneira eficiente. &lt;/p&gt;

&lt;p&gt;Neste artigo, vou compartilhar como criei um script Python que lê grandes arquivos SQL gerados pelo SQL Management Studio (SSMS).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Atenção:&lt;/strong&gt; se você ainda não tem o &lt;strong&gt;Python&lt;/strong&gt; instalado no seu computador, considere ler o artigo abaixo para instalá-lo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/rodrigozan/como-instalar-o-python-no-windows-linux-e-mac-3ceo"&gt;Como instalar o Python no Windows, Linux e Mac&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pré-requisitos
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.x&lt;/strong&gt; instalado em seu sistema.&lt;/li&gt;
&lt;li&gt;Conhecimento básico de Python e SQL Server.&lt;/li&gt;
&lt;li&gt;Ter o SQL Server Management Studio instalado, caso queira gerar scripts diretamente de lá.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Passo 1: Instalar as Bibliotecas Necessárias
&lt;/h3&gt;

&lt;p&gt;A primeira coisa que vamos precisar é de algumas bibliotecas Python. Para lidar com arquivos SQL e SQL Server de forma geral, você pode instalar bibliotecas como &lt;code&gt;pyodbc&lt;/code&gt; para conexão com o banco de dados e &lt;code&gt;os&lt;/code&gt; para manipulação de arquivos.&lt;/p&gt;

&lt;p&gt;Abra o terminal e instale o &lt;code&gt;pyodbc&lt;/code&gt; com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;pyodbc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Passo 2: Conectar ao SQL Server
&lt;/h3&gt;

&lt;p&gt;Se você deseja executar esses scripts diretamente no SQL Server, o &lt;code&gt;pyodbc&lt;/code&gt; será uma ótima opção. O código abaixo mostra como se conectar ao SQL Server utilizando &lt;code&gt;pyodbc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pyodbc&lt;/span&gt;

&lt;span class="c1"&gt;# Parâmetros de conexão
&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;localhost&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo seu servidor SQL
&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;master&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo nome do banco de dados
&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sa&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo seu nome de usuário
&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;senha&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pela sua senha
&lt;/span&gt;
&lt;span class="c1"&gt;# Conectar ao SQL Server
&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pyodbc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DRIVER={{ODBC Driver 17 for SQL Server}};SERVER=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;;DATABASE=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;;UID=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;;PWD=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Criar um cursor para executar comandos SQL
&lt;/span&gt;&lt;span class="n"&gt;cursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Passo 3: Ler o Script SQL do Arquivo
&lt;/h3&gt;

&lt;p&gt;Agora, vamos criar um script para ler um arquivo SQL grande gerado no SQL Server Management Studio. Usaremos a função &lt;code&gt;open()&lt;/code&gt; do Python para abrir o arquivo, ler seu conteúdo e armazená-lo em uma variável.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ler_arquivo_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;sql_script&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;sql_script&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A função &lt;code&gt;ler_arquivo_sql&lt;/code&gt; abre o arquivo SQL em modo leitura (&lt;code&gt;'r'&lt;/code&gt;), define o encoding como &lt;code&gt;utf-8&lt;/code&gt; (um padrão comum para evitar problemas com caracteres especiais) e lê todo o conteúdo com &lt;code&gt;file.read()&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 4: Executar o Script SQL no SQL Server
&lt;/h3&gt;

&lt;p&gt;Com o script carregado, agora podemos enviar o conteúdo para o SQL Server para execução. Você pode dividir o script SQL em comandos individuais, mas para fins deste exemplo, vamos executar o script inteiro de uma vez.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;executar_script_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Script executado com sucesso.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Erro ao executar o script: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O método &lt;code&gt;cursor.execute()&lt;/code&gt; envia o script SQL para o SQL Server. Se houver algum erro, ele será capturado pela exceção e uma mensagem de erro será exibida.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 5: Combinar Tudo em Um Script Python
&lt;/h3&gt;

&lt;p&gt;Agora, vamos combinar as partes anteriores em um único script Python que lê o arquivo SQL, conecta ao banco de dados, executa o script e exibe o resultado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pyodbc&lt;/span&gt;

&lt;span class="c1"&gt;# Função para ler o script SQL do arquivo
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ler_arquivo_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;sql_script&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;sql_script&lt;/span&gt;

&lt;span class="c1"&gt;# Função para executar o script SQL no SQL Server
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;executar_script_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Script executado com sucesso.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Erro ao executar o script: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Parâmetros de conexão com o SQL Server
&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;localhost&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo seu servidor SQL
&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;master&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo nome do banco de dados
&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sa&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo seu nome de usuário
&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;senha&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pela sua senha
&lt;/span&gt;
&lt;span class="c1"&gt;# Conectar ao SQL Server
&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pyodbc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DRIVER={{ODBC Driver 17 for SQL Server}};SERVER=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;;DATABASE=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;;UID=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;;PWD=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;cursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Caminho do arquivo SQL
&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;caminho/do/seu/script.sql&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo caminho do seu arquivo
&lt;/span&gt;
&lt;span class="c1"&gt;# Ler o script SQL
&lt;/span&gt;&lt;span class="n"&gt;sql_script&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ler_arquivo_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Executar o script SQL
&lt;/span&gt;&lt;span class="nf"&gt;executar_script_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Fechar a conexão
&lt;/span&gt;&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Passo 6: Rodando o Script
&lt;/h3&gt;

&lt;p&gt;Após criar seu script Python, basta executá-lo em seu terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python seu_script.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso irá carregar o script SQL do arquivo e executá-lo no SQL Server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dicas para Lidar com Arquivos SQL Grandes
&lt;/h3&gt;

&lt;p&gt;Erros são algo muito comum de acontecerem quando lidamos com scripts muito grandes. Recentemente tive que lidar com um arquivo que tinha mais de 130 mil linhas. Não rodava no SQL Server Management Studio de jeito nenhum. Por isso, tive que buscar alternativas para ler e executar as operações do script passo a passo.&lt;/p&gt;

&lt;p&gt;Vamos aprimorar o script que criamos para lidar com arquivos SQL grandes, adicionando de um sistema de monitoramento de erros:&lt;/p&gt;

&lt;h4&gt;
  
  
  Passo 1: Leitura em Blocos
&lt;/h4&gt;

&lt;p&gt;Em vez de carregar todo o arquivo de uma vez, vamos ler o arquivo em blocos menores. Isso economiza memória, especialmente se o script SQL for muito grande. Podemos usar &lt;code&gt;readline()&lt;/code&gt; ou &lt;code&gt;readlines()&lt;/code&gt;, como mencionei anteriormente.&lt;/p&gt;

&lt;h4&gt;
  
  
  Passo 2: Dividir o Script SQL
&lt;/h4&gt;

&lt;p&gt;Para lidar com múltiplos comandos SQL no mesmo arquivo, podemos dividir o conteúdo usando o delimitador &lt;code&gt;;&lt;/code&gt; (ponto e vírgula), que é usado para separar comandos SQL em um script.&lt;/p&gt;

&lt;h4&gt;
  
  
  Passo 3: Monitoramento de Erros
&lt;/h4&gt;

&lt;p&gt;Adicionar um sistema de logs que grava as mensagens de erro e sucesso, para que você possa acompanhar a execução do script.&lt;/p&gt;

&lt;h4&gt;
  
  
  Código Atualizado
&lt;/h4&gt;

&lt;p&gt;Com base no que comentei acima, vamos atualizar nosso programa Python.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pyodbc&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt;

&lt;span class="c1"&gt;# Configuração do Logger
&lt;/span&gt;&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;basicConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;executar_script.log&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;%(asctime)s - %(levelname)s - %(message)s&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;logger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getLogger&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Função para ler o script SQL em blocos menores
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ler_arquivo_sql_em_blocos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tamanho_bloco&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Lê o arquivo SQL em blocos menores para economizar memória.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;bloco&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tamanho_bloco&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;bloco&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;break&lt;/span&gt;
            &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="n"&gt;bloco&lt;/span&gt;  &lt;span class="c1"&gt;# Retorna um bloco de cada vez
&lt;/span&gt;
&lt;span class="c1"&gt;# Função para dividir o script SQL em instruções individuais
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dividir_script_em_comandos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Divide o script SQL em comandos separados por ponto e vírgula.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;comandos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;;&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;comando&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;comando&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;comandos&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;comando&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;  &lt;span class="c1"&gt;# Remove espaços e comandos vazios
&lt;/span&gt;
&lt;span class="c1"&gt;# Função para executar o script SQL no SQL Server
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;executar_script_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Executa um script SQL no SQL Server e captura erros.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Script executado com sucesso.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Erro ao executar o script: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Erro: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Função principal para rodar o script SQL
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;rodar_script_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Roda o script SQL dividido em blocos e comandos SQL separados.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="c1"&gt;# Parâmetros de conexão com o SQL Server
&lt;/span&gt;    &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;localhost&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo seu servidor SQL
&lt;/span&gt;    &lt;span class="n"&gt;database&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;master&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo nome do banco de dados
&lt;/span&gt;    &lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sa&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo seu nome de usuário
&lt;/span&gt;    &lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;senha&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pela sua senha
&lt;/span&gt;
    &lt;span class="c1"&gt;# Conectar ao SQL Server
&lt;/span&gt;    &lt;span class="n"&gt;conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pyodbc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DRIVER={{ODBC Driver 17 for SQL Server}};SERVER=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;;DATABASE=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;;UID=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;;PWD=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;cursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Inicializar o script SQL
&lt;/span&gt;    &lt;span class="n"&gt;sql_script&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;

    &lt;span class="c1"&gt;# Lê o arquivo SQL em blocos e armazena o conteúdo
&lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;bloco&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;ler_arquivo_sql_em_blocos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;sql_script&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;bloco&lt;/span&gt;

    &lt;span class="c1"&gt;# Dividir o script em comandos SQL separados
&lt;/span&gt;    &lt;span class="n"&gt;comandos_sql&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;dividir_script_em_comandos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Executar cada comando SQL
&lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;comando&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;comandos_sql&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;executar_script_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;comando&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Fechar a conexão
&lt;/span&gt;    &lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Caminho do arquivo SQL
&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;caminho/do/seu/script.sql&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo caminho do seu arquivo
&lt;/span&gt;
&lt;span class="c1"&gt;# Rodar o script SQL
&lt;/span&gt;&lt;span class="nf"&gt;rodar_script_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Explicações Detalhadas de Cada Dica Implementada:
&lt;/h4&gt;

&lt;h5&gt;
  
  
  1. &lt;strong&gt;Leitura em Blocos (Função &lt;code&gt;ler_arquivo_sql_em_blocos&lt;/code&gt;)&lt;/strong&gt;
&lt;/h5&gt;

&lt;p&gt;Essa função permite que o arquivo SQL seja lido em partes menores, o que é útil para economizar memória quando o arquivo é muito grande. A função &lt;code&gt;yield&lt;/code&gt; permite que o arquivo seja lido de forma eficiente, sem carregar todo o conteúdo na memória de uma vez.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tamanho do bloco:&lt;/strong&gt; O parâmetro &lt;code&gt;tamanho_bloco&lt;/code&gt; define quantos bytes serão lidos por vez. No exemplo, estamos usando 1024 bytes por vez, mas você pode ajustar conforme necessário.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso de &lt;code&gt;yield&lt;/code&gt;:&lt;/strong&gt; A palavra-chave &lt;code&gt;yield&lt;/code&gt; permite que a função retorne partes do arquivo à medida que são lidas, sem carregar todo o conteúdo de uma vez.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  2. &lt;strong&gt;Divisão do Script SQL em Comandos Individuais (Função &lt;code&gt;dividir_script_em_comandos&lt;/code&gt;)&lt;/strong&gt;
&lt;/h5&gt;

&lt;p&gt;Quando temos um script com múltiplos comandos SQL, podemos usar o delimitador &lt;code&gt;;&lt;/code&gt; para dividir o script em comandos individuais. Isso nos permite executar cada comando separadamente, o que pode ser útil para identificar e depurar falhas em partes específicas do script.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Função &lt;code&gt;split(';')&lt;/code&gt;:&lt;/strong&gt; A função divide o script completo em várias partes sempre que encontra um ponto e vírgula (&lt;code&gt;;&lt;/code&gt;), removendo espaços em branco antes e depois dos comandos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  3. &lt;strong&gt;Monitoramento de Erros (Uso do Logger)&lt;/strong&gt;
&lt;/h5&gt;

&lt;p&gt;Estamos usando o módulo &lt;code&gt;logging&lt;/code&gt; para monitorar a execução do script e gravar logs de erros e sucessos em um arquivo chamado &lt;code&gt;executar_script.log&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;logging.basicConfig()&lt;/code&gt;&lt;/strong&gt;: Configura o logger para escrever os logs em um arquivo com nível de log &lt;code&gt;INFO&lt;/code&gt; (para mensagens normais) e &lt;code&gt;ERROR&lt;/code&gt; (para erros).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;logger.info()&lt;/code&gt; e &lt;code&gt;logger.error()&lt;/code&gt;&lt;/strong&gt;: Usamos esses métodos para registrar as mensagens de sucesso e erro durante a execução dos comandos SQL.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  4. &lt;strong&gt;Execução do Script SQL (Função &lt;code&gt;executar_script_sql&lt;/code&gt;)&lt;/strong&gt;
&lt;/h5&gt;

&lt;p&gt;Agora, para cada comando SQL no arquivo, tentamos executá-lo com &lt;code&gt;cursor.execute()&lt;/code&gt;. Se ocorrer algum erro durante a execução de qualquer comando, ele será capturado pela exceção e registrado no log.&lt;/p&gt;

&lt;h4&gt;
  
  
  Passo 4: Rodando o Script
&lt;/h4&gt;

&lt;p&gt;Para rodar o script, basta chamar a função &lt;code&gt;rodar_script_sql(caminho_arquivo)&lt;/code&gt;, onde &lt;code&gt;caminho_arquivo&lt;/code&gt; é o caminho para o arquivo SQL. O Python irá ler o arquivo em blocos, dividir os comandos e executá-los um a um, registrando o sucesso ou falha de cada execução.&lt;/p&gt;




&lt;h3&gt;
  
  
  Teste e Logs
&lt;/h3&gt;

&lt;p&gt;Ao rodar o script, um arquivo &lt;code&gt;executar_script.log&lt;/code&gt; será criado, onde você poderá verificar as mensagens de sucesso e qualquer erro que ocorrer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2025-05-05 12:30:45,678 - INFO - Script executado com sucesso.
2025-05-05 12:32:05,123 - ERROR - Erro ao executar o script: [Microsoft][ODBC Driver 17 for SQL Server]A sintaxe SQL está incorreta.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esses logs irão ajudar a identificar rapidamente qual comando falhou, caso isso aconteça.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resumindo...
&lt;/h3&gt;

&lt;p&gt;Este script Python agora está otimizado para lidar com arquivos SQL grandes, dividindo o conteúdo em blocos menores e executando os comandos de forma eficiente. Além disso, o sistema de logs ajuda no monitoramento de erros e sucesso durante a execução, tornando o processo de automatização mais robusto e fácil de gerenciar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Eliminando linhas de comentários e comandos irrelevantes
&lt;/h3&gt;

&lt;p&gt;Ao exportar um banco de dados do SQL Server Management Studio, é comum que os scripts venham com comandos &lt;code&gt;GO&lt;/code&gt;, que é específico do SQL Server Management Studio e não deve ser executado diretamente como um comando SQL.&lt;/p&gt;

&lt;p&gt;Para validar isso, linhas vazias, e linha de comentários, vamos implementar algumas verificações dentro do nosso script.&lt;/p&gt;

&lt;h4&gt;
  
  
  Passos para implementar as validações
&lt;/h4&gt;

&lt;h5&gt;
  
  
  1. Ignorar Comentários (--): Podemos verificar se uma linha começa com -- (comentários no SQL Server) e ignorá-la.
&lt;/h5&gt;

&lt;h5&gt;
  
  
  2. Ignorar Linhas Vazias: Podemos verificar se a linha está vazia ou contém apenas espaços em branco e ignorá-la.
&lt;/h5&gt;

&lt;h5&gt;
  
  
  3. Ignorar o Comando "GO": O comando "GO" é usado no SQL Server para dividir batches de comandos, mas não é um comando SQL válido por si só. Devemos ignorá-lo ou usá-lo como um ponto de divisão para executar um bloco de SQL acumulado.
&lt;/h5&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pyodbc&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt;

&lt;span class="c1"&gt;# Configuração do Logger
&lt;/span&gt;&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;basicConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;executar_script.log&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;%(asctime)s - %(levelname)s - %(message)s&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;logger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getLogger&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Função para ler o script SQL em blocos menores
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ler_arquivo_sql_em_blocos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tamanho_bloco&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Lê o arquivo SQL em blocos menores para economizar memória.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;bloco&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tamanho_bloco&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;bloco&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;break&lt;/span&gt;
            &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="n"&gt;bloco&lt;/span&gt;  &lt;span class="c1"&gt;# Retorna um bloco de cada vez
&lt;/span&gt;
&lt;span class="c1"&gt;# Função para dividir o script SQL em comandos individuais, ignorando comentários e 'GO'
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dividir_script_em_comandos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Divide o script SQL em comandos separados, ignorando comentários e &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;GO&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;comandos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="n"&gt;sql_block&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;  &lt;span class="c1"&gt;# Acumula o SQL entre 'GO'
&lt;/span&gt;
    &lt;span class="c1"&gt;# Processa linha por linha
&lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;splitlines&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="n"&gt;clean_line&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="c1"&gt;# Ignora linhas vazias e comentários
&lt;/span&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;clean_line&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;clean_line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;

        &lt;span class="c1"&gt;# Verifica se é o comando 'GO' (ignorar)
&lt;/span&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;clean_line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GO&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;sql_block&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;comandos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sql_block&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
                &lt;span class="n"&gt;sql_block&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;  &lt;span class="c1"&gt;# Limpar o bloco
&lt;/span&gt;        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;sql_block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;clean_line&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Acumula linhas no bloco
&lt;/span&gt;
    &lt;span class="c1"&gt;# Se restar algum SQL no bloco, adiciona à lista de comandos
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;sql_block&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;comandos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sql_block&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;comandos&lt;/span&gt;

&lt;span class="c1"&gt;# Função para executar o script SQL no SQL Server
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;executar_script_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Executa um script SQL no SQL Server e captura erros.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;commit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Script executado com sucesso.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Erro ao executar o script: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Erro: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Função principal para rodar o script SQL
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;rodar_script_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Roda o script SQL dividido em blocos e comandos SQL separados.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="c1"&gt;# Parâmetros de conexão com o SQL Server
&lt;/span&gt;    &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;localhost&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo seu servidor SQL
&lt;/span&gt;    &lt;span class="n"&gt;database&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;master&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo nome do banco de dados
&lt;/span&gt;    &lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;sa&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo seu nome de usuário
&lt;/span&gt;    &lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;senha&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pela sua senha
&lt;/span&gt;
    &lt;span class="c1"&gt;# Conectar ao SQL Server
&lt;/span&gt;    &lt;span class="n"&gt;conn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pyodbc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DRIVER={{ODBC Driver 17 for SQL Server}};SERVER=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;;DATABASE=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;;UID=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;;PWD=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;cursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Inicializar o script SQL
&lt;/span&gt;    &lt;span class="n"&gt;sql_script&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;

    &lt;span class="c1"&gt;# Lê o arquivo SQL em blocos e armazena o conteúdo
&lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;bloco&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;ler_arquivo_sql_em_blocos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;sql_script&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;bloco&lt;/span&gt;

    &lt;span class="c1"&gt;# Dividir o script em comandos SQL separados, ignorando comentários, linhas vazias e 'GO'
&lt;/span&gt;    &lt;span class="n"&gt;comandos_sql&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;dividir_script_em_comandos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sql_script&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Executar cada comando SQL
&lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;comando&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;comandos_sql&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;executar_script_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;comando&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Fechar a conexão
&lt;/span&gt;    &lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Caminho do arquivo SQL
&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;caminho/do/seu/script.sql&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;  &lt;span class="c1"&gt;# Substitua pelo caminho do seu arquivo
&lt;/span&gt;
&lt;span class="c1"&gt;# Rodar o script SQL
&lt;/span&gt;&lt;span class="nf"&gt;rodar_script_sql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;caminho_arquivo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O script irá:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Ignorar os comentários (linhas começando com --).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ignorar o comando GO e tratá-lo como um ponto de divisão.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Executar os comandos SELECT e INSERT separadamente, como blocos distintos.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Neste tutorial, mostramos como criar um script Python que lê e executa scripts SQL grandes gerados pelo SQL Server Management Studio. Essa abordagem pode ser extremamente útil para automatizar o processo de execução de scripts no SQL Server, especialmente quando estamos lidando com arquivos grandes. &lt;/p&gt;

&lt;p&gt;Ao usar Python e bibliotecas como &lt;code&gt;pyodbc&lt;/code&gt;, você pode integrar o seu processo de desenvolvimento com a flexibilidade do Python, tornando a administração de banco de dados mais eficiente.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Como instalar o Python no Windows, Linux e Mac</title>
      <dc:creator>rodrigozan</dc:creator>
      <pubDate>Mon, 05 May 2025 12:31:26 +0000</pubDate>
      <link>https://dev.to/rodrigozan/como-instalar-o-python-no-windows-linux-e-mac-3ceo</link>
      <guid>https://dev.to/rodrigozan/como-instalar-o-python-no-windows-linux-e-mac-3ceo</guid>
      <description>&lt;p&gt;Você já pensou em criar um site, automatizar tarefas do dia a dia, programar um robô ou até desenvolver um sistema de inteligência artificial? Pois é, tudo isso é possível com uma linguagem poderosa e acessível: o &lt;strong&gt;Python&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Tenho usado muito o &lt;strong&gt;Python&lt;/strong&gt; e me surpreendido com sua versatilidade e poder para ajudar no meu dia a dia como programador. Minha única tristeza é não ter começado a utilizá-lo antes.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Python&lt;/strong&gt; é uma das linguagens de programação mais populares do mundo. Sei que você sabe disso. Ele é fácil de aprender, gratuito, de código aberto e está presente em diversas áreas como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Desenvolvimento web (com frameworks como Django e Flask)&lt;/li&gt;
&lt;li&gt;Análise de dados e ciência de dados&lt;/li&gt;
&lt;li&gt;Inteligência artificial e machine learning&lt;/li&gt;
&lt;li&gt;Automação de tarefas&lt;/li&gt;
&lt;li&gt;Criação de bots&lt;/li&gt;
&lt;li&gt;Jogos e aplicativos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Não importa se você é iniciante ou já experiente em programação, instalar o &lt;strong&gt;Python&lt;/strong&gt; é o primeiro passo para dar vida às automações e ideias incríveis. E o melhor: ele funciona em praticamente todos os sistemas operacionais. Neste guia, eu vou te mostrar como instalar o &lt;strong&gt;Python&lt;/strong&gt; no &lt;strong&gt;Windows&lt;/strong&gt;, &lt;strong&gt;Linux&lt;/strong&gt; e &lt;strong&gt;Mac&lt;/strong&gt;, de forma simples e direta.&lt;/p&gt;




&lt;h2&gt;
  
  
  Como instalar o &lt;strong&gt;Python&lt;/strong&gt; no Windows
&lt;/h2&gt;

&lt;p&gt;No &lt;strong&gt;Windows&lt;/strong&gt;, instalar o &lt;strong&gt;Python&lt;/strong&gt; é bem fácil. Siga o passo a passo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Acesse o site oficial: &lt;a href="https://www.python.org/downloads/" rel="noopener noreferrer"&gt;https://www.python.org/downloads/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Clique em &lt;strong&gt;"Download Python 3.x.x"&lt;/strong&gt; (o site detecta automaticamente a versão ideal).&lt;/li&gt;
&lt;li&gt;Execute o instalador baixado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Importante:&lt;/strong&gt; marque a opção &lt;strong&gt;"Add Python to PATH"&lt;/strong&gt; antes de clicar em “Install Now”.&lt;/li&gt;
&lt;li&gt;Aguarde a instalação.&lt;/li&gt;
&lt;li&gt;Abra o Prompt de Comando (cmd) e digite:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   python &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se aparecer algo como &lt;code&gt;Python 3.12.0&lt;/code&gt;, deu tudo certo!&lt;/p&gt;

&lt;p&gt;Agora você pode usar o &lt;strong&gt;IDLE&lt;/strong&gt; (editor padrão do Python) ou instalar o &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;VS Code&lt;/a&gt; para começar seus projetos.&lt;/p&gt;




&lt;h2&gt;
  
  
  Como instalar o &lt;strong&gt;Python&lt;/strong&gt; no Linux
&lt;/h2&gt;

&lt;p&gt;No &lt;strong&gt;Linux&lt;/strong&gt;, muitas distribuições já vêm com o &lt;strong&gt;Python&lt;/strong&gt; instalado. Para verificar, abra o terminal e digite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se o comando retornar a versão do Python, está tudo certo. Caso contrário, você pode instalar com o gerenciador de pacotes da sua distribuição.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ubuntu / Debian / Linux Mint
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;python3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Fedora
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;python3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Arch Linux / Manjaro
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois da instalação, confirme com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você também pode rodar o interpretador diretamente com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E começar a testar comandos, como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Olá, mundo!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Como instalar o &lt;strong&gt;Python&lt;/strong&gt; no Mac
&lt;/h2&gt;

&lt;p&gt;O macOS vem com o &lt;strong&gt;Python 2.x&lt;/strong&gt; instalado por padrão, mas a versão recomendada é o &lt;strong&gt;Python 3&lt;/strong&gt;. A melhor forma de instalar é usando o gerenciador de pacotes &lt;a href="https://brew.sh/" rel="noopener noreferrer"&gt;Homebrew&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Instalar o Homebrew (caso ainda não tenha)
&lt;/h3&gt;

&lt;p&gt;Abra o Terminal e digite:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/bin/bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Instalar o Python com o Homebrew
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Verificar a instalação
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso, o &lt;strong&gt;Python&lt;/strong&gt; está pronto para ser usado no seu Mac. Você pode abrir o terminal e digitar &lt;code&gt;python3&lt;/code&gt; para usar o interpretador interativo, ou instalar editores como o &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;VS Code&lt;/a&gt; e começar a programar de forma mais completa.&lt;/p&gt;




&lt;p&gt;Agora que você tem o &lt;strong&gt;Python&lt;/strong&gt; instalado no seu sistema, que tal começar com um projeto simples? Você pode automatizar o envio de e-mails, criar gráficos com dados do Excel, desenvolver um site pessoal ou até um bot para o Telegram.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>python</category>
      <category>beginners</category>
    </item>
    <item>
      <title>🛠️ Criando uma API Node.js com Express + CORS e consumindo com HTML + Bootstrap</title>
      <dc:creator>rodrigozan</dc:creator>
      <pubDate>Tue, 22 Apr 2025 14:31:01 +0000</pubDate>
      <link>https://dev.to/rodrigozan/criando-uma-api-nodejs-com-express-cors-e-consumindo-com-html-bootstrap-29io</link>
      <guid>https://dev.to/rodrigozan/criando-uma-api-nodejs-com-express-cors-e-consumindo-com-html-bootstrap-29io</guid>
      <description>&lt;p&gt;Neste artigo, vamos aprender a criar uma API básica em Node.js utilizando o framework Express e o middleware CORS. Em seguida, vamos consumir essa API em uma página HTML que permite realizar operações CRUD (Criar, Ler, Atualizar e Deletar) usando a Fetch API e o Bootstrap para estilização.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 O que é uma API?
&lt;/h2&gt;

&lt;p&gt;API significa Application Programming Interface (em português, Interface de Programação de Aplicações).&lt;/p&gt;

&lt;p&gt;Em resumo, uma API é um conjunto de regras que permite que dois sistemas diferentes "conversem" entre si.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 Uma explicação simples
&lt;/h3&gt;

&lt;p&gt;Pense na API como um garçom em um restaurante:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Você (cliente) olha o cardápio (interface).&lt;/li&gt;
&lt;li&gt;Faz um pedido (requisição).&lt;/li&gt;
&lt;li&gt;O garçom (API) leva seu pedido para a cozinha (o sistema).&lt;/li&gt;
&lt;li&gt;Depois, ele traz a comida pronta (resposta).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Você não precisa saber como a cozinha funciona, apenas como fazer o pedido certo. A API cuida do resto.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠 Em termos técnicos
&lt;/h3&gt;

&lt;p&gt;Uma API define rotas/endpoints e métodos (como GET, POST, PUT, DELETE) para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Buscar dados&lt;/li&gt;
&lt;li&gt;Criar dados&lt;/li&gt;
&lt;li&gt;Atualizar dados&lt;/li&gt;
&lt;li&gt;Deletar dados&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo de chamadas:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Método&lt;/th&gt;
&lt;th&gt;URL&lt;/th&gt;
&lt;th&gt;Ação&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;/api/items&lt;/td&gt;
&lt;td&gt;Pega todos os itens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;/api/items&lt;/td&gt;
&lt;td&gt;Cria um novo item&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUT&lt;/td&gt;
&lt;td&gt;/api/items/:id&lt;/td&gt;
&lt;td&gt;Atualiza um item&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DELETE&lt;/td&gt;
&lt;td&gt;/api/items/:id&lt;/td&gt;
&lt;td&gt;Deleta um item&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  📱 Exemplo do dia a dia
&lt;/h3&gt;

&lt;p&gt;Um site de clima pode usar uma API para buscar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Temperatura atual&lt;/li&gt;
&lt;li&gt;Previsão dos próximos dias&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Já um app de delivery pode usar várias APIs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Para mostrar restaurantes&lt;/li&gt;
&lt;li&gt;Para processar pagamentos&lt;/li&gt;
&lt;li&gt;Para rastrear entregas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🧑‍💻 Em Node.js, como veremos, criamos APIs com Express para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Criar servidores rápidos e leves&lt;/li&gt;
&lt;li&gt;Definir rotas e respostas&lt;/li&gt;
&lt;li&gt;Trabalhar com dados no formato JSON&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora que já entendemos o que é uma API, vamos parar de teoria e colocar a mão na massa.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧰 Configurando o Ambiente
&lt;/h2&gt;

&lt;p&gt;Primeiro, você precisa ter o Node.js instalado em sua máquina. Você pode baixá-lo aqui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/pt" rel="noopener noreferrer"&gt;Node.js Downloader&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depois de instalar o Node.js, criremos a estrutura da API.&lt;/p&gt;

&lt;h3&gt;
  
  
  📁 Estrutura da API
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crud-api/
├── server.js
├── package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Server.js
&lt;/h3&gt;

&lt;p&gt;O arquivo &lt;code&gt;server.js&lt;/code&gt; é o arquivo principal da aplicação. Nele fica o código do servidor Node.js, que geralmente usa o Express para criar rotas e endpoints da API.&lt;/p&gt;

&lt;p&gt;Ele é o ponto de entrada do projeto, ou seja, quando você roda node server.js, é esse arquivo que será executado.&lt;/p&gt;

&lt;h3&gt;
  
  
  Package.json
&lt;/h3&gt;

&lt;p&gt;Este arquivo é o coração do projeto Node.js. Ele contém:&lt;/p&gt;

&lt;p&gt;As informações do projeto (nome, versão, descrição, autor).&lt;/p&gt;

&lt;p&gt;A lista de dependências (como express, cors etc.).&lt;/p&gt;

&lt;p&gt;Scripts que você pode executar com npm run.&lt;/p&gt;

&lt;p&gt;Outras configurações para o projeto.&lt;/p&gt;

&lt;p&gt;Exemplo básico de &lt;code&gt;package.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"crud-api"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rodrigo Zandonadi"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"server.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node server.js"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.8.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"express"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.18.2"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Veremos um exemplo de criação do arquivo server.js abaixo.&lt;/p&gt;

&lt;h2&gt;
  
  
  1️⃣ Iniciando o projeto
&lt;/h2&gt;

&lt;p&gt;Vamos criar um novo diretório para o seu projeto e inicializar um novo projeto Node.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;crud-api
&lt;span class="nb"&gt;cd &lt;/span&gt;crud-api
npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O comando &lt;code&gt;npm init -y&lt;/code&gt; cria um arquivo &lt;code&gt;package.json&lt;/code&gt;, que é o &lt;strong&gt;start&lt;/strong&gt; de um projeto node.js.&lt;/p&gt;

&lt;h2&gt;
  
  
  2️⃣ Instalando Dependências
&lt;/h2&gt;

&lt;h3&gt;
  
  
  📦 O que são dependências em um projeto Node.js?
&lt;/h3&gt;

&lt;p&gt;As dependências são bibliotecas externas (ou pacotes) que seu projeto precisa para funcionar corretamente.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;p&gt;Se você quer criar um servidor web mais facilmente (que é o nosso caso), você usa o pacote &lt;code&gt;express&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Se você precisa permitir que sua API seja acessada de outros domínios, você usa &lt;code&gt;cors&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Se for conectar a um banco MongoDB, pode usar &lt;code&gt;mongoose&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Essas bibliotecas são instaladas via &lt;code&gt;npm&lt;/code&gt; (Node Package Manager), com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &amp;lt;nome-do-pacote&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instale as dependências necessárias: Express e CORS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;express cors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso prefira, você pode utilizar o &lt;code&gt;yarn&lt;/code&gt; para manipular as dependências. Para isso você precisa instalar o globalmente na sua máquina, com o comando &lt;code&gt;npm install --global yarn&lt;/code&gt;, e, em seguida, rodar no diretório da sua &lt;code&gt;API&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add express cors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  📁 Onde as dependências ficam?
&lt;/h3&gt;

&lt;p&gt;Elas são baixadas e salvas na pasta node_modules (automaticamente).&lt;/p&gt;

&lt;p&gt;Também são listadas no arquivo package.json, dentro da chave "dependencies":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"express"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.18.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.8.5"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  🛠 Exemplo prático
&lt;/h4&gt;

&lt;p&gt;Quando você instala algo assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;express cors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O package.json fica assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"express"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.18.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.8.5"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E no seu código (server.js), você pode usar assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cors&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;⚠️ Dica Importante&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A pasta node_modules não deve ser enviada para o Git. Por isso, você geralmente inclui ela no arquivo .gitignore.&lt;/p&gt;

&lt;p&gt;É só criar um arquivo &lt;code&gt;.gitignore&lt;/code&gt; e adicionar &lt;code&gt;node_modules&lt;/code&gt; nele.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node_modules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3️⃣ Criando a Estrutura da API
&lt;/h2&gt;

&lt;p&gt;Crie um arquivo chamado server.js e adicione o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// insere o módulo do express na variável express&lt;/span&gt;


&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Cria uma instância do servidor Express.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Define a porta do seu computador onde o servidor vai rodar. No caso, a porta 3000 é usada por __default__ (padrão) ao trabalhar com Node.js&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Permite que o Express entenda requisições com body em formato JSON (como em POST e PUT).&lt;/span&gt;

&lt;span class="c1"&gt;// O código abaixo inicia o servidor na porta 3000.&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Servidor rodando em http://localhost:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Abaixo temos o código completo do &lt;code&gt;server.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cors&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

&lt;span class="c1"&gt;// Criar um item&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/items&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Ler todos os itens&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/items&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Atualizar um item&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/items/:id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;updatedItem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;updatedItem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedItem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Deletar um item&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/items/:id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;splice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;204&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Servidor rodando em http://localhost:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora vou explicar passo a passo esse arquivo.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  🔌 1. Importando bibliotecas
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cors&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;express&lt;/code&gt;: Framework que simplifica a criação de servidores HTTP com Node.js.&lt;br&gt;
&lt;code&gt;cors&lt;/code&gt;: Middleware que habilita o CORS (Cross-Origin Resource Sharing), permitindo que seu servidor aceite requisições de diferentes origens (por exemplo, de um frontend rodando em outro domínio).&lt;/p&gt;
&lt;h3&gt;
  
  
  🚀 2. Inicializando o app
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;code&gt;app&lt;/code&gt;: Cria uma instância do servidor Express.&lt;br&gt;
&lt;code&gt;PORT&lt;/code&gt;: Define a porta onde o servidor vai rodar.&lt;/p&gt;
&lt;h3&gt;
  
  
  ⚙️ 3. Middlewares globais
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;code&gt;app.use(cors())&lt;/code&gt;: Permite que qualquer domínio acesse a API (útil para consumir com o frontend).&lt;br&gt;
&lt;code&gt;app.use(express.json())&lt;/code&gt;: Permite que o Express entenda requisições com body em formato JSON (como em POST e PUT).&lt;/p&gt;
&lt;h3&gt;
  
  
  📦 4. Base de dados simulada
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Simula um "banco de dados em memória" com um array de objetos.&lt;/p&gt;

&lt;p&gt;Os dados serão perdidos ao reiniciar o servidor (útil para testes simples).&lt;/p&gt;
&lt;h3&gt;
  
  
  📩 5. Criar um item (POST)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/items&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Rota &lt;code&gt;POST /api/items&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Lê os dados do corpo da requisição (req.body), adiciona ao array items, e retorna o item criado com status 201 (Created).&lt;/p&gt;
&lt;h3&gt;
  
  
  📥 6. Ler todos os itens (GET)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/items&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Rota &lt;code&gt;GET /api/items&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Retorna todos os itens do array items como JSON.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✏️ 7. Atualizar um item (PUT)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/items/:id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;updatedItem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;updatedItem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;updatedItem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Rota &lt;code&gt;PUT /api/items/:id&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Atualiza um item com o índice (id) informado na URL, substituindo pelo novo conteúdo do req.body.&lt;/p&gt;

&lt;p&gt;⚠️ Aqui o id é o índice do array (não um ID único real). Cuidado com isso em projetos reais!&lt;/p&gt;
&lt;h3&gt;
  
  
  🗑️ 8. Deletar um item (DELETE)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/items/:id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;splice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;204&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Rota &lt;code&gt;DELETE /api/items/:id&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Remove o item com índice id do array.&lt;/p&gt;

&lt;p&gt;Retorna status 204 (No Content) para indicar que foi deletado com sucesso.&lt;/p&gt;
&lt;h3&gt;
  
  
  🔊 9. Iniciando o servidor
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Servidor rodando em http://localhost:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Inicia o servidor na porta 3000.&lt;/p&gt;

&lt;p&gt;Exibe uma mensagem no console para indicar que o servidor está ativo.&lt;/p&gt;
&lt;h2&gt;
  
  
  4️⃣ Testando a API
&lt;/h2&gt;

&lt;p&gt;Inicie o servidor com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node server.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou crie um script no package.json na seção scripts, acima de dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node server.js"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"express"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.18.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.8.5"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Então, rode o script no terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se quiser testar os endpoints separadamente, use ferramentas como &lt;a href="https://insomnia.rest/" rel="noopener noreferrer"&gt;Insomnia &lt;/a&gt;ou &lt;a href="https://www.postman.com/" rel="noopener noreferrer"&gt;Postman&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Agora, você pode fazer requisições para &lt;code&gt;http://localhost:3000/api/items&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Se você não souber como fazer esse passo, fique tranquilo. Faremos os testes após criar a página HTML direto no navegador.&lt;/p&gt;

&lt;h2&gt;
  
  
  5️⃣ Criando a Página HTML
&lt;/h2&gt;

&lt;p&gt;Crie uma página HTML dentro de um projeto frontend para consumir os dados de sua API:&lt;/p&gt;

&lt;h3&gt;
  
  
  📁 Estrutura da API
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crud-frontend/
├── index.html
├── assets/css/styles.css &lt;span class="o"&gt;(&lt;/span&gt;opicional&lt;span class="o"&gt;)&lt;/span&gt;
├── assets/js/scripts.css &lt;span class="o"&gt;(&lt;/span&gt;opicional&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Crie um arquivo chamado index.html e adicione o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"pt-BR"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;CRUD com API&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"mt-5"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;CRUD com API&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"itemForm"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"mt-3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"itemInput"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Digite um item"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary mt-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Adicionar Item&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"itemList"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"list-group mt-3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;itemForm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;itemInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;itemInput&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;itemList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;itemList&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchItems&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:3000/api/items&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="nx"&gt;itemList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;li&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;li&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="nx"&gt;li&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;className&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;list-group-item d-flex justify-content-between align-items-center&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nx"&gt;li&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nx"&gt;li&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;createDeleteButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
                &lt;span class="nx"&gt;itemList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;li&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;

        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;createDeleteButton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;className&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;btn btn-danger btn-sm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Deletar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onclick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`http://localhost:3000/api/items/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;DELETE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
                &lt;span class="nf"&gt;fetchItems&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;

        &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onsubmit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;itemInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:3000/api/items&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="p"&gt;});&lt;/span&gt;
            &lt;span class="nx"&gt;itemInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nf"&gt;fetchItems&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;

        &lt;span class="nf"&gt;fetchItems&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6️⃣ Testando a Aplicação
&lt;/h2&gt;

&lt;p&gt;Abra o arquivo index.html em um navegador. Você deve ver um formulário onde pode adicionar itens. Os itens adicionados aparecerão em uma lista abaixo, e você poderá deletá-los.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recaptilando
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Baixe o Node.js&lt;/li&gt;
&lt;li&gt;Crie um diretório para a api&lt;/li&gt;
&lt;li&gt;Baixe as dependências&lt;/li&gt;
&lt;li&gt;Crie o arquivo da API&lt;/li&gt;
&lt;li&gt;Teste a API&lt;/li&gt;
&lt;li&gt;Crie o projeto HTML&lt;/li&gt;
&lt;li&gt;Crie a página HTML&lt;/li&gt;
&lt;li&gt;Abra a página html em um navegador&lt;/li&gt;
&lt;li&gt;Teste a API através da página HTML&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Neste artigo, você aprendeu a criar uma API básica em Node.js usando Express e CORS, além de consumir essa API em uma página HTML com operações CRUD. Essa é uma base sólida para desenvolver aplicações mais complexas. &lt;/p&gt;

&lt;p&gt;Sinta-se à vontade para expandir essa aplicação, adicionando funcionalidades como edição de itens ou persistência em um banco de dados.&lt;/p&gt;

&lt;p&gt;Se quiser se aprofundar na criação de APIs com Node.js utilizando um banoc de dados não-relacional bem poderoso, recomendo a leitura do artigo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/rodrigozan/como-criar-uma-api-com-nodejs-e-mongodb-usando-es6-ja5"&gt;Como criar uma API com Node.js e MongoDB usando ES6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E se tiver alguma dúvida, é só comentar que ajudo no que conseguir.&lt;/p&gt;

</description>
      <category>node</category>
      <category>api</category>
      <category>bootstrap</category>
      <category>programming</category>
    </item>
    <item>
      <title>Como instalar e configurar o Bootstrap no Angular</title>
      <dc:creator>rodrigozan</dc:creator>
      <pubDate>Thu, 03 Apr 2025 18:36:58 +0000</pubDate>
      <link>https://dev.to/rodrigozan/como-instalar-e-configurar-o-bootstrap-no-angular-20fe</link>
      <guid>https://dev.to/rodrigozan/como-instalar-e-configurar-o-bootstrap-no-angular-20fe</guid>
      <description>&lt;p&gt;Se você está desenvolvendo uma aplicação web moderna com &lt;strong&gt;Angular&lt;/strong&gt;, provavelmente vai querer adicionar um framework de CSS robusto para acelerar o design e garantir responsividade. É aí que entra o &lt;strong&gt;Bootstrap&lt;/strong&gt;, uma das bibliotecas front-end mais populares do mundo. Ele oferece uma ampla variedade de componentes prontos, como botões, formulários, grids e muito mais, todos otimizados para funcionar bem em dispositivos móveis.&lt;/p&gt;

&lt;p&gt;Integrar o &lt;strong&gt;Bootstrap&lt;/strong&gt; ao &lt;strong&gt;Angular&lt;/strong&gt; pode parecer complicado à primeira vista, especialmente por conta da estrutura modular do Angular. Mas, na prática, o processo é direto e leva apenas alguns minutos com os comandos certos. O importante é entender a diferença entre instalar apenas o CSS do &lt;strong&gt;Bootstrap&lt;/strong&gt; e integrar também os scripts JavaScript, o que exige um pouco mais de configuração.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/rodrigozan/guia-para-instalar-o-bootstrap-em-um-aplicativo-react-36b"&gt;Guia para Instalar o Bootstrap em um Aplicativo React&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neste artigo, vou te mostrar passo a passo como instalar e configurar o &lt;strong&gt;Bootstrap&lt;/strong&gt; corretamente em um projeto Angular, garantindo que tudo funcione como esperado, tanto visualmente quanto funcionalmente. Vamos lá?&lt;/p&gt;

&lt;h2&gt;
  
  
  Passo 1: Criando o projeto Angular (caso ainda não tenha)
&lt;/h2&gt;

&lt;p&gt;Se você ainda não criou seu projeto Angular, basta usar o Angular CLI para iniciar um novo. No terminal, execute o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng new meu-projeto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Durante a criação, o CLI pode perguntar se você deseja adicionar o &lt;em&gt;routing&lt;/em&gt; e qual formato de CSS deseja usar (SCSS, Less, etc.). Responda conforme sua preferência. Depois de criado, navegue até o diretório do projeto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;meu-projeto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora sim, podemos começar a instalação do &lt;strong&gt;Bootstrap&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;E se você quer aprender a trabalhar com Angular do zero, seguindo um passo a passo didático que te economizará tempo e pesquisa em fóruns e no ChatGPT, te recomendo o &lt;a href="https://go.hotmart.com/B99035164R" rel="noopener noreferrer"&gt;Curso Angular Completo da Danki Code&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Passo 2: Instalando o Bootstrap via NPM
&lt;/h2&gt;

&lt;p&gt;Com o projeto Angular já criado e aberto, você pode instalar o &lt;strong&gt;Bootstrap&lt;/strong&gt; com o seguinte comando NPM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;bootstrap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse comando adiciona o &lt;strong&gt;Bootstrap&lt;/strong&gt; à pasta &lt;code&gt;node_modules&lt;/code&gt; do seu projeto. &lt;/p&gt;

&lt;p&gt;Agora que o &lt;strong&gt;Bootstrap&lt;/strong&gt; está instalado, precisamos garantir que o Angular reconheça os arquivos de estilo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passo 3: Importando o Bootstrap no angular.json
&lt;/h2&gt;

&lt;p&gt;Para que o CSS do &lt;strong&gt;Bootstrap&lt;/strong&gt; seja aplicado à sua aplicação, você deve adicioná-lo ao arquivo &lt;code&gt;angular.json&lt;/code&gt;. Localize a seção &lt;code&gt;"styles"&lt;/code&gt; e adicione o caminho para o CSS do Bootstrap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"styles"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"node_modules/bootstrap/dist/css/bootstrap.min.css"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"src/styles.css"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se quiser também os scripts JavaScript do Bootstrap (necessários para &lt;em&gt;modals&lt;/em&gt;, &lt;em&gt;dropdowns&lt;/em&gt;, &lt;em&gt;carousels&lt;/em&gt;, etc.), adicione também na seção &lt;code&gt;"scripts"&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois disso, salve o arquivo e reinicie o servidor de desenvolvimento com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora, ao abrir seu navegador, você já poderá ver os estilos do &lt;strong&gt;Bootstrap&lt;/strong&gt; aplicados ao seu projeto Angular.&lt;/p&gt;

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

&lt;p&gt;Adicionar o &lt;strong&gt;Bootstrap&lt;/strong&gt; ao Angular é uma maneira inteligente de acelerar o desenvolvimento da interface e garantir uma boa experiência do usuário desde os primeiros protótipos. Com apenas alguns comandos e configurações no &lt;code&gt;angular.json&lt;/code&gt;, é possível usar os estilos e componentes do &lt;strong&gt;Bootstrap&lt;/strong&gt; em conjunto com a estrutura poderosa do Angular.&lt;/p&gt;

&lt;p&gt;Para saber quais estilos do &lt;strong&gt;Bootstrap&lt;/strong&gt; você pode usar no seu projeto, acesse a &lt;a href="https://getbootstrap.com/" rel="noopener noreferrer"&gt;documentação&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Lembre-se de que, apesar do &lt;strong&gt;Bootstrap&lt;/strong&gt; ser uma ferramenta excelente, é importante manter a personalização e identidade visual da sua aplicação. Use os componentes como base, mas não tenha medo de criar seus próprios estilos quando necessário.&lt;/p&gt;

&lt;p&gt;Desenvolver componentes reutilizáveis em seu projeto torna seu código mais limpo e facilita a manutenção.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Reduzindo a redundância do arquivo de rotas - Node.js, ES6 e TypeScript</title>
      <dc:creator>rodrigozan</dc:creator>
      <pubDate>Fri, 26 Jul 2024 11:20:41 +0000</pubDate>
      <link>https://dev.to/rodrigozan/reduzindo-a-redundancia-do-arquivo-de-rotas-nodejs-es6-e-typescript-5cm0</link>
      <guid>https://dev.to/rodrigozan/reduzindo-a-redundancia-do-arquivo-de-rotas-nodejs-es6-e-typescript-5cm0</guid>
      <description>&lt;p&gt;Essa dica simples e rápica te ajudará a reduzir a redundância do seu arquivo de rotas usado no &lt;strong&gt;Node.js&lt;/strong&gt; com &lt;strong&gt;ES6 **e **TypeScript&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Quando me toquei disso eu quase caí para trás.&lt;/p&gt;

&lt;p&gt;Fala galera, tudo tranquilo? Rod Zandonadi na área. E hoje eu quero falar sobre rotas. Antes de ler esse artigo, fique atento que estou trabalhando com &lt;em&gt;&lt;strong&gt;node.js&lt;/strong&gt;&lt;/em&gt; e &lt;strong&gt;&lt;em&gt;typescript&lt;/em&gt;&lt;/strong&gt;. Porém, como você vai reparar nos códigos abaixo, essa implementação não depende de tipagem. Nesse caso, se você estiver usando ES6 &lt;em&gt;sem &lt;strong&gt;typescript&lt;/strong&gt;&lt;/em&gt;, essa solução vai funcionar muito bem&lt;/p&gt;

&lt;p&gt;Meu código, apesar de limpo, estava redundante e gerando uma alta manutenibilidade. Ou seja: toda vez que eu precisava criar uma nova rota, precisava atualizar esse arquivo.&lt;/p&gt;

&lt;p&gt;Esse e o formato que meu &lt;em&gt;router.ts&lt;/em&gt; estava anteriormente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Router&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./routes/UserRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;auth&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./routes/AuthRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;changePassword&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./routes/ChangePasswordRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./routes/PostRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;scales&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./routes/ScalesRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;songs&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./routes/SoungRotes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;changePassword&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scales&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;songs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cada solicitação tinha seu próprio arquivo de rotas no diretório &lt;em&gt;routes&lt;/em&gt;. O objetivo do &lt;em&gt;router.ts&lt;/em&gt; é centralizar essas rotas e enviá-las ao app.ts, onde eu seto a rota &lt;em&gt;'/api'&lt;/em&gt; para que todas elas fiquem filhas dessa rota principal.&lt;/p&gt;

&lt;p&gt;Agora, se eu uso o mesmo diretório para todas as rotas, porque raios estou quebrando a cabeça atualizando o arquivo routes.ts o tempo todo?&lt;/p&gt;

&lt;p&gt;Olha só o estado que meu &lt;em&gt;router.ts&lt;/em&gt; está, depois de analisar e pesquisar formas de otimizá-lo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redundância: Os imports de rotas individuais repetem-se e ocupam espaço desnecessário.&lt;/li&gt;
&lt;li&gt;Manutenibilidade: Adicionar novas rotas exige modificação constante do arquivo.&lt;/li&gt;
&lt;li&gt;Princípio DRY (Don't Repeat Yourself): O código atual repete o padrão de importação e uso de rotas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mas vamos parar de enrolação e vamos melhorar esse trem. Afinal, trabalhar com &lt;strong&gt;Node.js&lt;/strong&gt; e &lt;strong&gt;ES6&lt;/strong&gt; (sem esquecer do &lt;strong&gt;TypeScript&lt;/strong&gt;) tem inumeras vantagens&lt;/p&gt;

&lt;p&gt;Comecemos com a importação. No lugar de importar toooodas as rotas da &lt;em&gt;api&lt;/em&gt; (e, convenhamos, dependendo do projeto, como esse meu que só cresce, o número de rotas cresce de forma devastadora), vamos usar &lt;code&gt;import * as&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Router&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;routes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./routes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Legal, mas como fazemos com o resto do código?&lt;/p&gt;

&lt;p&gt;Vamos criar um array com todos os valores do objeto routes. No caso, routes é um objeto que contém todas as rotas importadas. Então é só exportar routes para o app.ts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;route&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;route&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado é um arquivo de rotas com código limpo, organizado e de 0 (eu disse zero) manutenção.&lt;/p&gt;

&lt;p&gt;Segue o código completo do nosso arquivo de rotas da nossa API &lt;strong&gt;Node.js&lt;/strong&gt; com &lt;strong&gt;ES6&lt;/strong&gt; e &lt;strong&gt;TypeScript&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Router&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;routes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./routes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;route&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;route&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;router&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Atenção:&lt;/strong&gt; para isso funcionar, é necessário a criação de mais um arquivo. Um &lt;em&gt;index.ts&lt;/em&gt; no diretório de rotas.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Pô cara, fez eu ler até aqui pra dizer que tem que fazer outro arquivo?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Calma, pequeno padawan. &lt;/p&gt;

&lt;p&gt;Este arquivo apenas exportará os modulos de rotas da nossa aplicação. Se tiver que criar uma nova rota, é só exportar nele e pronto.&lt;/p&gt;

&lt;p&gt;Saca só:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./UserRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;auth&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./AuthRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;changePassword&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./ChangePasswordRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./PostRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;scales&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./ScalesRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;songs&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./SoungRotes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Viu, cabra apressado? Código limpo e de fácil manutenção. &lt;/p&gt;

&lt;p&gt;Se eu quiser adicionar uma nova rota, no exemplo da minha aplicação, &lt;em&gt;ministers&lt;/em&gt;, basta vir a esse arquivo e acrescentar a exportação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./UserRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;auth&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./AuthRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;changePassword&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./ChangePasswordRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;post&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./PostRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;scales&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./ScalesRoutes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;songs&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./SoungRotes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="cm"&gt;/* New rote ministers */&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;ministers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./MinistersRotes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É isso povo bonito. Otimização de código nas rotas de uma API desenvolvida em &lt;strong&gt;Node.js&lt;/strong&gt;, &lt;strong&gt;ES6&lt;/strong&gt; e &lt;strong&gt;TypeScript&lt;/strong&gt; (lembrando que essa otimização, o &lt;strong&gt;TypeScript&lt;/strong&gt; é opcional, mas não funciona com &lt;em&gt;Common Modules&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Curtiu? Se sim, deixa um comentário aí, filho de Deus.&lt;/p&gt;

&lt;p&gt;Abração galera! Até a próxima!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Python para Desenvolvedores JavaScript: Iniciando uma Nova Jornada</title>
      <dc:creator>rodrigozan</dc:creator>
      <pubDate>Tue, 14 Nov 2023 12:22:08 +0000</pubDate>
      <link>https://dev.to/rodrigozan/aprendendo-python-parte-1-4lo9</link>
      <guid>https://dev.to/rodrigozan/aprendendo-python-parte-1-4lo9</guid>
      <description>&lt;p&gt;Aprender uma nova linguagem de programação é uma aventura repleta de desafios e descobertas. Após anos imerso no universo do JavaScript, decidi expandir meus horizontes e embarcar na jornada de desvendar os mistérios do Python.&lt;/p&gt;

&lt;p&gt;Este artigo é o primeiro de uma série onde compartilharei, de forma transparente e sincera, cada passo dessa transição, desde as dificuldades enfrentadas até as conquistas alcançadas. Se você, assim como eu, está considerando aprender Python ou simplesmente tem curiosidade sobre como é migrar de uma linguagem para outra, convido-o a acompanhar esta experiência. Juntos, exploraremos as nuances do Python sob a perspectiva de um desenvolvedor acostumado ao ecossistema JavaScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Porque Python
&lt;/h2&gt;

&lt;p&gt;Eu sempre quis aprender Python. Já vi alguma coisa na faculdade, mas nada interessante. Só a lógica básica mesmo, o que vou reproduzir neste artigo. Além de ser uma linguagem popular atualmente, com ela posso investir em outra área que tenho olhado há algum tempo: data science. &lt;/p&gt;

&lt;p&gt;E, como disse atualmente, Python está no auge. Nesse ano (2023) ela está em segundo lugar nas linguagens mais populares do Github, atrás apenas do JavaScript.&lt;/p&gt;

&lt;p&gt;Por isso, bora aprender esse trem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sobre a Python
&lt;/h2&gt;

&lt;p&gt;Sempre considerei interessante contextualizar um pouco o conhecimento. Acho legal saber como as coisas surgiram e etc. Se você não gosta, só pular para as explicações iniciais, na seção &lt;strong&gt;Primeiros passos com Python&lt;/strong&gt;, mais abaixo.&lt;/p&gt;

&lt;p&gt;A linguagem Python foi criada por Guido van Rossum, e teve seu primeiro lançamento em 1991. O Python se tornou tão popular porque, além de ser usada para desenvolvimento web, também é usada para scrpits de sistema, desenvolvimento de software e matemática. &lt;/p&gt;

&lt;h3&gt;
  
  
  Vantagens de utilizar a Python:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;como no Node.js, você pode criar um servidor para criar aplicações;&lt;/li&gt;
&lt;li&gt;conexão com bancos de dados, criando e modificando arquivos;&lt;/li&gt;
&lt;li&gt;pode ser usado para lidar com big data e realizar matemática complexa;&lt;/li&gt;
&lt;li&gt;para prototipagem rápida ou para desenvolvimento de software pronto para produção.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Motivos para utilizar a Python
&lt;/h3&gt;

&lt;p&gt;Python é uma linguagem de programação versátil e amplamente utilizada, conhecida por sua compatibilidade com diversas plataformas, incluindo Windows, Mac, Linux e Raspberry Pi. Essa característica torna Python uma escolha ideal para desenvolvedores que trabalham em ambientes de computação variados. Além disso, Python se destaca por sua sintaxe simples e intuitiva, que se assemelha à língua inglesa. Essa simplicidade facilita o aprendizado e a leitura do código, tornando Python uma opção popular tanto para programadores iniciantes quanto para os mais experientes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/rodrigozan/mongodb-descomplicado-o-guia-definitivo-para-iniciantes-em-mongodb-4o5"&gt;MongoDB Descomplicado: O Guia Definitivo para Iniciantes em MongoDB&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outro aspecto notável do Python é sua eficiência em termos de escrita de código. Os desenvolvedores podem expressar conceitos complexos em menos linhas de código em comparação com outras linguagens de programação, o que aumenta a produtividade e reduz o tempo necessário para o desenvolvimento de software. Python opera em um sistema de interpretação, permitindo que o código seja executado imediatamente após ser escrito. Isso facilita a prototipagem rápida, um recurso valioso em ambientes de desenvolvimento ágil. Além disso, Python é extremamente flexível, suportando programação procedural, orientada a objetos e funcional, o que permite aos desenvolvedores escolher a abordagem mais adequada para cada projeto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sobre tipagem
&lt;/h2&gt;

&lt;p&gt;Para a galera que fica na dúvida sobre a tipagem do Python...&lt;/p&gt;

&lt;p&gt;A linguagem Python é frequentemente descrita como uma linguagem de tipagem dinâmica. Porém, é importante esclarecer que ela também é fortemente tipada. &lt;/p&gt;

&lt;p&gt;Certo, confundiu tudo aqui, imagino.&lt;/p&gt;

&lt;p&gt;Vamos melhorar essa resposta.&lt;/p&gt;

&lt;p&gt;Isso significa que, embora Python não exija que você declare explicitamente os tipos de dados das variáveis no momento da sua criação (uma característica da tipagem dinâmica), ela não permite operações que são incompatíveis com os tipos de dados envolvidos, o que é uma característica de linguagens fortemente tipadas.&lt;/p&gt;

&lt;p&gt;Por exemplo, em Python, você não pode concatenar diretamente uma string e um número sem uma conversão explícita, pois são tipos de dados diferentes. Isso demonstra a natureza de tipagem forte da linguagem, onde o tipo de cada valor é importante e é mantido de forma rigorosa durante a execução do programa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primeiros passos com Python
&lt;/h2&gt;

&lt;p&gt;Agora que estamos devidamente contextualizados, vamos codar. Caso você não queira baixar a linguagem na sua máquina, pode seguir esse básico tutorial utilizando o Docker ou o site &lt;a href="https://www.online-python.com/" rel="noopener noreferrer"&gt;Online Python&lt;/a&gt;, onde é possível rodar código da linguagem direto no navegador.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rodando Python no Docker
&lt;/h3&gt;

&lt;p&gt;Para utilizar Python no Docker, rode o comando &lt;code&gt;docker run -it --name estudos-de-python -vC:\\endereço-da-pasta-onde-estarão-seus-arquivos:/app -p8080 python&lt;/code&gt;. Troque &lt;em&gt;C:\endereço-da-pasta-onde-estarão-seus-arquivos&lt;/em&gt; pelo caminho da sua máquina onde você quer salvar seus arquivos python. A escolha da porta é de preferência pessoal. Ah sim! &lt;em&gt;estudos-de-python&lt;/em&gt; é uma sugestão de nome para seu container docker. Fique a vontade para escolher o nome que quiser.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hello World
&lt;/h3&gt;

&lt;p&gt;Só para seguir a convenção mundial, vamos criar o famoso &lt;em&gt;hello world&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Dentro do seu ambiente Python, crie o arquivo &lt;em&gt;hello-world.py&lt;/em&gt; (&lt;em&gt;py&lt;/em&gt; é a extensão usada para arquivos &lt;strong&gt;Python&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;No arquivo &lt;em&gt;hello-world.py&lt;/em&gt;, vamos printar o texto Hello World_ usando o método &lt;em&gt;print&lt;/em&gt;, do &lt;strong&gt;Python&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Hello World&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se você rodar o comando python &lt;em&gt;hello-world.py&lt;/em&gt;, verá escrito no terminal a string &lt;em&gt;Hello World&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Variáveis
&lt;/h3&gt;

&lt;p&gt;Vamos melhorar nosso código, adicionando o texto &lt;em&gt;Hello World&lt;/em&gt; à uma variável do tipo &lt;em&gt;String&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Se você prestou atenção no texto introdutório, já sabe que não declaramos o tipo da variável em sua criação. Também não temos uma palavra reservada, como &lt;em&gt;var&lt;/em&gt; ou &lt;em&gt;const&lt;/em&gt; para declarar que aquele dado é uma variável. Precisamos apenas escrever o nome da variável e atribuir a ela o devido valor. &lt;/p&gt;

&lt;p&gt;No nosso exemplo, podemos escrever:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Hello World&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para melhorar a legibilidade do código, podemos mudar o nome da variável, declarando qual a sua intenção, e comentar o código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# usamos # (hashtag, jogo da velha, sustenido...) para criar comentários em Python
&lt;/span&gt;&lt;span class="n"&gt;welcome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Hello World&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;# a variável welcome deixa claro que o texto se trata de uma mensagem de boas vindas
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;welcome&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# a função print imprime no terminal a mensagem atribuída à variável welcome
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Operadores
&lt;/h3&gt;

&lt;p&gt;Como todas as linguagens, a Python possui operadores que facilitam (e muito) o desenvolvimento:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aritméticos: +, -, &lt;em&gt;, /, % (módulo), *&lt;/em&gt; (potência)&lt;/li&gt;
&lt;li&gt;Comparação: ==, !=, &amp;gt;, &amp;lt;, &amp;gt;=, &amp;lt;=&lt;/li&gt;
&lt;li&gt;Lógicos: and, or, not&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Identação
&lt;/h3&gt;

&lt;p&gt;Antes de entrarmos nas estruturas, acho válido comentar sobre a identação da linguagem.&lt;/p&gt;

&lt;p&gt;A indentação em Python é mais do que apenas uma questão de estilo de codificação; é uma parte fundamental da sintaxe da linguagem. Em Python, a indentação é usada para definir blocos de código. Isso é diferente de muitas outras linguagens de programação, onde chaves &lt;code&gt;{}&lt;/code&gt; ou palavras-chave específicas são usadas para esse propósito.&lt;/p&gt;

&lt;p&gt;Aqui estão alguns pontos importantes sobre a indentação em Python:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blocos de Código:&lt;/strong&gt; Em Python, blocos de código sob estruturas de controle como &lt;code&gt;if&lt;/code&gt;, &lt;code&gt;for&lt;/code&gt;, &lt;code&gt;while&lt;/code&gt;, e definições de funções (&lt;code&gt;def&lt;/code&gt;) e classes (&lt;code&gt;class&lt;/code&gt;) são definidos pela indentação. Todo o código dentro de um bloco deve ser indentado uniformemente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consistência:&lt;/strong&gt; A quantidade de espaço usado para a indentação é flexível, mas deve ser consistente em todo o bloco. O padrão mais comum é usar quatro espaços por nível de indentação, e esta é a convenção recomendada pela PEP 8 (o guia de estilo para Python).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Indentação vs. Tabs:&lt;/strong&gt; Embora você possa usar tabs para indentação, é altamente recomendado usar espaços, e nunca misturar tabs e espaços no mesmo bloco de código, pois isso pode levar a erros que são difíceis de diagnosticar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Erros de Indentação:&lt;/strong&gt; Se um bloco de código não estiver corretamente indentado, Python lançará um &lt;code&gt;IndentationError&lt;/code&gt;. Isso ajuda a manter a legibilidade e a uniformidade do código.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exemplo de Indentação:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Não precisa se preocupar em entender as questões de estrutura condicional e de repetição. Esse exemplo é apenas para você visualizar a importância da identação na linguagem Python.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;minha_funcao&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Maior que 2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Menor ou igual a 2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste exemplo, o corpo da função &lt;code&gt;minha_funcao&lt;/code&gt;, o loop &lt;code&gt;for&lt;/code&gt;, e as estruturas condicionais &lt;code&gt;if&lt;/code&gt; e &lt;code&gt;else&lt;/code&gt; têm suas próprias indentações para indicar quais linhas de código pertencem a cada bloco.&lt;/p&gt;

&lt;p&gt;A indentação é uma parte crucial da sintaxe Python e ajuda a tornar o código Python legível e organizado. Ao seguir as convenções de indentação, os programadores podem evitar erros comuns e tornar seu código mais acessível para outros desenvolvedores.&lt;/p&gt;

&lt;h3&gt;
  
  
  Estruturas Condicionais
&lt;/h3&gt;

&lt;p&gt;Estruturas condicionais são um conceito fundamental na programação, usadas para executar diferentes ações com base em diferentes condições. Em outras palavras, elas permitem que um programa tome decisões e siga caminhos diferentes de execução dependendo de certos critérios ou condições.&lt;/p&gt;

&lt;p&gt;Aqui estão os elementos principais das estruturas condicionais:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;If:&lt;/strong&gt; Esta é a estrutura condicional mais básica. Ela permite que o programa execute um bloco de código apenas se uma determinada condição for verdadeira. Por exemplo, em Python, você pode ter algo como &lt;code&gt;if x &amp;gt; 0:&lt;/code&gt;, onde o código subsequente é executado somente se &lt;code&gt;x&lt;/code&gt; for maior que zero.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;idade&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Adulto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Else:&lt;/strong&gt; Frequentemente usada em conjunto com &lt;code&gt;if&lt;/code&gt;, a cláusula &lt;code&gt;else&lt;/code&gt; especifica um bloco de código a ser executado se a condição &lt;code&gt;if&lt;/code&gt; for falsa. Por exemplo, &lt;code&gt;if x &amp;gt; 0:&lt;/code&gt; seguido de &lt;code&gt;else:&lt;/code&gt; - o bloco de código sob &lt;code&gt;else&lt;/code&gt; é executado se &lt;code&gt;x&lt;/code&gt; não for maior que zero.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;idade&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Adulto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Menor de idade&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Elif (Else If):&lt;/strong&gt; Usada para verificar múltiplas condições, uma após a outra. Se a condição do &lt;code&gt;if&lt;/code&gt; for falsa, o programa verifica a condição do &lt;code&gt;elif&lt;/code&gt;, e assim por diante. Isso permite criar uma cadeia de verificações de condições.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x é maior que 10&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x é maior que 5 mas não maior que 10&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x é 5 ou menor&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Switch Case:&lt;/strong&gt; Alguns idiomas oferecem uma estrutura &lt;code&gt;switch case&lt;/code&gt;, que é uma maneira de simplificar uma série de &lt;code&gt;if-else&lt;/code&gt; quando todas as condições dependem do valor de uma única variável. Python não tem uma estrutura &lt;code&gt;switch case&lt;/code&gt; nativa, mas o mesmo comportamento pode ser simulado com uma série de &lt;code&gt;if-elif-else&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As estruturas condicionais são essenciais para a lógica de programação, permitindo que os programas sejam dinâmicos e reativos a diferentes entradas e situações.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;case1&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="c1"&gt;# a palavra reservada 'def' é usada em Python para definir uma função
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Caso 1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;case2&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Caso 2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;default&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Caso padrão&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;switch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;case1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;case2&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Usando o 'switch'
&lt;/span&gt;&lt;span class="n"&gt;case&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;switch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;)()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;case&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Estrutura de Repetição - Loops
&lt;/h3&gt;

&lt;p&gt;As estruturas de repetição são cruciais em toda linguagem de programação. No Python não seria diferente.&lt;/p&gt;

&lt;p&gt;Também conhecidas como laços ou loops, as estruturas de repetição são fundamentais na programação, pois permitem que um bloco de código seja executado repetidamente sob certas condições. Em Python, as principais estruturas de repetição são o &lt;code&gt;for&lt;/code&gt; e o &lt;code&gt;while&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;For Loop:&lt;/strong&gt; O loop &lt;code&gt;for&lt;/code&gt; é usado para iterar sobre uma sequência (que pode ser uma lista, uma tupla, um dicionário, um conjunto ou uma string). Com cada iteração, o loop acessa o próximo item na sequência. O &lt;code&gt;for&lt;/code&gt; é frequentemente usado quando o número de iterações é conhecido ou definido por uma coleção.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Exemplo em Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;   &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
       &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este código imprimirá os números de 0 a 4. A função &lt;code&gt;range(5)&lt;/code&gt; gera uma sequência de números de 0 a 4, e o loop &lt;code&gt;for&lt;/code&gt; itera sobre essa sequência.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;While Loop:&lt;/strong&gt; O loop &lt;code&gt;while&lt;/code&gt; executa um conjunto de instruções enquanto uma condição é verdadeira. Diferente do &lt;code&gt;for&lt;/code&gt;, o &lt;code&gt;while&lt;/code&gt; é usado quando o número de iterações não é necessariamente conhecido de antemão; o loop continuará a executar até que a condição especificada se torne falsa.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Exemplo em Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;   &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
   &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
       &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
       &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este código também imprimirá os números de 0 a 4. O loop continua a executar enquanto &lt;code&gt;i&lt;/code&gt; for menor que 5.&lt;/p&gt;

&lt;p&gt;Ambos os tipos de loops são essenciais para tarefas que requerem repetição, como processamento de dados, execução de cálculos repetitivos, automação de tarefas, entre outros. É importante gerenciar cuidadosamente as condições de loop para evitar loops infinitos, onde o loop nunca atinge uma condição de término.&lt;/p&gt;

&lt;h3&gt;
  
  
  Funções
&lt;/h3&gt;

&lt;p&gt;Em Python, funções são blocos de código que são projetados para realizar uma tarefa específica e podem ser reutilizados em diferentes partes do programa. As funções ajudam a tornar o código mais modular, organizado e manutenível. Elas são definidas usando a palavra-chave &lt;code&gt;def&lt;/code&gt;, seguida pelo nome da função e parênteses, que podem conter parâmetros.&lt;/p&gt;

&lt;p&gt;Aqui estão alguns pontos-chave sobre funções em Python:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Definição de Função&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Para criar uma função, você usa a palavra-chave &lt;code&gt;def&lt;/code&gt;, seguida do nome da função e parênteses. Os parâmetros da função são especificados dentro dos parênteses. O corpo da função começa na linha seguinte e deve ser indentado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;   &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;minha_funcao&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
       &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Olá, esta é minha função!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Parâmetros e Argumentos&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;As funções podem ter parâmetros, que são variáveis listadas entre os parênteses na definição da função. Quando você chama a função, você fornece valores, chamados argumentos, para esses parâmetros.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;   &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;saudacao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
       &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Olá, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nome&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

   &lt;span class="nf"&gt;saudacao&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Alice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Chama a função com o argumento "Alice"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Retorno de Valores&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Uma função pode retornar um valor usando a palavra-chave &lt;code&gt;return&lt;/code&gt;. O valor retornado pode ser resultado de uma operação, uma expressão ou qualquer objeto Python. Após a execução do &lt;code&gt;return&lt;/code&gt;, a função é encerrada.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;   &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;somar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;

   &lt;span class="n"&gt;resultado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;somar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Imprime 8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Escopo de Variáveis&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;As variáveis definidas dentro de uma função têm escopo local, ou seja, elas só podem ser acessadas dentro da função. Variáveis definidas fora de todas as funções têm escopo global e podem ser acessadas em qualquer lugar do programa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Funções Anônimas (Lambda)&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Python também suporta a criação de funções anônimas (ou expressões lambda), que são funções pequenas e sem nome, definidas com a palavra-chave &lt;code&gt;lambda&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;   &lt;span class="n"&gt;multiplicar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;
   &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;multiplicar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# Imprime 6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As funções são uma parte crucial da programação em Python, permitindo a reutilização de código, a organização lógica e a manutenção mais fácil do código.&lt;/p&gt;

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

&lt;p&gt;Como vimos, apesar de suas particulariedades, entender Python não é muito complexo.&lt;/p&gt;

&lt;p&gt;É claro que, ao se aprofundar na linguagem, será necessário gastar tempo estudando. Vimos apenas uma pequena introdução do Python. &lt;/p&gt;

&lt;p&gt;Eu vou seguir estudando e compartilhando meu conhecimento aqui com vocês. Me digam aí o que acham.&lt;/p&gt;

</description>
      <category>python</category>
      <category>webdev</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Guia para Instalar o Bootstrap em um Aplicativo React</title>
      <dc:creator>rodrigozan</dc:creator>
      <pubDate>Thu, 19 Oct 2023 18:53:16 +0000</pubDate>
      <link>https://dev.to/rodrigozan/guia-para-instalar-o-bootstrap-em-um-aplicativo-react-36b</link>
      <guid>https://dev.to/rodrigozan/guia-para-instalar-o-bootstrap-em-um-aplicativo-react-36b</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Você está pronto para melhorar o visual do seu aplicativo React com o Bootstrap? Atendendo a alguns pedidos no meu artigo &lt;a href="https://dev.to/rodrigozan/como-adicionar-o-bootstrap-ao-nextjs-307o"&gt;Como adicionar o Bootstrap ao Next.js&lt;/a&gt;, mostrarei nesse guia como você pode instalar o Bootstrap de forma simples e eficaz para aprimorar a interface do seu aplicativo. &lt;/p&gt;

&lt;p&gt;Caso queira dar um fork no repositório deste tutorial, basta acessar o link abaixo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/rodrigozan/react-with-bootstrap" rel="noopener noreferrer"&gt;Repositório React Bootstrap&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E ainda utilizar o JavaScript do Bootstrap no projeto, ou seja, usar componentes como o Modal, que necessita do JavaScript do framework Bootstrap para funcionar.&lt;/p&gt;

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

&lt;p&gt;Antes de começarmos, é importante garantir que você tenha o seu ambiente de desenvolvimento React configurado e o seu projeto já em andamento. Certifique-se de estar usando o Node.js e o &lt;code&gt;npm&lt;/code&gt; (ou &lt;code&gt;yarn&lt;/code&gt;) para gerenciar suas dependências.&lt;/p&gt;

&lt;p&gt;Se você ainda não tiver um projeto React em andamento, pode criar um novo com o seguinte comando:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

npx create-react-app meu-app


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Instalação do Bootstrap
&lt;/h2&gt;

&lt;p&gt;Para instalar o Bootstrap no seu projeto React, você pode utilizar o npm. Abra o terminal no diretório do seu projeto e execute o seguinte comando:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

npm &lt;span class="nb"&gt;install &lt;/span&gt;bootstrap


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Caso prefira utilizar o yarn, rode o comando:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

yarn add bootstrap


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Isso irá baixar e instalar o Bootstrap e suas dependências no seu projeto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Importando o Bootstrap
&lt;/h2&gt;

&lt;p&gt;Depois de instalar o Bootstrap, você precisa importá-lo no seu código. No seu arquivo index.js, ou nos arquivos onde você deseja usar o Bootstrap, adicione a seguinte linha no topo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bootstrap/dist/css/bootstrap.min.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Isso importará o arquivo CSS do Bootstrap e permitirá que você utilize os estilos e componentes em seu aplicativo React.&lt;/p&gt;

&lt;p&gt;Exemplo de como ficará seu arquivo index.js:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ReactDOM&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-dom/client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bootstrap/dist/css/bootstrap.min.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./index.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ReactDOM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createRoot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;root&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;StrictMode&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/React.StrictMode&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Utilizando Componentes Bootstrap
&lt;/h2&gt;

&lt;p&gt;Agora que o Bootstrap está integrado ao seu projeto, você pode começar a usar seus componentes. Por exemplo, você pode adicionar um botão Bootstrap ao seu aplicativo com o seguinte código:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// App.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;container&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="nx"&gt;Bootstrap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;btn btn-primary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Clique&lt;/span&gt; &lt;span class="nx"&gt;em&lt;/span&gt; &lt;span class="nx"&gt;Mim&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fru5v1jvd5u1f02giaqlm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fru5v1jvd5u1f02giaqlm.png" alt="Aplicação React Bootstrap - Button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ou printar informações do banco de dados em uma tabela:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// App.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;container&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="nx"&gt;Bootstrap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;table&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;thead&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;th&lt;/span&gt; &lt;span class="nx"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;col&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/th&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;th&lt;/span&gt; &lt;span class="nx"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;col&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;First&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/th&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;th&lt;/span&gt; &lt;span class="nx"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;col&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Last&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/th&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;th&lt;/span&gt; &lt;span class="nx"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;col&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Handle&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/th&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/tr&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/thead&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;tbody&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;th&lt;/span&gt; &lt;span class="nx"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;row&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/th&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Mark&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/td&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Otto&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/td&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;mdo&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/td&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/tr&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;th&lt;/span&gt; &lt;span class="nx"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;row&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/th&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Jacob&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/td&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Thornton&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/td&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;fat&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/td&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/tr&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;th&lt;/span&gt; &lt;span class="nx"&gt;scope&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;row&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/th&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;td&lt;/span&gt; &lt;span class="nx"&gt;colspan&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Larry&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;Bird&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/td&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;twitter&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/td&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/tr&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/tbody&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/table&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvtvpap8kchht8xt8y15r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvtvpap8kchht8xt8y15r.png" alt="Aplicação React Bootstrap - Table"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Importando o Bootstrap JavaScript
&lt;/h2&gt;

&lt;p&gt;Se você deseja usar os recursos JavaScript do Bootstrap (como modais, carrosséis, etc.), você pode importar o JavaScript no seu componente. &lt;/p&gt;

&lt;p&gt;Vamos importar o JavaScript do Bootstrap no componente App.js e usar um modal (lembrando que já importamos o arquivo bootstrap css no arquivo index.js):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// App.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bootstrap/dist/js/bootstrap.bundle.min.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;container&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="nx"&gt;Bootstrap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;btn btn-primary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;toggle&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modal&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#exampleModal&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nx"&gt;Launch&lt;/span&gt; &lt;span class="nx"&gt;demo&lt;/span&gt; &lt;span class="nx"&gt;modal&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modal fade&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;exampleModal&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;tabindex&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;-1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;aria&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;labelledby&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;exampleModalLabel&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;aria&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;hidden&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modal-dialog&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modal-content&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modal-header&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modal-title fs-5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;exampleModalLabel&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Modal&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;btn-close&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;dismiss&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modal&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;aria&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Close&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modal-body&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;...&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modal-footer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;btn btn-secondary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;dismiss&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modal&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Close&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;                &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;btn btn-primary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Save&lt;/span&gt; &lt;span class="nx"&gt;changes&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29pdcx4vk9ozsjpsoupw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29pdcx4vk9ozsjpsoupw.png" alt="Aplicação React Bootstrap - Modal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Personalização (Opcional)
&lt;/h2&gt;

&lt;p&gt;Se você deseja personalizar o tema ou os estilos do Bootstrap para corresponder à identidade visual do seu aplicativo, o Bootstrap oferece diversas variáveis de CSS que podem ser sobrescritas. Você pode criar um arquivo CSS personalizado e importá-lo após o CSS do Bootstrap para aplicar suas modificações.&lt;/p&gt;

&lt;p&gt;Para fazer isso, crie um novo arquivo CSS personalizado dentro do diretório &lt;code&gt;src&lt;/code&gt;. Por exemplo, você pode chamá-lo de meu-bootstrap.css. Este arquivo conterá suas modificações e estilos personalizados.&lt;/p&gt;

&lt;p&gt;Exemplos de estilos personalilzados:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

&lt;span class="c"&gt;/* meu-bootstrap.css */&lt;/span&gt;

&lt;span class="c"&gt;/* Modificações no botão Bootstrap */&lt;/span&gt;
&lt;span class="nc"&gt;.btn-primary&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;purple&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Estilo personalizado para um elemento específico */&lt;/span&gt;
&lt;span class="nc"&gt;.minha-classe&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;underline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Estilo personalizado para a tag strong dentro da classe minha-classe */&lt;/span&gt;
&lt;span class="nc"&gt;.minha-classe&lt;/span&gt; &lt;span class="nt"&gt;strong&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;purple&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Importe o arquivo CSS personalizado
&lt;/h3&gt;

&lt;p&gt;Para garantir que seu arquivo CSS personalizado meu-bootstrap.css seja aplicado após o CSS do Bootstrap, você deve importá-lo em seu aplicativo React. Você pode fazer isso no componente onde deseja usar os estilos personalizados. Por exemplo, no arquivo App.js:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bootstrap/dist/css/bootstrap.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Importando o CSS do Bootstrap&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./meu-bootstrap.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Importando o seu arquivo CSS personalizado meu-bootstrap.css&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;container&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="nx"&gt;Bootstrap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;minha-classe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Este&lt;/span&gt; &lt;span class="nx"&gt;parágrafo&lt;/span&gt; &lt;span class="nx"&gt;tem&lt;/span&gt; &lt;span class="nx"&gt;o&lt;/span&gt; &lt;span class="nx"&gt;estilo&lt;/span&gt; &lt;span class="nx"&gt;da&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;strong&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;classe&lt;/span&gt; &lt;span class="nx"&gt;minha&lt;/span&gt; &lt;span class="nx"&gt;classe&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/strong&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;btn btn-primary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Clique&lt;/span&gt; &lt;span class="nx"&gt;em&lt;/span&gt; &lt;span class="nx"&gt;Mim&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkb3aen0ygd75ms1wiij.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkb3aen0ygd75ms1wiij.png" alt="Aplicação React Bootstrap com estilo personalizado"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Agora você sabe como instalar e utilizar o Bootstrap em um aplicativo React. Isso abrirá um mundo de possibilidades para melhorar o design e a usabilidade do seu aplicativo. Lembre-se de explorar a documentação do Bootstrap para descobrir todos os componentes e recursos disponíveis.&lt;/p&gt;

&lt;p&gt;Com o Bootstrap, você pode criar interfaces atraentes e responsivas de forma mais eficiente. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>bootstrap</category>
      <category>javascript</category>
    </item>
    <item>
      <title>CSS Tips - Responsive Columns</title>
      <dc:creator>rodrigozan</dc:creator>
      <pubDate>Tue, 17 Oct 2023 12:00:00 +0000</pubDate>
      <link>https://dev.to/rodrigozan/css-tips-responsive-columns-596a</link>
      <guid>https://dev.to/rodrigozan/css-tips-responsive-columns-596a</guid>
      <description>&lt;p&gt;Fala galera, Rodrigo Zan na área.&lt;/p&gt;

&lt;p&gt;Mais um artigo para o quadro CSS Tips. A ideia é trazer todos os dias algumas dicas de CSS para aprimorar suas habilidades de design e tornar suas web pages ainda mais incríveis. &lt;/p&gt;

&lt;h2&gt;
  
  
  Dica do Dia: responsive columns
&lt;/h2&gt;

&lt;p&gt;Hoje, vamos explorar a propriedade columns no CSS. Essa propriedade define o número de colunas a serem usadas ao desenhar o conteúdo de um elemento, bem como a largura dessas colunas.&lt;/p&gt;

&lt;p&gt;Quando trabalhamos com texto, como por exemplo, um artigo, podemos utilizar a propriedade columns para definir um número de colunas para o texto. Por exemplo, se você quiser que o texto do artigo tenha 2 colunas fixas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;
&lt;span class="nc"&gt;.article-content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Porém, para um texto responsivo que se adapta 100% ao tamanho da tela, você pode usar o valor auto, e especificar a largura ideal para cada coluna. Dessa forma o navegador ficará responsável por calcular de forma automatica o número de colunas que deem preencher o espaço disponível.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;
&lt;span class="nc"&gt;.article-content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt; &lt;span class="m"&gt;10rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acima foi definido que o texto terá o número de colunas automático, e que o tamanho de cada coluna será de 10rem. Para transformar em pixels o valor de rem, imagine que 10rem é 10 vezes o tamanho da fonte raiz, que é, por padrão, definida na tag  de uma página HTML. Se o tamanho da fonte raiz for 16px, 10rem seria igual a 160 pixels, 10 x 16.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwowcqudeaeo8j6l8taa2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwowcqudeaeo8j6l8taa2.png" alt="Image description" width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curtiu essa dica? Se gostou desse quadro, me dá um toque nos comentários.&lt;/p&gt;

&lt;p&gt;Abração e até amanhã!&lt;/p&gt;

</description>
      <category>css</category>
      <category>csstips</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>CSS Tips - Where()</title>
      <dc:creator>rodrigozan</dc:creator>
      <pubDate>Mon, 16 Oct 2023 12:57:35 +0000</pubDate>
      <link>https://dev.to/rodrigozan/css-tips-where-47a1</link>
      <guid>https://dev.to/rodrigozan/css-tips-where-47a1</guid>
      <description>&lt;p&gt;Fala galera, Rodrigo Zan na área.&lt;/p&gt;

&lt;p&gt;Hoje iniciaremos o quadro CSS Tips. A ideia é trazer todos os dias algumas dicas de CSS para aprimorar suas habilidades de design e tornar suas web pages ainda mais incríveis. &lt;/p&gt;

&lt;h2&gt;
  
  
  Dica do Dia: a pseudoclasse &lt;code&gt;:where()&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Hoje, vamos explorar a função de pseudoclasse where no CSS. Essa função é uma ferramenta incrivelmente útil quando se trata de selecionar elementos com base em uma lista de seletores. O que torna o where especial é sua capacidade de aplicar estilos a elementos que correspondem a qualquer um dos seletores em sua lista. Vamos dar uma olhada em como usá-lo.&lt;/p&gt;

&lt;p&gt;Suponha que você deseje aplicar um estilo a todos os elementos &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; dentro da tag &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; da sua aplicação. Normalmente você escreveria:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c"&gt;/* estilo */&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uma forma de declarar que o &lt;code&gt;span&lt;/code&gt; é um elemento filho direto do &lt;code&gt;p&lt;/code&gt;, é utilizando o sinal de maior.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c"&gt;/* estilo */&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Porém, se eu tiver três parágrafos, cada um com uma classe que adiciona estilos diferentes, mas tiver algum estilo que queira passar para todos eles, posso trabalhar da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.first&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.second&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.third&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="c"&gt;/*  estilo para os spans dentro de todos os parágrafos */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.first&lt;/span&gt; &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c"&gt;/* estilo o span dentro de p.first */&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.second&lt;/span&gt; &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c"&gt;/* estilo o span dentro de p.second */&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.third&lt;/span&gt; &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c"&gt;/* estilo o span dentro de p.third */&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para tornar o &lt;code&gt;CSS&lt;/code&gt; menos verboso, podemos utilizar a pseudoclasse &lt;code&gt;:where()&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:where&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.first&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.second&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.third&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c"&gt;/*  estilo para os spans dentro de todos os parágrafos */&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.first&lt;/span&gt; &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c"&gt;/* estilo o span dentro de p.first */&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.second&lt;/span&gt; &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c"&gt;/* estilo o span dentro de p.second */&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="nc"&gt;.third&lt;/span&gt; &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="c"&gt;/* estilo o span dentro de p.third */&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Curtiu essa dica? Se gostou desse quadro, me dá um toque nos comentários.&lt;/p&gt;

&lt;p&gt;Abração e até amanhã!&lt;/p&gt;

</description>
      <category>css</category>
      <category>csstips</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Introdução ao JavaScript: Variáveis, Tipos de Dados e Operadores</title>
      <dc:creator>rodrigozan</dc:creator>
      <pubDate>Tue, 10 Oct 2023 18:22:39 +0000</pubDate>
      <link>https://dev.to/rodrigozan/introducao-ao-javascript-variaveis-tipos-de-dados-e-operadores-2fpd</link>
      <guid>https://dev.to/rodrigozan/introducao-ao-javascript-variaveis-tipos-de-dados-e-operadores-2fpd</guid>
      <description>&lt;p&gt;O JavaScript é uma linguagem de programação amplamente utilizada no desenvolvimento de páginas da web interativas e dinâmicas. Neste artigo, exploraremos os conceitos básicos do JavaScript, incluindo variáveis, tipos de dados e operadores.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é o JavaScript?
&lt;/h2&gt;

&lt;p&gt;O JavaScript é uma linguagem de script leve, que permite aos desenvolvedores criar elementos interativos em páginas da web. Ele é frequentemente usado em conjunto com HTML e CSS para fornecer uma experiência mais envolvente aos usuários. Com o JavaScript, podemos criar formulários dinâmicos, efeitos visuais, animações e até mesmo manipular conteúdo em tempo real.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como programar em JavaScript
&lt;/h2&gt;

&lt;p&gt;Aprender a programar em JavaScript é muito simples. Basta você ter um computador para acessar console do seu navegador preferido.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mas o quer raios é um console?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Calma, pequeno gafanhoto. Vou explicar. E não, não é um console de video-game.&lt;/p&gt;

&lt;p&gt;O console do navegador é uma ferramenta de desenvolvedor integrada aos navegadores da web que permite aos desenvolvedores interagirem com páginas da web e executarem comandos em JavaScript diretamente no navegador. Ele fornece uma interface onde você pode visualizar mensagens de depuração, erros, avisos e resultados de códigos executados em tempo real.&lt;/p&gt;

&lt;p&gt;A principal função do console do navegador é facilitar o processo de desenvolvimento e depuração de sites e aplicativos da web. Ele permite que os desenvolvedores inspecionem e analisem o código HTML, CSS e JavaScript em uma página, bem como façam testes e modifiquem o comportamento do código sem a necessidade de editar diretamente os arquivos fonte.&lt;/p&gt;

&lt;h2&gt;
  
  
  Variáveis em JavaScript
&lt;/h2&gt;

&lt;p&gt;As variáveis são usadas para armazenar dados que podem ser usados ​​mais tarde em nosso código. Em JavaScript, podemos declarar variáveis usando as palavras-chave &lt;em&gt;var&lt;/em&gt;, &lt;em&gt;let&lt;/em&gt; ou &lt;em&gt;const&lt;/em&gt;. Por exemplo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;idade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;nome&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Maria&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;3.14&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Aqui, &lt;em&gt;idade&lt;/em&gt;, &lt;em&gt;nome&lt;/em&gt; e &lt;em&gt;PI&lt;/em&gt; são as variáveis, e atribuímos a elas um valor numérico, uma string e uma constante, respectivamente.&lt;/p&gt;

&lt;p&gt;Vamos falar sobre a diferença entre os três tipos de variáveis do JavaScript futuramente. Por enquanto, vamos &lt;em&gt;codar&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu674km5oali5rcdm54gk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu674km5oali5rcdm54gk.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Abra uma nova janela, ou uma nova guia de seu navegador preferido (recomendamos o Google Chrome, Mozilla Firefox ou Microsoft Edge). Pressione a tecla &lt;em&gt;F12&lt;/em&gt; ou clique com o botão direito do mouse na página e selecione &lt;em&gt;Inspecionar&lt;/em&gt; ou &lt;em&gt;Inspeccionar elemento&lt;/em&gt; (dependendo do navegador).&lt;/p&gt;

&lt;p&gt;Isso abrirá a ferramenta de desenvolvedor do navegador. Procure a guia &lt;em&gt;Console&lt;/em&gt; ou &lt;em&gt;Consola&lt;/em&gt; na janela que se abriu.&lt;/p&gt;

&lt;p&gt;No console, você verá um prompt onde pode digitar seu código JavaScript. O símbolo &lt;em&gt;&amp;gt;&lt;/em&gt; geralmente indica que você pode começar a digitar.&lt;/p&gt;

&lt;p&gt;Vamos digitar no console a primeira variável que vimos acima:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;idade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Tecle enter. Agora digite o nome da variável.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nx"&gt;idade&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;O número 30 será printado no console.&lt;/p&gt;

&lt;p&gt;Repita o exercício com &lt;em&gt;let nome&lt;/em&gt; e &lt;em&gt;const PI&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tipos de Dados em JavaScript
&lt;/h2&gt;

&lt;p&gt;JavaScript é uma linguagem dinamicamente tipada, o que significa que o tipo de dado de uma variável é determinado automaticamente com base no valor atribuído a ela. Se você já programou em linguagens estaticamente tipadas, como Java ou C, sentirá certa diferença na declaração de variáveis.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alguns dos tipos de dados em JavaScript incluem:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Números: usado para representar valores numéricos, como 10, 3.14, etc.&lt;/li&gt;
&lt;li&gt;Strings: uma sequência de caracteres, como "Olá, mundo!".&lt;/li&gt;
&lt;li&gt;Booleanos: representando verdadeiro (true) ou falso (false).&lt;/li&gt;
&lt;li&gt;Arrays: uma coleção de elementos que podem ser de diferentes tipos.&lt;/li&gt;
&lt;li&gt;Objetos: representam entidades com propriedades e métodos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Operadores em JavaScript
&lt;/h2&gt;

&lt;p&gt;Os operadores em JavaScript são usados para realizar ações em variáveis e valores. Alguns dos operadores mais comuns incluem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operadores Aritméticos: como adição (+), subtração (-), multiplicação (*), divisão (/) e outros.&lt;/li&gt;
&lt;li&gt;Operadores de Atribuição: como "=" para atribuir valores a variáveis.&lt;/li&gt;
&lt;li&gt;Operadores de Comparação: como "==", "!=", "&amp;lt;", "&amp;gt;" para comparar valores.&lt;/li&gt;
&lt;li&gt;Operadores Lógicos: como "&amp;amp;&amp;amp;" (E), "||" (OU), "!" (NÃO) para realizar operações lógicas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Exemplo de Uso de Operadores
&lt;/h3&gt;

&lt;p&gt;Bom, não adianta ficar só de lero, lero. Como dizem, a prática leva a perfeição.&lt;/p&gt;

&lt;p&gt;No console, crie as seguintes variáveis (lembre-se de teclar enter depois de criar cada variável):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;soma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Resultado: 15&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;subtracao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Resultado: -5&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;comparacao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Resultado: false&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;logica&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Resultado: false&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Agora, em qualquer momento que você digitar uma das variáveis, o resultado será printado na tela.&lt;/p&gt;

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

&lt;p&gt;O JavaScript é uma poderosa linguagem de programação que desempenha um papel crucial no desenvolvimento web moderno. Neste artigo, abordamos alguns conceitos fundamentais, como variáveis, tipos de dados e operadores, que são essenciais para começar a escrever códigos JavaScript. Agora, você pode se aventurar na criação de interatividade e dinamismo em suas páginas da web usando o JavaScript!&lt;/p&gt;

&lt;p&gt;Espero que este artigo tenha sido útil e que você esteja empolgado para continuar aprendendo mais sobre essa incrível linguagem de programação. No próximo artigo nós vamos falar de &lt;strong&gt;Estruturas de controle&lt;/strong&gt;. Até mais!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MongoDB Descomplicado: O Guia Definitivo para Iniciantes em MongoDB</title>
      <dc:creator>rodrigozan</dc:creator>
      <pubDate>Wed, 12 Jul 2023 16:25:37 +0000</pubDate>
      <link>https://dev.to/rodrigozan/mongodb-descomplicado-o-guia-definitivo-para-iniciantes-em-mongodb-4o5</link>
      <guid>https://dev.to/rodrigozan/mongodb-descomplicado-o-guia-definitivo-para-iniciantes-em-mongodb-4o5</guid>
      <description>&lt;h1&gt;
  
  
  &lt;strong&gt;MongoDB&lt;/strong&gt; Descomplicado: O Guia Definitivo para Iniciantes em &lt;strong&gt;MongoDB&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;O &lt;strong&gt;MongoDB&lt;/strong&gt; é um dos bancos de dados NoSQL mais populares do mundo. Sua flexibilidade e escalabilidade o tornam uma escolha ideal para projetos de todos os tamanhos. &lt;/p&gt;

&lt;p&gt;Neste tutorial, iremos explorar os conceitos básicos do &lt;strong&gt;MongoDB&lt;/strong&gt; e fornecer uma introdução abrangente para iniciantes, criando uma simples aplicação em Node.js.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é o &lt;strong&gt;MongoDB&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;MongoDB&lt;/strong&gt; é um banco de dados orientado a documentos, o que significa que ele armazena dados em formato de documentos BSON (Binary JSON). Esses documentos são semelhantes a objetos JSON, tornando o &lt;strong&gt;MongoDB&lt;/strong&gt; fácil de entender e usar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vantagens do &lt;strong&gt;MongoDB&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Existem muitas vantagens em se usar o &lt;strong&gt;MongoDB&lt;/strong&gt; no desenvolvimento de APIs e aplicações:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexibilidade do esquema:&lt;/strong&gt; O &lt;strong&gt;MongoDB&lt;/strong&gt; é um banco de dados NoSQL orientado a documentos, o que significa que não requer um esquema rígido como nos bancos de dados relacionais. Isso permite que você armazene documentos com estruturas diferentes no mesmo banco de dados, facilitando a adaptação às necessidades em constante mudança do seu projeto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Escalabilidade horizontal:&lt;/strong&gt; O &lt;strong&gt;MongoDB&lt;/strong&gt; foi projetado para ser altamente escalável. Ele permite a distribuição dos dados em vários servidores, possibilitando um aumento de desempenho à medida que a carga de trabalho aumenta. É possível adicionar mais servidores conforme necessário, tornando o &lt;strong&gt;MongoDB&lt;/strong&gt; adequado para aplicações com grande volume de dados e tráfego intenso.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Desempenho rápido:&lt;/strong&gt; O &lt;strong&gt;MongoDB&lt;/strong&gt; possui um mecanismo de indexação eficiente e acesso direto aos dados, o que contribui para um desempenho rápido. Ele suporta consultas complexas e pode manipular grandes quantidades de dados de forma eficiente, garantindo uma resposta rápida às solicitações.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modelo de dados flexível:&lt;/strong&gt; O &lt;strong&gt;MongoDB&lt;/strong&gt; permite que você armazene dados complexos e estruturas aninhadas de forma nativa. Isso facilita a representação e o acesso aos dados, especialmente em cenários onde a estrutura dos dados pode variar entre documentos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comunidade e suporte ativos:&lt;/strong&gt; O &lt;strong&gt;MongoDB&lt;/strong&gt; possui uma comunidade ativa de desenvolvedores e uma empresa por trás dele que oferece suporte e atualizações frequentes. Isso significa que você terá acesso a recursos, documentação e suporte técnico de qualidade para auxiliá-lo na construção e manutenção de seus projetos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Desvantagens de se usar o &lt;strong&gt;MongoDB&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Como em toda tecnologia, existem pontos desfavoráveis no uso do &lt;strong&gt;MongoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consumo de recursos:&lt;/strong&gt; O &lt;strong&gt;MongoDB&lt;/strong&gt; pode consumir mais recursos do sistema em comparação com alguns bancos de dados relacionais. Isso ocorre devido ao seu modelo de armazenamento flexível e indexação intensiva, o que pode exigir mais memória e capacidade de processamento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complexidade de consultas:&lt;/strong&gt; Embora o &lt;strong&gt;MongoDB&lt;/strong&gt; seja poderoso em termos de consultas, às vezes pode ser mais complexo de usar do que bancos de dados relacionais tradicionais. Consultas complexas podem exigir um conhecimento mais aprofundado da sintaxe e recursos específicos do &lt;strong&gt;MongoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ausência de transações ACID:&lt;/strong&gt; O &lt;strong&gt;MongoDB&lt;/strong&gt; não suporta transações ACID (Atomicidade, Consistência, Isolamento, Durabilidade) em todas as operações. Isso pode ser um problema em cenários onde a integridade dos dados é fundamental e transações complexas são necessárias.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Falta de aderência a um esquema fixo:&lt;/strong&gt; Embora a flexibilidade do esquema seja uma vantagem, também pode ser uma desvantagem em certos casos. Em projetos com requisitos estritamente definidos e relacionamentos complexos entre os dados, a falta de um esquema fixo pode dificultar a manutenção e a consistência dos dados.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Curva de aprendizado:&lt;/strong&gt; Para desenvolvedores acostumados com bancos de dados relacionais, o &lt;strong&gt;MongoDB&lt;/strong&gt; pode exigir uma curva de aprendizado inicial. É necessário compreender os conceitos específicos do &lt;strong&gt;MongoDB&lt;/strong&gt; e suas melhores práticas para aproveitar ao máximo o seu potencial.&lt;/p&gt;

&lt;p&gt;Você deve pesar as vantagens e desvantagens na utilização desse banco de dados NoSQL em seus projetos. &lt;/p&gt;

&lt;h2&gt;
  
  
  Como começar com o &lt;strong&gt;MongoDB&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Para começar a usar o &lt;strong&gt;MongoDB&lt;/strong&gt;, você precisa seguir algumas etapas simples:&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 1: Instalação
&lt;/h3&gt;

&lt;p&gt;Faça o download do &lt;strong&gt;MongoDB&lt;/strong&gt; no site oficial e siga as instruções de instalação adequadas ao seu sistema operacional.&lt;/p&gt;

&lt;p&gt;Se quiser, pode seguir este tutorial que ensina a instalar o &lt;strong&gt;MongoDB&lt;/strong&gt; nos sistemas operacionais Windows, Linux e Mac:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/code-write/como-instalar-o-mongodb-guia-passo-a-passo-para-windows-mac-e-linux-3240171d8ead" rel="noopener noreferrer"&gt;Como instalar o &lt;strong&gt;MongoDB&lt;/strong&gt;: Guia Passo a Passo para Windows, Mac e Linux&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 2: Conectar ao &lt;strong&gt;MongoDB&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Após a instalação, você precisa se conectar ao &lt;strong&gt;MongoDB&lt;/strong&gt;. O &lt;strong&gt;MongoDB&lt;/strong&gt; usa o conceito de banco de dados e coleções. O banco de dados é o recipiente principal que armazena suas coleções. &lt;/p&gt;

&lt;p&gt;Vamos usar o Windows como exemplo para nos conectarmos ao &lt;strong&gt;MongoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Abra o menu Iniciar e pesquise por "Variáveis de ambiente".&lt;/li&gt;
&lt;li&gt;Selecione a opção "Editar as variáveis de ambiente do sistema".&lt;/li&gt;
&lt;li&gt;Na janela "Propriedades do Sistema", clique no botão "Variáveis de Ambiente".&lt;/li&gt;
&lt;li&gt;Na seção "Variáveis do sistema", selecione a variável "Path" e clique em "Editar".&lt;/li&gt;
&lt;li&gt;Clique em "Novo" e adicione o caminho do diretório bin do &lt;strong&gt;MongoDB&lt;/strong&gt;. O caminho padrão é "C:\Program Files*&lt;em&gt;MongoDB&lt;/em&gt;&lt;em&gt;\Server{versão}\bin". Encontrando o **MongoDB&lt;/em&gt;* em Program Files e acessando a pasta &lt;em&gt;bin&lt;/em&gt;, basta copiar o endereço do Explorer.&lt;/li&gt;
&lt;li&gt;Clique em "OK" em todas as janelas para salvar as alterações.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora basta abrir o terminal do Windows (CMD ou Power Shell) e executar o comando :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mongod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O servidor será iniciado e estará pronto para aceitar conexões. &lt;/p&gt;

&lt;p&gt;Em seguida, abra uma nova janela do terminal do Windows e digite o comando abaixo para se conectar ao &lt;strong&gt;MongoDB&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mongo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso abrirá o shell do &lt;strong&gt;MongoDB&lt;/strong&gt;, onde você pode executar comandos e consultas.&lt;/p&gt;

&lt;p&gt;Agora você está conectado ao &lt;strong&gt;MongoDB&lt;/strong&gt; local no Windows. Você pode criar bancos de dados, coleções, inserir dados e realizar várias operações usando comandos do &lt;strong&gt;MongoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comandos básicos do &lt;strong&gt;MongoDB&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Vamos criar um banco de dados para uma biblioteca, uma coleção para livros e uma coleção para membros.&lt;/p&gt;

&lt;h4&gt;
  
  
  Criação de um banco de dados:
&lt;/h4&gt;

&lt;p&gt;O comando para se criar bancos de dados no &lt;strong&gt;MongoDB&lt;/strong&gt; é &lt;em&gt;use nome_do_banco_de_dados&lt;/em&gt;. Nosso banco de dados se chamará biblioteca. Então, o comando para a criação será:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;use biblioteca
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ver todos os bancos de dados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;show databases
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ou&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;show dbs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Criação de uma coleção:
&lt;/h4&gt;

&lt;p&gt;Uma coleção seria o equivalente, em um banco de dados relacional, a uma tabela.&lt;/p&gt;

&lt;p&gt;Ao usarmos &lt;em&gt;db&lt;/em&gt; antes da função, estamos criando uma coleção no banco de dados que foi definido no comando anterior, ou seja, no banco &lt;em&gt;biblioteca&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.createCollection&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"livros"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E agora vamos criar a coleção de usuários, que, como definimos anteriormente, se chamará &lt;em&gt;membros&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.createCollection&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"membros"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Inserir um documento:
&lt;/h4&gt;

&lt;p&gt;Um documento do &lt;strong&gt;MongoDB&lt;/strong&gt; seria o equivalente, em um banco de dados relacional, aos registros de uma tabela. O comando para inserção de um documento seria &lt;em&gt;insertOne&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.nome_da_colecao.insertOne&lt;span class="o"&gt;({&lt;/span&gt;campo1: valor1, campo2: valor2, ...&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para inserir os dados de um livro em um documento, nosso comando, além de usar o &lt;em&gt;db&lt;/em&gt;, precisa declarar a qual a coleção o documento pertence. Então o comando se inicia com &lt;em&gt;db.nome_da_coleção&lt;/em&gt;, e só depois o &lt;em&gt;insertOne&lt;/em&gt; é acrescentado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.insertOne&lt;span class="o"&gt;({&lt;/span&gt;titulo: &lt;span class="s2"&gt;"Percy Jackson e o Ladrão de Raios"&lt;/span&gt;, autor: &lt;span class="s2"&gt;"Rick Riordan"&lt;/span&gt;, editora: &lt;span class="s2"&gt;"Pendragon"&lt;/span&gt;, lancamento: new Date&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2023-07-12"&lt;/span&gt;&lt;span class="o"&gt;)})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vamos inserir mais um livro.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.insertOne&lt;span class="o"&gt;({&lt;/span&gt;titulo: &lt;span class="s2"&gt;"Pega-pega com Folclóricos"&lt;/span&gt;, autor: &lt;span class="s2"&gt;"Rod Zandonadi"&lt;/span&gt;, editora: &lt;span class="s2"&gt;"Griots"&lt;/span&gt;, lancamento: new Date&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2022-08-12"&lt;/span&gt;&lt;span class="o"&gt;)})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Listar documentos no &lt;strong&gt;MongoDB&lt;/strong&gt;:
&lt;/h4&gt;

&lt;p&gt;Agora temos dois livros cadastrados em nosso banco de dados. Para listá-los, usamos o comando &lt;em&gt;find&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.find&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Inserir mais de um documento no &lt;strong&gt;MongoDB&lt;/strong&gt;:
&lt;/h4&gt;

&lt;p&gt;Vamos, agora, criar alguns usuários, os membros da nossa biblioteca. Porém, para não precisarmos usar o comando &lt;em&gt;insertOne&lt;/em&gt; várias vezes, vamos utilizar um novo comando. O comando &lt;em&gt;insertMany&lt;/em&gt;, que nos permite inserir vários documentos de uma vez.&lt;/p&gt;

&lt;p&gt;Da mesma forma, usaremos db e o nome da coleção antes do comando, no caso, a coleção será a de &lt;em&gt;membros&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.membros.insertMany&lt;span class="o"&gt;([&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt; nome: &lt;span class="s2"&gt;"Rodrigo Estagiário"&lt;/span&gt;, dataNasc: &lt;span class="s2"&gt;"new DAte("&lt;/span&gt;1991-10-28&lt;span class="s2"&gt;")"&lt;/span&gt;, sexo: &lt;span class="s2"&gt;"M"&lt;/span&gt;, escola: &lt;span class="s2"&gt;"Eitor Freitas"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
  &lt;span class="o"&gt;{&lt;/span&gt; nome: &lt;span class="s2"&gt;"João Estagiário"&lt;/span&gt;, dataNasc: &lt;span class="s2"&gt;"new DAte("&lt;/span&gt;1992-12-13&lt;span class="s2"&gt;")"&lt;/span&gt;, sexo: &lt;span class="s2"&gt;"M"&lt;/span&gt;, escola: &lt;span class="s2"&gt;"Possidônio"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
  &lt;span class="o"&gt;{&lt;/span&gt; nome: &lt;span class="s2"&gt;"Alysson Estagiário"&lt;/span&gt;, dataNasc: &lt;span class="s2"&gt;"new DAte("&lt;/span&gt;1990-11-15&lt;span class="s2"&gt;")"&lt;/span&gt;, sexo: &lt;span class="s2"&gt;"M"&lt;/span&gt;, escola: &lt;span class="s2"&gt;"Possidônio"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
  &lt;span class="o"&gt;{&lt;/span&gt; nome: &lt;span class="s2"&gt;"Bruna Estagiária"&lt;/span&gt;, dataNasc: &lt;span class="s2"&gt;"new DAte("&lt;/span&gt;1995-12-26&lt;span class="s2"&gt;")"&lt;/span&gt;, sexo: &lt;span class="s2"&gt;"F"&lt;/span&gt;, escola: &lt;span class="s2"&gt;"Eitor Freitas"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
  &lt;span class="o"&gt;{&lt;/span&gt; nome: &lt;span class="s2"&gt;"Aymin Estagiária"&lt;/span&gt;, dataNasc: &lt;span class="s2"&gt;"new DAte("&lt;/span&gt;1990-08-28&lt;span class="s2"&gt;")"&lt;/span&gt;, sexo: &lt;span class="s2"&gt;"F"&lt;/span&gt;, escola: &lt;span class="s2"&gt;"Eitor Freitas"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
  &lt;span class="o"&gt;{&lt;/span&gt; nome: &lt;span class="s2"&gt;"Nicole Estagiária"&lt;/span&gt;, dataNasc: &lt;span class="s2"&gt;"new DAte("&lt;/span&gt;2000-03-27&lt;span class="s2"&gt;")"&lt;/span&gt;, sexo: &lt;span class="s2"&gt;"F"&lt;/span&gt;, escola: &lt;span class="s2"&gt;"Eitor Freitas"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;span class="o"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rode novamente o comando &lt;em&gt;find&lt;/em&gt; para listar todos os membros. Não se esqueça de trocar a coleção para &lt;em&gt;membros&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.membros.find&lt;span class="o"&gt;()&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  CRUD no &lt;strong&gt;MongoDB&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Como todo bom tutorial de desenvolvimento web, é imprescindível termos um CRUD. Vamos realizar então um CRUD de livros.&lt;/p&gt;

&lt;h5&gt;
  
  
  CRUD de Livros
&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;Inserir um documento:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.insertOne&lt;span class="o"&gt;({&lt;/span&gt;titulo: &lt;span class="s2"&gt;"A Filha do Tempo e os Descendentes de Etherion"&lt;/span&gt;, autor: &lt;span class="s2"&gt;"Rod Zandonadi"&lt;/span&gt;, editora: &lt;span class="s2"&gt;"Griots"&lt;/span&gt;, lancamento: new Date&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2021-02-07"&lt;/span&gt;&lt;span class="o"&gt;)})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.insertOne&lt;span class="o"&gt;({&lt;/span&gt;titulo: &lt;span class="s2"&gt;"O pior Rei Artur de todos os tempos"&lt;/span&gt;, autor: &lt;span class="s2"&gt;"Rod Zandonadi"&lt;/span&gt;, editora: &lt;span class="s2"&gt;""&lt;/span&gt;, lancamento: new Date&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2021-02-07"&lt;/span&gt;&lt;span class="o"&gt;)})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como vimos anteriormente, o comando &lt;em&gt;insertOne&lt;/em&gt; insere um documento na coleção especificada no &lt;strong&gt;MongoDB&lt;/strong&gt;. Você pode usar &lt;em&gt;insertMany()&lt;/em&gt; para inserir vários documentos de uma vez:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.membros.insertMany&lt;span class="o"&gt;([&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt;titulo: &lt;span class="s2"&gt;"A Filha do Tempo e as Armas Primervas"&lt;/span&gt;, autor: &lt;span class="s2"&gt;"Rod Zandonadi"&lt;/span&gt;, editora: &lt;span class="s2"&gt;"Griots"&lt;/span&gt;, lancamento: new Date&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2022-02-07"&lt;/span&gt;&lt;span class="o"&gt;)}&lt;/span&gt;,
  &lt;span class="o"&gt;{&lt;/span&gt;titulo: &lt;span class="s2"&gt;"A Filha do Tempo e os Escolhidos dos Primeiros"&lt;/span&gt;, autor: &lt;span class="s2"&gt;"Rod Zandonadi"&lt;/span&gt;, editora: &lt;span class="s2"&gt;"Griots"&lt;/span&gt;, lancamento: new Date&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2023-02-07"&lt;/span&gt;&lt;span class="o"&gt;)}&lt;/span&gt;,
  &lt;span class="o"&gt;{&lt;/span&gt;titulo: &lt;span class="s2"&gt;"Por Nidavellir"&lt;/span&gt;, autor: &lt;span class="s2"&gt;"Rod Zandonadi"&lt;/span&gt;, editora: &lt;span class="s2"&gt;"Griots"&lt;/span&gt;, lancamento: new Date&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2022-02-07"&lt;/span&gt;&lt;span class="o"&gt;)}&lt;/span&gt;,
  &lt;span class="o"&gt;{&lt;/span&gt;titulo: &lt;span class="s2"&gt;"Percy Jackson e o Último Olimpiano"&lt;/span&gt;, autor: &lt;span class="s2"&gt;"Rick Riordan"&lt;/span&gt;, editora: &lt;span class="s2"&gt;"Pendragon"&lt;/span&gt;, lancamento: new Date&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2023-07-12"&lt;/span&gt;&lt;span class="o"&gt;)}&lt;/span&gt;
&lt;span class="o"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Consultar documentos no **MongoDB&lt;/strong&gt;:**&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.find&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Já aprendemos o comando &lt;em&gt;find&lt;/em&gt; retorna todos os documentos na coleção especificada.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consultar documentos com filtro no **MongoDB&lt;/strong&gt;:**&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.nome_da_colecao.find&lt;span class="o"&gt;({&lt;/span&gt;campo: valor&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso retorna os documentos que correspondem ao filtro especificado. Por exemplo, {editora: "Griots"} retornará os documentos com o campo &lt;em&gt;editora&lt;/em&gt; igual a &lt;em&gt;Griots&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.find&lt;span class="o"&gt;({&lt;/span&gt;editora: &lt;span class="s2"&gt;"Griots"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos consultar também os autores:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.find&lt;span class="o"&gt;({&lt;/span&gt;autor: &lt;span class="s2"&gt;"Rick Riordan"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou qualquer outro campo que exista na coleção.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Atualizar um documento no **MongoDB&lt;/strong&gt;:**&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.nome_da_colecao.updateOne&lt;span class="o"&gt;({&lt;/span&gt;filtro&lt;span class="o"&gt;}&lt;/span&gt;, &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$set&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;campo: novo_valor&lt;span class="o"&gt;}})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse comando atualiza um documento que corresponda ao filtro especificado. Um uso comum é realizar a atualização pelo ID. Você pode pegar esse ID com o comando &lt;em&gt;find&lt;/em&gt;, que lista todos os documentos da coleção. Vamos supor que você queria listar todos os livros da editora &lt;em&gt;Griots&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.find&lt;span class="o"&gt;({&lt;/span&gt;editora: &lt;span class="s2"&gt;"Griots"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora é só escolher o documento que você quer atualizar, e inserir o valor do &lt;em&gt;_id&lt;/em&gt; no comando &lt;em&gt;updateOne&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Para copiar o ID do terminal, selecione o ID, clique com o botão direito sobre a seleção e escolha &lt;em&gt;copiar&lt;/em&gt;; ou, depois de selecionar o ID, aperte as teclas &lt;em&gt;CTRL + SHIFT + C&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Para colar a informação no terminal, repita os passos anteriores, mas escolha &lt;em&gt;colar&lt;/em&gt; depois de clicar com o botão direito; e use &lt;em&gt;CTRL + SHIFT + V&lt;/em&gt; para colar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.updateOne&lt;span class="o"&gt;(&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt; _id: ObjectId&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"id_do_documento"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
  &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;$set&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt; campo: novo_valor &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;em&gt;updateMany()&lt;/em&gt; para atualizar vários documentos. Vamos supor que você queira adicionar o campo &lt;em&gt;ilustrador&lt;/em&gt; a todos os livros da editora &lt;em&gt;Griots&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; db.minha_colecao.updateMany&lt;span class="o"&gt;(&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt; editora: &lt;span class="s2"&gt;"Griots"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;,
  &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;$set&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt; ilustrador: &lt;span class="s2"&gt;"Rodzanart"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Excluir documentos no **MongoDB&lt;/strong&gt;:**&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.nome_da_colecao.deleteOne&lt;span class="o"&gt;({&lt;/span&gt;filtro&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O comando &lt;em&gt;deleteOne&lt;/em&gt; exclui um documento que corresponda ao filtro especificado. Vamos criar um livro com o nome errado, e excluí-lo com base no nome.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.insertOne&lt;span class="o"&gt;({&lt;/span&gt;titulo: &lt;span class="s2"&gt;"Livro para excluir"&lt;/span&gt;, autor: &lt;span class="s2"&gt;"Rod Zandonadi"&lt;/span&gt;, editora: &lt;span class="s2"&gt;"Forgus"&lt;/span&gt;, lancamento: new Date&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2021-02-07"&lt;/span&gt;&lt;span class="o"&gt;)})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E agora usaremos o comando &lt;em&gt;deleteOne&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.deleteOne&lt;span class="o"&gt;({&lt;/span&gt; titulo: &lt;span class="s2"&gt;"Livro para excluir"&lt;/span&gt; &lt;span class="o"&gt;})&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Que tal confirmarmos com o comando &lt;em&gt;find&lt;/em&gt;, filtrando pela editora &lt;em&gt;Forgus&lt;/em&gt;?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.find&lt;span class="o"&gt;({&lt;/span&gt;editora: &lt;span class="s2"&gt;"Forgus"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vamos usar insertMany para criar três livros e deletá-los usando &lt;em&gt;deleteMany()&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.membros.insertMany&lt;span class="o"&gt;([&lt;/span&gt;
  &lt;span class="o"&gt;{&lt;/span&gt;titulo: &lt;span class="s2"&gt;"Livro para excluir I"&lt;/span&gt;, autor: &lt;span class="s2"&gt;"Rod Zandonadi"&lt;/span&gt;, editora: &lt;span class="s2"&gt;"Forgus"&lt;/span&gt;, lancamento: new Date&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2022-02-07"&lt;/span&gt;&lt;span class="o"&gt;)}&lt;/span&gt;,
  &lt;span class="o"&gt;{&lt;/span&gt;titulo: &lt;span class="s2"&gt;"Livro para excluir II"&lt;/span&gt;, autor: &lt;span class="s2"&gt;"Rod Zandonadi"&lt;/span&gt;, editora: &lt;span class="s2"&gt;"Forgus"&lt;/span&gt;, lancamento: new Date&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2023-02-07"&lt;/span&gt;&lt;span class="o"&gt;)}&lt;/span&gt;,
  &lt;span class="o"&gt;{&lt;/span&gt;titulo: &lt;span class="s2"&gt;"Livro para excluir III"&lt;/span&gt;, autor: &lt;span class="s2"&gt;"Rod Zandonadi"&lt;/span&gt;, editora: &lt;span class="s2"&gt;"Forgus"&lt;/span&gt;, lancamento: new Date&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2022-02-07"&lt;/span&gt;&lt;span class="o"&gt;)}&lt;/span&gt;,
&lt;span class="o"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.minha_colecao.deleteMany&lt;span class="o"&gt;({&lt;/span&gt; editora: &lt;span class="s2"&gt;"Forgus"&lt;/span&gt; &lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Falta agora conferir se todos os livros da editora &lt;em&gt;Forgus&lt;/em&gt; foram excluí-dos, com o comando &lt;em&gt;find&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.find&lt;span class="o"&gt;({&lt;/span&gt;editora: &lt;span class="s2"&gt;"Forgus"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Contar documentos no **MongoDB&lt;/strong&gt;:**&lt;/p&gt;

&lt;p&gt;Esse é um bônus no nosso &lt;em&gt;CRUD&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;O comando &lt;em&gt;countDocuments&lt;/em&gt; retorna o número de documentos que correspondem ao filtro especificado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.minha_colecao.countDocuments&lt;span class="o"&gt;({&lt;/span&gt;filtro&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para saber quantos livros da editora &lt;em&gt;Griots&lt;/em&gt; temos em nosso sistema, basta usar o comando da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;db.livros.countDocuments&lt;span class="o"&gt;({&lt;/span&gt;editora: &lt;span class="s2"&gt;"Griots"&lt;/span&gt;&lt;span class="o"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esses são apenas alguns comandos básicos do &lt;strong&gt;MongoDB&lt;/strong&gt; para começar. O *&lt;strong&gt;&lt;em&gt;MongoDB&lt;/em&gt;&lt;/strong&gt;* oferece uma ampla variedade de recursos e comandos avançados para manipulação de dados. Se vocês gostarem do artigo, trarei mais tutoriais para nos aprofundarmos no &lt;strong&gt;MongoDB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Abração pessoal, e até a próxima.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Como adicionar o Bootstrap ao Next.js</title>
      <dc:creator>rodrigozan</dc:creator>
      <pubDate>Mon, 01 May 2023 13:00:00 +0000</pubDate>
      <link>https://dev.to/rodrigozan/como-adicionar-o-bootstrap-ao-nextjs-307o</link>
      <guid>https://dev.to/rodrigozan/como-adicionar-o-bootstrap-ao-nextjs-307o</guid>
      <description>&lt;p&gt;Neste artigo você aprenderá como adicionar corretamente o &lt;strong&gt;Bootstrap&lt;/strong&gt; ao seu projeto Next.js.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Bootstrap&lt;/strong&gt; é um framework front-end de código aberto amplamente utilizado para desenvolvimento de sites e aplicações web responsivas. Ele é projetado para ajudar os desenvolvedores a criar interfaces de usuário mais rapidamente e com menos esforço, fornecendo uma série de componentes pré-construídos, como botões, formulários, menus, tabelas, entre outros.&lt;/p&gt;

&lt;p&gt;O framework é baseado em HTML, CSS e JavaScript, e é compatível com os principais navegadores web. Ele utiliza uma grade de 12 colunas para ajudar a criar layouts responsivos e adaptáveis a diferentes tamanhos de tela e dispositivos móveis. Além disso, o &lt;strong&gt;Bootstrap&lt;/strong&gt; também oferece uma ampla variedade de plugins e extensões que podem ser adicionados para estender suas funcionalidades.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como adicionar o &lt;strong&gt;Bootstrap&lt;/strong&gt; ao Next.js
&lt;/h2&gt;

&lt;p&gt;Primeiro crie um projeto Next.js com &lt;code&gt;npm&lt;/code&gt; ou &lt;code&gt;yarn&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-next-app my-app
&lt;span class="c"&gt;# ou &lt;/span&gt;
yarn create next-app my-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Entre no diretório &lt;code&gt;my-app&lt;/code&gt; e siga as instruções da instalação.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;my-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Abra um novo terminal, navegue até o diretório &lt;code&gt;my-app&lt;/code&gt; e instale o bootstrap.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;bootstrap 
ou 
yarn add bootstrap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois criamos uma página &lt;code&gt;_app.js&lt;/code&gt; no diretório &lt;code&gt;Pages&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;pages/_app.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adicione o código a seguir no &lt;code&gt;_app.js&lt;/code&gt;. Preste atenção, pois o Bootstrap deve ser importado antes do seu arquivo CSS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bootstrap/dist/css/bootstrap.min.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../css/customcss.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Head&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next/head&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pageProps&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Head&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;viewport&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;width=device-width, initial-scale=1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Head&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{...&lt;/span&gt;&lt;span class="nx"&gt;pageProps&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Atente para a tag meta="viewport", responsável pela responsividade da aplicação.&lt;/p&gt;

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

&lt;p&gt;Espero que esse rápido artigo tenha te ajudado a utilizar o &lt;strong&gt;Bootstrap&lt;/strong&gt; no Next.js.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
