{"id":6479,"date":"2025-01-11T12:34:33","date_gmt":"2025-01-11T12:34:33","guid":{"rendered":"https:\/\/howtogeek.blog\/pt\/?p=6479"},"modified":"2025-01-11T12:34:33","modified_gmt":"2025-01-11T12:34:33","slug":"create-your-first-web-application-a-beginners-guide-to-building-a-simple-notes-app-and-word-counter","status":"publish","type":"post","link":"https:\/\/howtogeek.blog\/pt\/create-your-first-web-application-a-beginners-guide-to-building-a-simple-notes-app-and-word-counter\/","title":{"rendered":"Crie seu primeiro aplicativo da Web: um guia para iniciantes sobre como criar um aplicativo de notas simples e um contador de palavras"},"content":{"rendered":"<p>Come\u00e7ar sua jornada de codifica\u00e7\u00e3o pode parecer assustador em meio a uma escolha esmagadora de linguagens e frameworks. Voc\u00ea pode at\u00e9 pensar em deixar uma IA cuidar de tudo! No entanto, programar para a web pode ser emocionante, acess\u00edvel e completamente gratuito!<\/p>\n<h2 id=\"what-youll-build\">O que voc\u00ea vai construir<\/h2>\n<p>Neste tutorial, voc\u00ea criar\u00e1 um aplicativo web simples projetado para armazenar notas de texto enquanto conta os caracteres e palavras dentro dessas notas.<\/p>\n<p>Este aplicativo salva dados persistentemente, permitindo que ele recupere texto mesmo ap\u00f3s atualizar a p\u00e1gina ou reabri-la. \u00c9 uma solu\u00e7\u00e3o pr\u00e1tica para manter acesso r\u00e1pido a texto importante, seja endere\u00e7os, URLs ou qualquer outra coisa.<\/p>\n<figure class=\"wp-block-image\"><img alt=\"Um exemplo de aplicativo web de texto simples mostrando notas, incluindo uma entrada de calend\u00e1rio e uma lista de URLs.\" class=\"wp-image\" decoding=\"async\" height=\"569\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-app-example.webp\" title=\"Um exemplo de aplicativo web de texto simples mostrando notas, incluindo uma entrada de calend\u00e1rio e uma lista de URLs.\" width=\"960\"\/><\/figure>\n<p>Al\u00e9m disso, o aplicativo rastreia contagens de caracteres e palavras, fornecendo uma excelente introdu\u00e7\u00e3o \u00e0 manipula\u00e7\u00e3o de strings. Embora o aplicativo seja b\u00e1sico em design, este tutorial capacita voc\u00ea com habilidades fundamentais de desenvolvimento de aplicativos da web, desbloqueando vastas possibilidades em codifica\u00e7\u00e3o.<\/p>\n<h2 id=\"how-youll-build-it\">Como voc\u00ea vai construir isso<\/h2>\n<p>Embora os aplicativos da web possam variar significativamente, eles normalmente integram tr\u00eas tecnologias essenciais: HTML, CSS e JavaScript. Cada um desses componentes tem uma fun\u00e7\u00e3o crucial no desenvolvimento da web:<\/p>\n<ul>\n<li><strong>HTML:<\/strong> Esta \u00e9 a estrutura do seu aplicativo web, estabelecendo como o conte\u00fado \u00e9 organizado. HTML define se o texto \u00e9 um par\u00e1grafo, t\u00edtulo ou um item de lista.<\/li>\n<li><strong>CSS:<\/strong> Cascading Style Sheets adicionam estilo ao seu conte\u00fado, permitindo que voc\u00ea altere cores, fontes e layout. Voc\u00ea pode usar CSS para deixar elementos em negrito, ajustar bordas e posicionar elementos na tela.<\/li>\n<li><strong>JavaScript:<\/strong> Esta linguagem de programa\u00e7\u00e3o \u00e9 essencial para infundir funcionalidade em seu aplicativo web. JavaScript pode criar experi\u00eancias interativas, como mostrar\/ocultar elementos ou construir aplicativos complexos como jogos.<\/li>\n<\/ul>\n<figure class=\"wp-block-image\"><img alt=\"A p\u00e1gina inicial do site web.dev com recursos de aprendizagem para HTML, CSS e JavaScript.\" class=\"wp-image\" decoding=\"async\" height=\"734\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-dev-homepage.webp\" title=\"A p\u00e1gina inicial do site web.dev com recursos de aprendizagem para HTML, CSS e JavaScript.\" width=\"1388\"\/><\/figure>\n<h2 id=\"the-app-structure\">A estrutura do aplicativo<\/h2>\n<p>O aplicativo que voc\u00ea est\u00e1 prestes a criar \u00e9 composto por tr\u00eas arquivos simples: <code>index.html<\/code>, <code>styles.css<\/code>e <code>script.js<\/code>.<\/p>\n<p>N\u00e3o h\u00e1 requisitos avan\u00e7ados para executar este aplicativo \u2014 apenas um navegador da web \u00e9 suficiente. Como este \u00e9 um aplicativo front-end, n\u00e3o h\u00e1 necessidade de linguagens de script de back-end como PHP ou servidores locais. Ap\u00f3s a conclus\u00e3o, basta abrir <code>index.html<\/code>no seu navegador para ver seu aplicativo em a\u00e7\u00e3o.<\/p>\n<p>Este aplicativo utiliza a API de armazenamento da Web para salvar texto, permitindo reter informa\u00e7\u00f5es sem precisar gravar em arquivos de disco, j\u00e1 que o JavaScript n\u00e3o tem acesso ao sistema de arquivos.<\/p>\n<h2 id=\"how-to-build-the-note-taker\">Como construir o Note Taker<\/h2>\n<p>Comece criando os tr\u00eas arquivos necess\u00e1rios no mesmo diret\u00f3rio. Como alternativa, voc\u00ea pode baixar os arquivos deste <a href=\"https:\/\/github.com\/bobbykjack\/text\" target=\"_blank\">reposit\u00f3rio do GitHub<\/a> .<\/p>\n<h3 id=\"building-the-structure-with-html\">Construindo a estrutura com HTML<\/h3>\n<p>O <code>index.html<\/code>arquivo define a estrutura de conte\u00fado do seu aplicativo. Ele inclui refer\u00eancias aos arquivos CSS e JavaScript, permitindo que o navegador os mescle em uma experi\u00eancia perfeita.<\/p>\n<p>Assim como qualquer documento HTML, a estrutura principal consiste em uma se\u00e7\u00e3o head com metadados e um body contendo o conte\u00fado:<\/p>\n<p> <code><br \/>\n<span>&lt;!DOCTYPE html&gt;<\/span><br \/>\n<span>&lt;html&gt;<\/span><br \/>\n<span>&lt;head&gt;<\/span><br \/>\n<span>...&lt;\/head&gt;<\/span><br \/>\n<span>&lt;body&gt;<\/span><br \/>\n<span>...&lt;\/body&gt;<\/span><br \/>\n<span>&lt;\/html&gt;<\/span><br \/>\n<\/code><\/p>\n<p>A se\u00e7\u00e3o principal cont\u00e9m metadados breves, incluindo o t\u00edtulo da p\u00e1gina (vis\u00edvel na barra de t\u00edtulo do navegador) e um link para o <code>styles.css<\/code>arquivo:<\/p>\n<p> <code><br \/>\n<span>&lt;title&gt;Text&lt;\/title&gt;<\/span><br \/>\n<span>&lt;link rel=\"stylesheet\"href=\"styles.css\"\/&gt;<\/span><br \/>\n<\/code><\/p>\n<p>O corpo \u00e9 mais detalhado, incluindo componentes principais:<\/p>\n<p> <code><br \/>\n<span>&lt;div id=\"counter\"&gt;<\/span><br \/>\n<span>words: &lt;span id=\"words\"&gt;0&lt;\/span&gt;<\/span><br \/>\n<span>\/ characters: &lt;span id=\"chars\"&gt;0&lt;\/span&gt;<\/span><br \/>\n<span>&lt;\/div&gt;<\/span><br \/>\n<span>&lt;textarea id=\"text\"autofocus=\"1\"&gt;&lt;\/textarea&gt;<\/span><br \/>\n<span>&lt;script src=\"script.js\"&gt;&lt;\/script&gt;<\/span><br \/>\n<\/code><\/p>\n<p>O <code>div<\/code>elemento, identificado como \u201ccounter\u201d, abriga as contagens de palavras e caracteres. Ele permanece no topo e atualiza dinamicamente conforme o texto muda.<\/p>\n<p>\u00c9 fundamental observar o uso de <code>id<\/code>atributos \u2014 seus valores exclusivos ajudam a estilizar esses elementos e direcion\u00e1-los para funcionalidade.<\/p>\n<p>O <code>textarea<\/code>fornece uma \u00e1rea para os usu\u00e1rios inserirem texto com o <code>autofocus<\/code>atributo, garantindo que ele esteja pronto para digita\u00e7\u00e3o ap\u00f3s o carregamento da p\u00e1gina. Finalmente, o HTML faz refer\u00eancia ao <code>script.js<\/code>arquivo.<\/p>\n<p>Neste ponto, abra <code>index.html<\/code>em um navegador. Ele n\u00e3o funcionar\u00e1 ainda e pode n\u00e3o parecer muito certo, mas verificar seu progresso em cada est\u00e1gio \u00e9 \u00fatil.<\/p>\n<figure class=\"wp-block-image\"><img alt=\"Uma visualiza\u00e7\u00e3o do aplicativo web de anota\u00e7\u00f5es com estilos de navegador padr\u00e3o, mostrando tudo agrupado no canto superior esquerdo.\" class=\"wp-image\" decoding=\"async\" height=\"569\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-app-no-style.webp\" title=\"Uma visualiza\u00e7\u00e3o do aplicativo web de anota\u00e7\u00f5es com estilos de navegador padr\u00e3o, mostrando tudo agrupado no canto superior esquerdo.\" width=\"960\"\/><\/figure>\n<h3 id=\"making-things-look-good-with-css\">Fazendo as coisas parecerem boas com CSS<\/h3>\n<p>Embora este aplicativo b\u00e1sico n\u00e3o exija grandes ajustes de design, podemos melhorar seu layout com algum estilo.<\/p>\n<p>Primeiro, estabelecemos o estilo do corpo para delinear a apar\u00eancia geral:<\/p>\n<p> <code><br \/>\n<span>body {<\/span><br \/>\n<span> margin: 0;<\/span><br \/>\n<span> padding: 0;<\/span><br \/>\n<span> display: grid;<\/span><br \/>\n<span> min-height: 100vh;<\/span><br \/>\n<span> grid-template-rows: min-content 1fr;<\/span><br \/>\n<span>}<\/span><br \/>\n<\/code><\/p>\n<p>Este CSS emprega <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/CSS_grid_layout\" target=\"_blank\">layout de grade<\/a> para organizar contagens de palavras e caracteres em uma linha estreita acima da textarea. A <code>grid-template-rows<\/code>propriedade determina que a linha de contagem deve ocupar o menor espa\u00e7o poss\u00edvel (min-content) enquanto a textarea preenche o espa\u00e7o restante (1fr).<\/p>\n<p>A linha do contador recebe um estilo b\u00e1sico para distingui-la da textarea, principalmente por meio do seu plano de fundo:<\/p>\n<p> <code><br \/>\n<span>#counter {<\/span><br \/>\n<span> font-family: sans-serif;<\/span><br \/>\n<span> background-color: #f7f7f7;<\/span><br \/>\n<span> text-align: center;<\/span><br \/>\n<span> width: 100%;<\/span><br \/>\n<span> padding: 0 0.5em 0;<\/span><br \/>\n<span>}<\/span><br \/>\n<\/code><\/p>\n<p>A textarea \u00e9 estilizada para garantir que o texto seja leg\u00edvel, permitindo espa\u00e7o em branco adequado:<\/p>\n<p> <code><br \/>\n<span>textarea {<\/span><br \/>\n<span> width: 100%;<\/span><br \/>\n<span> height: 100%;<\/span><br \/>\n<span> font-size: 16pt;<\/span><br \/>\n<span> padding: 1em;<\/span><br \/>\n<span> box-sizing: border-box;<\/span><br \/>\n<span> outline: 0;<\/span><br \/>\n<span> border: none;<\/span><br \/>\n<span> border-top: 1px solid #999;<\/span><br \/>\n<span>}<\/span><br \/>\n<\/code><\/p>\n<figure class=\"wp-block-image\"><img alt=\"O aplicativo de anota\u00e7\u00f5es com estilos personalizados mostra a barra de contagem na parte superior com uma \u00e1rea de texto em tamanho real abaixo.\" class=\"wp-image\" decoding=\"async\" height=\"569\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-app-with-style.webp\" title=\"O aplicativo de anota\u00e7\u00f5es com estilos personalizados mostra a barra de contagem na parte superior com uma \u00e1rea de texto em tamanho real abaixo.\" width=\"960\"\/><\/figure>\n<h3 id=\"adding-functionality-with-javascript\">Adicionando funcionalidade com JavaScript<\/h3>\n<p>Com a base definida, \u00e9 hora de infundir funcionalidade em seu aplicativo \u2014 o c\u00f3digo que lhe d\u00e1 vida!<\/p>\n<p>Antes de mergulhar na codifica\u00e7\u00e3o, \u00e9 essencial delinear a funcionalidade pretendida. Para esta aplica\u00e7\u00e3o, voc\u00ea se concentrar\u00e1 em dois objetivos principais:<\/p>\n<ul>\n<li>Persistir e recarregar o texto inserido.<\/li>\n<li>Atualize a contagem de caracteres e palavras dinamicamente.<\/li>\n<\/ul>\n<p>Essas fun\u00e7\u00f5es exigem atualiza\u00e7\u00f5es para certos elementos do documento. Portanto, comece obtendo refer\u00eancias para esses n\u00f3s usando o <code>getElementById<\/code>m\u00e9todo:<\/p>\n<p> <code><br \/>\n<span>const words = document.getElementById(\"words\");<\/span><br \/>\n<span>const chars = document.getElementById(\"chars\");<\/span><br \/>\n<span>const textarea = document.getElementById(\"text\");<\/span><br \/>\n<\/code><\/p>\n<p>Aqui, <code>words<\/code>, <code>chars<\/code>, e <code>textarea<\/code>correspondem \u00e0s suas respectivas se\u00e7\u00f5es no documento, identificadas por seus atributos de ID.<\/p>\n<p>Em seguida, introduza a interatividade configurando o aplicativo para responder quando o texto for alterado:<\/p>\n<p> <code><br \/>\n<span>textarea.addEventListener(\"input\", function(ev) {<\/span><br \/>\n<span> localStorage.setItem(\"text\", ev.target.value);<\/span><br \/>\n<span> update_counts(ev.target.value);<\/span><br \/>\n<span>});<\/span><br \/>\n<\/code><\/p>\n<p>O <code>addEventListener<\/code>m\u00e9todo vincula uma fun\u00e7\u00e3o para disparar quando um evento especificado ocorre. Neste caso, uma vez que o usu\u00e1rio interage com a textarea, o evento \u201cinput\u201d dispara a fun\u00e7\u00e3o.<\/p>\n<p>Em seguida, a Web Storage API \u00e9 usada para preservar o conte\u00fado atual da textarea, acessado via <code>ev.target.value<\/code>. O <code>setItem<\/code>m\u00e9todo associa uma chave aos dados a serem armazenados.<\/p>\n<p>Para garantir que o texto seja carregado quando o aplicativo for inicializado ou atualizado, adicione outro ouvinte:<\/p>\n<p> <code><br \/>\n<span>window.addEventListener(\"load\", function(ev) {<\/span><br \/>\n<span> var text = localStorage.getItem(\"text\");<\/span><br \/>\n<span> textarea.value = text;<\/span><br \/>\n<span> update_counts(text);<\/span><br \/>\n<span>});<\/span><br \/>\n<\/code><\/p>\n<p>Este listener responde ao evento load da janela. Ao carregar a janela, ele recupera o texto salvo e define o valor da textarea de acordo, enquanto invoca <code>update_counts()<\/code>para atualizar as contagens de palavras e caracteres.<\/p>\n<p>A funcionalidade restante reside na <code>update_counts()<\/code>fun\u00e7\u00e3o, que se parece com isto:<\/p>\n<p> <code><br \/>\n<span>function update_counts(text) {<\/span><br \/>\n<span> chars.innerHTML = text.length;<\/span><br \/>\n<span> words.innerHTML = text.split(' ').length;<\/span><br \/>\n<span>}<\/span><br \/>\n<\/code><\/p>\n<p>Diferentemente de uma textarea, texto simples n\u00e3o tem um atributo value; assim, a <code>innerHTML<\/code>propriedade \u00e9 usada em vez disso. A <code>length<\/code>propriedade de uma string recupera a contagem total de caracteres.<\/p>\n<p>Para quebrar o texto em palavras, usamos <code>text.split(' ')<\/code>, que divide a string em cada caractere de espa\u00e7o, produzindo um array de palavras. A propriedade length do array resultante fornece o n\u00famero de palavras.<\/p>\n<p>No entanto, voc\u00ea pode encontrar alguns desafios com este c\u00f3digo:<\/p>\n<ol>\n<li>Ele n\u00e3o contar\u00e1 corretamente palavras isoladas em uma linha sem caracteres de espa\u00e7o ao redor.<\/li>\n<li>Se nenhum texto estiver presente, ele reportar\u00e1 imprecisamente uma \u00fanica palavra devido ao modo como <code>split<\/code>opera.<\/li>\n<\/ol>\n<p>Para resolver o primeiro problema, considere dividir em uma express\u00e3o regular para contabilizar caracteres de espa\u00e7o em branco: <code>\\s<\/code>. Para resolver o segundo problema, filtre quaisquer strings vazias:<\/p>\n<p> <code><br \/>\n<span> words.innerHTML = text.split(\/\\s\/).filter(function(n) { return n! = ''; }).length;<\/span><br \/>\n<\/code><\/p>\n<figure class=\"wp-block-image\"><img alt=\"O aplicativo da web com texto de exemplo, mostrando contagens precisas de caracteres e palavras.\" class=\"wp-image\" decoding=\"async\" height=\"569\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-app-final.webp\" title=\"O aplicativo da web com texto de exemplo, mostrando contagens precisas de caracteres e palavras.\" width=\"960\"\/><\/figure>\n<p>Criar aplicativos web \u00fateis pode ser feito com apenas alguns arquivos b\u00e1sicos! Voc\u00ea pode estender esse aplicativo simples de anota\u00e7\u00f5es integrando recursos adicionais, como empregar a <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Window\/location\" target=\"_blank\">propriedade window.location<\/a> para acessar URLs ou permitir que v\u00e1rias notas sejam salvas variando os nomes passados \u200b\u200bpara <code>localStorage.setItem<\/code>.<\/p>\n<h3>Insights adicionais<\/h3>\n<h4><strong>1. Quais s\u00e3o os pr\u00e9-requisitos para este tutorial de aplicativo web?<\/strong><\/h4>\n<p>Tudo o que voc\u00ea precisa \u00e9 de um entendimento b\u00e1sico de HTML, CSS e JavaScript. Ferramentas como um editor de texto (por exemplo, VSCode) e um navegador da web tamb\u00e9m ser\u00e3o \u00fateis.<\/p>\n<h4><strong>2. Posso modificar este aplicativo web para adicionar mais recursos?<\/strong><\/h4>\n<p>Absolutamente! Este tutorial fornece uma base. Voc\u00ea pode adicionar funcionalidades como salvar v\u00e1rias notas, categorizar notas ou at\u00e9 mesmo implementar um recurso de pesquisa!<\/p>\n<h4><strong>3. Como funciona a API de armazenamento na Web?<\/strong><\/h4>\n<p>A Web Storage API permite que aplicativos da web armazenem dados no navegador. Ela armazena dados em pares de chave-valor que persistem mesmo depois que o navegador \u00e9 fechado, facilitando a recupera\u00e7\u00e3o posterior.<\/p>\n<p><a class=\"xiaomi\" href=\"https:\/\/www.howtogeek.com\/build-your-first-web-app-a-simple-word-counter\/\" rel=\"noopener noreferrer nofollow\" target=\"_blank\">Fonte e Imagens<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Come\u00e7ar sua jornada de codifica\u00e7\u00e3o pode parecer assustador em meio a uma escolha esmagadora de linguagens e frameworks. Voc\u00ea pode at\u00e9 pensar em deixar uma IA cuidar de tudo! No entanto, programar para a web pode ser emocionante, acess\u00edvel e completamente gratuito! O que voc\u00ea vai construir Neste tutorial, voc\u00ea criar\u00e1 um aplicativo web simples [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[861,205,9],"class_list":["post-6479","post","type-post","status-publish","format-standard","hentry","category-how-to","tag-apps-web-apps","tag-programming","tag-windows"],"acf":[],"_links":{"self":[{"href":"https:\/\/howtogeek.blog\/pt\/wp-json\/wp\/v2\/posts\/6479","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/howtogeek.blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/howtogeek.blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/howtogeek.blog\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/howtogeek.blog\/pt\/wp-json\/wp\/v2\/comments?post=6479"}],"version-history":[{"count":1,"href":"https:\/\/howtogeek.blog\/pt\/wp-json\/wp\/v2\/posts\/6479\/revisions"}],"predecessor-version":[{"id":6480,"href":"https:\/\/howtogeek.blog\/pt\/wp-json\/wp\/v2\/posts\/6479\/revisions\/6480"}],"wp:attachment":[{"href":"https:\/\/howtogeek.blog\/pt\/wp-json\/wp\/v2\/media?parent=6479"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/howtogeek.blog\/pt\/wp-json\/wp\/v2\/categories?post=6479"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/howtogeek.blog\/pt\/wp-json\/wp\/v2\/tags?post=6479"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}