{"id":868,"date":"2024-10-15T22:06:36","date_gmt":"2024-10-16T01:06:36","guid":{"rendered":"https:\/\/adrianosantostreina.com.br\/blog\/?p=868"},"modified":"2024-10-20T17:59:48","modified_gmt":"2024-10-20T20:59:48","slug":"normas-de-codificacao-em-delphi-organize-seu-codigo","status":"publish","type":"post","link":"https:\/\/adrianosantostreina.com.br\/blog\/normas-de-codificacao-em-delphi-organize-seu-codigo\/","title":{"rendered":"Normas de codifica\u00e7\u00e3o em Delphi. Organize seu c\u00f3digo!"},"content":{"rendered":"\n<p>No universo do desenvolvimento de software, a organiza\u00e7\u00e3o e a consist\u00eancia do c\u00f3digo n\u00e3o s\u00e3o apenas recomenda\u00e7\u00f5es: s\u00e3o pilares fundamentais para projetos eficientes e sustent\u00e1veis. A ado\u00e7\u00e3o de normas de codifica\u00e7\u00e3o, sejam elas baseadas em padr\u00f5es de mercado ou personalizadas de acordo com as necessidades da empresa, \u00e9 uma pr\u00e1tica essencial para garantir que todos os membros de uma equipe sigam uma mesma linha de pensamento e possam colaborar de forma harm\u00f4nica.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Essas normas ajudam a reduzir ambiguidades e facilitam a leitura e a manuten\u00e7\u00e3o do c\u00f3digo, al\u00e9m de minimizar retrabalhos e erros. Em equipes maiores, a utiliza\u00e7\u00e3o de padr\u00f5es bem definidos garante que o trabalho de um programador possa ser facilmente compreendido por outro, mesmo em projetos longos ou em situa\u00e7\u00f5es onde h\u00e1 rotatividade de profissionais. Isso \u00e9 especialmente relevante no desenvolvimento com Delphi, onde as aplica\u00e7\u00f5es podem crescer rapidamente em complexidade e a necessidade de clareza no c\u00f3digo se torna essencial para evitar problemas durante a manuten\u00e7\u00e3o.<\/p>\n\n\n\n<p>Al\u00e9m disso, as normas de codifica\u00e7\u00e3o trazem benef\u00edcios para o pr\u00f3prio desenvolvedor. Elas estabelecem uma rotina clara e consistente, diminuindo o tempo gasto na tomada de decis\u00f5es triviais e permitindo que a equipe se concentre mais na l\u00f3gica e na solu\u00e7\u00e3o dos problemas. Empresas que adotam padr\u00f5es internos criam uma identidade pr\u00f3pria em seus projetos, enquanto a utiliza\u00e7\u00e3o de normas da comunidade pode facilitar a integra\u00e7\u00e3o com projetos externos e o uso de bibliotecas populares.<\/p>\n\n\n\n<p>Neste artigo, voc\u00ea encontrar\u00e1 um guia completo de normas que ajudar\u00e3o voc\u00ea a organizar seu c\u00f3digo em Delphi e elevar a qualidade dos seus projetos. Prepare-se para um mergulho nas melhores pr\u00e1ticas que v\u00e3o transformar o modo como voc\u00ea escreve e estrutura seu c\u00f3digo!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Padr\u00f5es de Sintaxe e Organiza\u00e7\u00e3o de C\u00f3digo<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>1. Indenta\u00e7\u00e3o e Margens<\/strong><\/h4>\n\n\n\n<p>A indenta\u00e7\u00e3o correta do c\u00f3digo \u00e9 essencial para garantir sua legibilidade e manuten\u00e7\u00e3o. No Delphi, o uso recomendado \u00e9 de <strong>dois espa\u00e7os por n\u00edvel de indenta\u00e7\u00e3o<\/strong>, sem a utiliza\u00e7\u00e3o de tabula\u00e7\u00f5es, garantindo uniformidade entre diferentes editores.<\/p>\n\n\n\n<p>A margem direita do c\u00f3digo deve ser ajustada para <strong>120 caracteres<\/strong>, evitando que linhas longas dificultem a leitura. Quando um comando ultrapassa esse limite, ele deve ser dividido em m\u00faltiplas linhas, com cada nova linha <strong>indentada dois espa\u00e7os<\/strong> em rela\u00e7\u00e3o \u00e0 anterior. Isso facilita a visualiza\u00e7\u00e3o e a compreens\u00e3o de comandos complexos.<\/p>\n\n\n\n<p>\ud83d\udfe9 Exemplo correto:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">for lItem in Itens do\n  if lItem.Ativo then\n    ProcessarItem(lItem);\n<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2. Uso Correto do <code>begin..end<\/code><\/strong><\/h4>\n\n\n\n<p>O par <code>begin..end<\/code> \u00e9 fundamental para delimitar blocos de c\u00f3digo, mas seu uso inadequado pode prejudicar a legibilidade. A regra \u00e9 clara: <strong>sempre iniciar o <code>begin<\/code> em uma nova linha<\/strong>, alinhado com o comando que o precede. Isso evita confus\u00f5es e mant\u00e9m a estrutura do c\u00f3digo previs\u00edvel.<\/p>\n\n\n\n<p>\ud83d\udfe9 Exemplo correto:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">if Condicao then\nbegin\n  ExecutarAcao;\nend;\n<\/pre><\/div>\n\n\n\n<p>\ud83d\udfe5 Exemplo incorreto:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">if Condicao then begin ExecutarAcao; end;\n<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>3. Par\u00eanteses e Espa\u00e7amento<\/strong><\/h4>\n\n\n\n<p>\u00c9 importante evitar espa\u00e7os desnecess\u00e1rios entre par\u00eanteses e operadores. A falta de aten\u00e7\u00e3o a esse detalhe pode deixar o c\u00f3digo visualmente inconsistente e mais dif\u00edcil de ler.<\/p>\n\n\n\n<p>\ud83d\udfe9 Exemplo correto:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">Resultado := (Base * Altura) \/ 2;\n<\/pre><\/div>\n\n\n\n<p>\ud83d\udfe5 Exemplo incorreto:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">Resultado := ( Base * Altura ) \/ 2;\n<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>4. Case Sensitivity e Palavras Reservadas<\/strong><\/h4>\n\n\n\n<p>Seguir a padroniza\u00e7\u00e3o para o uso de palavras reservadas e tipos primitivos \u00e9 crucial. No Delphi, as palavras reservadas como <code>begin<\/code>, <code>end<\/code>, <code>if<\/code> e tipos primitivos como <code>Integer<\/code> ou <code>string<\/code> devem ser <strong>escritas em letras min\u00fasculas<\/strong> <strong>e mai\u00fasculas<\/strong> (conforme a palavra) para manter a consist\u00eancia com as conven\u00e7\u00f5es da linguagem.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>5. Estrutura\u00e7\u00e3o de Blocos de Comando<\/strong><\/h4>\n\n\n\n<p>A forma como blocos de comandos s\u00e3o estruturados pode ter um impacto significativo na clareza do c\u00f3digo. No Delphi:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Comando <code>if<\/code>:<\/strong> Quando h\u00e1 m\u00faltiplas condi\u00e7\u00f5es, organize-as da mais simples para a mais complexa.<\/li>\n\n\n\n<li><strong>Comando <code>case<\/code>:<\/strong> Os valores devem ser organizados em ordem crescente, e cada bloco de caso n\u00e3o deve ultrapassar cinco linhas de c\u00f3digo, incluindo o par <code>begin..end<\/code>, se necess\u00e1rio.<\/li>\n<\/ul>\n\n\n\n<p>Exemplo de estrutura\u00e7\u00e3o do comando <code>case<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">case Valor of\n  1..10: ProcessarFaixa1;\n  11..20: ProcessarFaixa2;\nelse\n  raise Exception.Create('Valor inesperado!');\nend;\n<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Exemplo Pr\u00e1tico: Algoritmo de Cria\u00e7\u00e3o de Log com TextFile<\/strong><\/h3>\n\n\n\n<p>Vejamos um exemplo mais pr\u00e1tico para entendermos melhor tudo isso.<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">\ud83d\udfe5 <strong>Vers\u00e3o Incorreta<\/strong><\/h6>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">procedure CriarLog(const Mensagem: string);\nvar logFile: TextFile; nomeArquivo, mensagemFinal: string;\nbegin\n  nomeArquivo := 'log.txt';\n  AssignFile(logFile, nomeArquivo); Append(logFile);\n  mensagemFinal := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now) + ' - ' + Mensagem;\n  if FileExists(nomeArquivo) then\n    WriteLn(logFile, mensagemFinal)\n  else begin WriteLn(logFile, 'Arquivo criado: ' + mensagemFinal); end;\n  CloseFile(logFile); \nend;\n<\/pre><\/div>\n\n\n\n<p><strong>Problemas na vers\u00e3o incorreta:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A <strong>declara\u00e7\u00e3o das vari\u00e1veis<\/strong> est\u00e1 desalinhada e sem a devida clareza.<\/li>\n\n\n\n<li>O comando <code>begin..end<\/code> est\u00e1 <strong>mal posicionado<\/strong> e em uma \u00fanica linha.<\/li>\n\n\n\n<li>Falta <strong>quebra de linhas<\/strong> entre se\u00e7\u00f5es do c\u00f3digo.<\/li>\n\n\n\n<li><strong>Espa\u00e7amento inadequado<\/strong> em torno de par\u00eanteses e operadores.<\/li>\n\n\n\n<li>O bloco n\u00e3o segue a <strong>margem de 120 caracteres<\/strong>, dificultando a leitura.<\/li>\n<\/ol>\n\n\n\n<h6 class=\"wp-block-heading\">\ud83d\udfe5 <strong>Vers\u00e3o Corrigida<\/strong><\/h6>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \">procedure CriarLog(const Mensagem: string);\nvar\n  LogFile: TextFile;\n  NomeArquivo: string;\n  MensagemFinal: string;\nbegin\n  NomeArquivo := 'log.txt';\n  \n  AssignFile(LogFile, NomeArquivo);\n  \n  \/\/ Abre o arquivo em modo de anexo, cria se n\u00e3o existir\n  if FileExists(NomeArquivo) then\n    Append(LogFile)\n  else\n    Rewrite(LogFile);\n\n  \/\/ Formata a mensagem com timestamp\n  MensagemFinal := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now) + \n                   ' - ' + Mensagem;\n  \n  \/\/ Escreve a mensagem no arquivo\n  WriteLn(LogFile, MensagemFinal);\n  \n  \/\/ Fecha o arquivo ap\u00f3s a escrita\n  CloseFile(LogFile);\nend;\n<\/pre><\/div>\n\n\n\n<p><strong>O que foi corrigido<\/strong>?<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Declara\u00e7\u00e3o de vari\u00e1veis<\/strong> organizada e com uma vari\u00e1vel por linha.<\/li>\n\n\n\n<li><strong>Blocos <code>begin..end<\/code><\/strong> corretamente posicionados e indentados.<\/li>\n\n\n\n<li>Uso de <strong>quebras de linha<\/strong> para separar se\u00e7\u00f5es l\u00f3gicas do c\u00f3digo.<\/li>\n\n\n\n<li><strong>Espa\u00e7amento consistente<\/strong> em torno de operadores e par\u00eanteses.<\/li>\n\n\n\n<li>O c\u00f3digo foi reestruturado para <strong>n\u00e3o ultrapassar a margem<\/strong> de 120 caracteres.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>O que vir\u00e1 a seguir?<\/strong><\/h3>\n\n\n\n<p>Neste primeiro artigo, exploramos a import\u00e2ncia da sintaxe clara e da organiza\u00e7\u00e3o do c\u00f3digo, demonstrando como a aplica\u00e7\u00e3o de normas pode elevar a qualidade e a manutenibilidade dos seus projetos em Delphi. No pr\u00f3ximo artigo, vamos nos aprofundar na <strong>gest\u00e3o de fluxo e tratamento de exce\u00e7\u00f5es<\/strong>. Veremos como comandos como <code>if<\/code>, <code>case<\/code> e <code>repeat<\/code> podem ser usados de maneira eficiente e as melhores pr\u00e1ticas para capturar e tratar erros de forma segura, evitando armadilhas comuns.<\/p>\n\n\n\n<p>Prepare-se para descobrir como um fluxo de controle bem estruturado pode evitar dores de cabe\u00e7a e transformar seu c\u00f3digo em uma ferramenta de alta performance!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Participe da Comunidade no Telegram<\/h3>\n\n\n\n<p>\ud83d\ude80 Quer continuar essa discuss\u00e3o e trocar ideias com outros desenvolvedores? Junte-se \u00e0 nossa comunidade no Telegram! L\u00e1, voc\u00ea pode comentar sobre o que achou deste artigo, tirar suas d\u00favidas e compartilhar suas experi\u00eancias com Delphi e ainda discutir ou tirar suas d\u00favidas sobre os mais variados temas em uma comunidade com mais de 1.000 desenvolvedores.<\/p>\n\n\n\n<p>\ud83d\udd17 <a href=\"https:\/\/t.me\/AdrianoSantosCommunity\" target=\"_blank\" rel=\"noreferrer noopener\">Clique aqui para entrar na comunidade<\/a><\/p>\n\n\n\n<p>Te vejo l\u00e1!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Conclus\u00e3o<\/strong><\/h3>\n\n\n\n<p>Seguir normas de codifica\u00e7\u00e3o n\u00e3o \u00e9 apenas uma formalidade, mas uma pr\u00e1tica essencial para garantir a clareza, a consist\u00eancia e a efici\u00eancia do seu c\u00f3digo. A sintaxe bem definida, os padr\u00f5es de nomenclatura e o uso correto de blocos de c\u00f3digo proporcionam um ambiente de trabalho organizado, onde todos os desenvolvedores falam a mesma &#8220;linguagem&#8221; ao programar. Isso \u00e9 fundamental em equipes colaborativas e em projetos de longo prazo, onde a facilidade de manuten\u00e7\u00e3o faz toda a diferen\u00e7a.<\/p>\n\n\n\n<p>Ao implementar as boas pr\u00e1ticas descritas aqui, voc\u00ea estar\u00e1 construindo uma base s\u00f3lida para seus projetos em Delphi. Pequenas mudan\u00e7as na forma como voc\u00ea estrutura seu c\u00f3digo podem gerar um impacto significativo no desempenho da aplica\u00e7\u00e3o e na qualidade do produto final. Seja fiel a essas normas e colha os frutos de um c\u00f3digo mais claro, limpo e eficiente.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Adriano Santos<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>No universo do desenvolvimento de software, a organiza\u00e7\u00e3o e a consist\u00eancia do c\u00f3digo n\u00e3o s\u00e3o apenas recomenda\u00e7\u00f5es: s\u00e3o pilares fundamentais para projetos eficientes e sustent\u00e1veis. A ado\u00e7\u00e3o de normas de codifica\u00e7\u00e3o, sejam elas baseadas em padr\u00f5es de mercado ou personalizadas de acordo com as necessidades da empresa, \u00e9 uma pr\u00e1tica essencial para garantir que todos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":870,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-868","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/868","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/comments?post=868"}],"version-history":[{"count":2,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/868\/revisions"}],"predecessor-version":[{"id":871,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/posts\/868\/revisions\/871"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media\/870"}],"wp:attachment":[{"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/media?parent=868"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/categories?post=868"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adrianosantostreina.com.br\/blog\/wp-json\/wp\/v2\/tags?post=868"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}