{"id":295,"date":"2018-09-16T20:22:42","date_gmt":"2018-09-16T23:22:42","guid":{"rendered":"http:\/\/lucianodev.com.br\/blog\/?p=295"},"modified":"2018-09-16T20:22:42","modified_gmt":"2018-09-16T23:22:42","slug":"vai-dar-m-coisas-em-programacao-que-vc-ja-fez","status":"publish","type":"post","link":"https:\/\/lucianodev.com.br\/blog\/vai-dar-m-coisas-em-programacao-que-vc-ja-fez\/","title":{"rendered":"Vai dar M! #1 Coisas em programa\u00e7\u00e3o que voc\u00ea j\u00e1 fez sem querer."},"content":{"rendered":"<p><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><span style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" data-mce-type=\"bookmark\" class=\"mce_SELRES_start\">\ufeff<\/span><\/script><br \/>\n<ins class=\"adsbygoogle\" style=\"display: block; text-align: center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-4648498281437791\" data-ad-slot=\"5451138398\"><\/ins><br \/>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script><\/p>\n<p>Ol\u00e1 pessoal, tudo bem ?<\/p>\n<p>\u00c9 muito comum &#8220;N\u00f3s&#8221; desenvolvedores de sistemas cometermos pequenas (ou at\u00e9 grandes) &#8220;falhas&#8221; durante a cria\u00e7\u00e3o de trechos espec\u00edficos de c\u00f3digo que acabam comprometendo o funcionamento de uma aplica\u00e7\u00e3o. Podemos dizer que isso acontece muito com quem est\u00e1 ainda aprendendo a desenvolver algoritmos (independente de qual linguagem seja).<\/p>\n<p>Neste POST irei mostrar &#8220;algumas falhas&#8221; cometidas por alguns programadores durante o desenvolvimento de uma aplica\u00e7\u00e3o.<\/p>\n<p><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><span style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" data-mce-type=\"bookmark\" class=\"mce_SELRES_start\">\ufeff<\/span><\/script><br \/>\n<ins class=\"adsbygoogle\" style=\"display: block; text-align: center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-4648498281437791\" data-ad-slot=\"5451138398\"><\/ins><br \/>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script><\/p>\n<p>&nbsp;<\/p>\n<h2>\u00a01) Colocar &#8220;;&#8221; no lugar errado<\/h2>\n<p>Um dos erros que alguns programadores cometem \u00e9 colocar ponto e v\u00edrgula &#8220;;&#8221; em trechos aonde n\u00e3o deveria haver esse &#8220;token&#8221; (s\u00edmbolo ou elemento que faz parte de uma linguagem de programa\u00e7\u00e3o como v\u00edrgula &#8220;,&#8221; , abre par\u00eanteses &#8220;(&#8221; e etc.). Colocar o ponto e v\u00edrgula em um ponto inadequado do c\u00f3digo n\u00e3o significa que o mesmo N\u00c3O IR\u00c1 COMPILAR, pode at\u00e9 compilar sim (as vezes) e executar (mas em algum ponto vai dar problemas).<\/p>\n<p>Irei demonstrar um exemplo atrav\u00e9s de um algoritmo bem simples. Vamos supor o seguinte enunciado mostrado a\u00a0 seguir:<\/p>\n<blockquote>\n<h4>Desenvolver um algoritmo (em Java) para mostrar na tela n\u00fameros de 1 at\u00e9 10 (usando o loop &#8220;for&#8221;).<\/h4>\n<\/blockquote>\n<p>O enunciado acima trata-se de um exerc\u00edcio de algoritmo bem b\u00e1sico, que as vezes pode ser desenvolvido de forma errada por causa de um &#8220;;&#8221; (j\u00e1 corrigi muito meus alunos por conta desses pequenos detalhes).<\/p>\n<p>Bom, vamos l\u00e1. Para esse exerc\u00edcio vamos considerar o c\u00f3digo em Java abaixo:<\/p>\n<pre class=\"lang:java decode:true\">public class Mostra {\r\n\t\r\n\tpublic static void main(String args[])\r\n\t{\r\n\t\tint count;\r\n\t\t\r\n\t\tfor(count = 1; count &lt;= 10; count++);\r\n\t\t  System.out.println(count);\r\n\t\t\t\t\t\r\n\t}\r\n\r\n}\r\n<\/pre>\n<p>O c\u00f3digo acima ir\u00e1 executar (pois n\u00e3o est\u00e1 sintaticamente errado), mas o resultado n\u00e3o sa\u00edra como esperado, mostrando na tela a seguinte impress\u00e3o:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-302 size-full\" src=\"https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_1.jpg\" alt=\"Vai dar M! #1 Coisas em programa\u00e7\u00e3o que voc\u00ea j\u00e1 fez sem querer.\" width=\"481\" height=\"121\" srcset=\"https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_1.jpg 481w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_1-300x75.jpg 300w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_1-110x28.jpg 110w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_1-420x106.jpg 420w\" sizes=\"auto, (max-width: 481px) 100vw, 481px\" \/><\/p>\n<p>Perceba que ele s\u00f3 mostrou na tela o valor &#8220;11&#8221; e n\u00e3o os n\u00fameros de 1 at\u00e9 10.<\/p>\n<p><strong>Porque isso aconteceu?<\/strong><\/p>\n<p>A raz\u00e3o disso ter acontecido foi por conta de um detalhe: A presen\u00e7a de um &#8220;;&#8221; desnecess\u00e1rio no final da instru\u00e7\u00e3o do loop &#8220;for&#8221;:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-304 size-full\" src=\"https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_2.jpg\" alt=\"Vai dar M! #1 Coisas em programa\u00e7\u00e3o que voc\u00ea j\u00e1 fez sem querer.\" width=\"802\" height=\"170\" srcset=\"https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_2.jpg 802w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_2-300x64.jpg 300w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_2-768x163.jpg 768w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_2-110x23.jpg 110w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_2-420x89.jpg 420w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_2-770x163.jpg 770w\" sizes=\"auto, (max-width: 802px) 100vw, 802px\" \/><\/p>\n<p>A presen\u00e7a do ponto e v\u00edrgula ap\u00f3s a instru\u00e7\u00e3o\u00a0 &#8220;for&#8221; faz entender do ponto de vista do loop que aquilo \u00e9 uma instru\u00e7\u00e3o (vazia) que precisa ser executada (que n\u00e3o produz nenhum efeito). Ent\u00e3o <strong>NUNCA COLOQUE<\/strong> ponto e v\u00edrgula ap\u00f3s o loop. Fica a dica.<\/p>\n<p><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><span style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" data-mce-type=\"bookmark\" class=\"mce_SELRES_start\">\ufeff<\/span><\/script><br \/>\n<ins class=\"adsbygoogle\" style=\"display: block; text-align: center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-4648498281437791\" data-ad-slot=\"5451138398\"><\/ins><br \/>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script><\/p>\n<p>&nbsp;<\/p>\n<h2>2) Loop infinito por aus\u00eancia de instru\u00e7\u00e3o<\/h2>\n<p>Outro erro muito comum \u00e9 a ocorr\u00eancia de &#8220;loops infinitos&#8221; em trechos de c\u00f3digos devido a aus\u00eancia de instru\u00e7\u00f5es que atualiza a condi\u00e7\u00e3o de encerramento do loop. Vamos supor o seguinte exemplo em linguagem &#8220;C&#8221;:<\/p>\n<blockquote>\n<h4>Desenvolver em linguagem &#8220;C&#8221; um algoritmo que mostre na tela n\u00fameros de 1 at\u00e9 100.<\/h4>\n<\/blockquote>\n<p>Para o enunciado mostrado acima vamos considerar o seguinte c\u00f3digo em linguagem &#8220;C&#8221; abaixo:<\/p>\n<pre class=\"lang:c++ decode:true \">#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n\r\nint main()\r\n{\r\n\tint count = 1;\r\n\twhile(count &lt;= 100)\r\n\t{\r\n\t\tprintf(\"%d\\n\",count);\r\n\t}\r\n\treturn 0;\r\n}<\/pre>\n<p>Executando o c\u00f3digo escrito acima teremos o seguinte resultado &#8220;desastroso&#8221; abaixo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-310 size-full\" src=\"https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_3.jpg\" alt=\"Vai dar M! #1 Coisas em programa\u00e7\u00e3o que voc\u00ea j\u00e1 fez sem querer.\" width=\"677\" height=\"342\" srcset=\"https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_3.jpg 677w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_3-300x152.jpg 300w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_3-110x56.jpg 110w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_3-420x212.jpg 420w\" sizes=\"auto, (max-width: 677px) 100vw, 677px\" \/><\/p>\n<p>Bom, podemos ver que nosso c\u00f3digo apresenta uma falha de execu\u00e7\u00e3o (apesar de estar sintaticamente correto). A raz\u00e3o do loop infinito \u00e9 a aus\u00eancia da instru\u00e7\u00e3o de incremento da vari\u00e1vel &#8220;count&#8221; (para que a condi\u00e7\u00e3o de parada do loop possa acontecer). Precisamos ent\u00e3o inserir a instru\u00e7\u00e3o que falta. Vejamos a corre\u00e7\u00e3o do c\u00f3digo, conforme mostrado abaixo:<\/p>\n<pre class=\"lang:c++ mark:10 decode:true \">#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n\r\nint main()\r\n{\r\n\tint count = 1;\r\n\twhile(count &lt;= 100)\r\n\t{\r\n\t\tprintf(\"%d\\n\",count);\r\n            count++; \/\/Incrementa o valor de \"count\" \r\n\t}\r\n\treturn 0;\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><span style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" data-mce-type=\"bookmark\" class=\"mce_SELRES_start\">\ufeff<\/span><\/script><br \/>\n<ins class=\"adsbygoogle\" style=\"display: block; text-align: center;\" data-ad-layout=\"in-article\" data-ad-format=\"fluid\" data-ad-client=\"ca-pub-4648498281437791\" data-ad-slot=\"5451138398\"><\/ins><br \/>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script><\/p>\n<h2>3) Case sensitive<\/h2>\n<p>Nas linguagens de programa\u00e7\u00e3o mais atuais, um dos erros mais comuns s\u00e3o os de &#8220;Case Sensitive&#8221; (ou seja, quando uma linguagem &#8220;difere&#8221; letras mai\u00fasculas das min\u00fasculas). Vejamos o seguinte trecho em HTML\/JavaScript abaixo:<\/p>\n<pre class=\"lang:xhtml decode:true\">&lt;html&gt;\r\n &lt;head&gt;&lt;title&gt;Primeiro p\u00e1gina JS&lt;\/title&gt;&lt;\/head&gt; \r\n &lt;script&gt;\r\n    window.onload = function()\r\n    {\r\n      document.GetElementById(\"out\").innerHTML = \"Estou aprendendo JS\";\r\n    }\r\n &lt;\/script&gt;\r\n &lt;body&gt;\r\n   &lt;output id=\"out\"\/&gt;\r\n &lt;body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p>Se abrirmos essa p\u00e1gina no navegador veremos uma p\u00e1gina vazia (sabemos que quando ocorre um erro em JavaScript, n\u00e3o \u00e9 mostrado na tela nenhuma notifica\u00e7\u00e3o de erro). Para identificarmos se houver algum erro na p\u00e1gina, precisamos abrir a ferramenta de desenvolvedor do navegador (tecla &#8220;F12&#8221;) e em seguida precisamos ver a guia &#8220;Console&#8221;. Vejamos na imagem abaixo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-313 size-full\" src=\"https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_4.jpg\" alt=\"Vai dar M! #1 Coisas em programa\u00e7\u00e3o que voc\u00ea j\u00e1 fez sem querer.\" width=\"595\" height=\"111\" srcset=\"https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_4.jpg 595w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_4-300x56.jpg 300w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_4-110x21.jpg 110w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_4-420x78.jpg 420w\" sizes=\"auto, (max-width: 595px) 100vw, 595px\" \/><\/p>\n<p>Perceba que o erro aponta para o m\u00e9todo &#8220;GetElementById&#8221;. Na teoria esse m\u00e9todo existe, por\u00e9m, o motivo real do erro \u00e9 a forma que ele foi escrito (se escreve &#8220;getElementById&#8221;, com a inicial em min\u00fasculo). Vejamos a vers\u00e3o corrigida abaixo:<\/p>\n<pre class=\"lang:xhtml decode:true\">&lt;html&gt;\r\n &lt;head&gt;&lt;title&gt;Primeiro p\u00e1gina JS&lt;\/title&gt;&lt;\/head&gt; \r\n &lt;script&gt;\r\n    window.onload = function()\r\n    {\r\n      document.getElementById(\"out\").innerHTML = \"Estou aprendendo JS\";\r\n    }\r\n &lt;\/script&gt;\r\n &lt;body&gt;\r\n   &lt;output id=\"out\"\/&gt;\r\n &lt;body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p>Vejamos agora a sua execu\u00e7\u00e3o, conforme mostra a figura abaixo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-314 size-full\" src=\"https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_5.jpg\" alt=\"Vai dar M! #1 Coisas em programa\u00e7\u00e3o que voc\u00ea j\u00e1 fez sem querer.\" width=\"501\" height=\"132\" srcset=\"https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_5.jpg 501w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_5-300x79.jpg 300w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_5-110x29.jpg 110w, https:\/\/lucianodev.com.br\/blog\/wp-content\/uploads\/2018\/09\/img_post_vai_dar_m_5-420x111.jpg 420w\" sizes=\"auto, (max-width: 501px) 100vw, 501px\" \/><\/p>\n<p>Bom pessoal, por hoje \u00e9 s\u00f3<\/p>\n<p>Espero que essas dicas possam ser \u00fateis para voc\u00ea. Compartilhe com seus amigos (e n\u00e3o deixe de deixar seu coment\u00e1rio se desejar).<\/p>\n<p>Um forte abra\u00e7o<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1 pessoal, tudo bem ? \u00c9 muito comum &#8220;N\u00f3s&#8221; desenvolvedores de sistemas cometermos pequenas (ou at\u00e9 grandes) &#8220;falhas&#8221; durante a cria\u00e7\u00e3o de trechos espec\u00edficos de c\u00f3digo que acabam comprometendo o&hellip;<\/p>\n","protected":false},"author":1,"featured_media":298,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,4,3],"tags":[],"class_list":["post-295","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-algoritmo","category-dicas","category-programacao"],"_links":{"self":[{"href":"https:\/\/lucianodev.com.br\/blog\/wp-json\/wp\/v2\/posts\/295","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lucianodev.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lucianodev.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lucianodev.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lucianodev.com.br\/blog\/wp-json\/wp\/v2\/comments?post=295"}],"version-history":[{"count":16,"href":"https:\/\/lucianodev.com.br\/blog\/wp-json\/wp\/v2\/posts\/295\/revisions"}],"predecessor-version":[{"id":383,"href":"https:\/\/lucianodev.com.br\/blog\/wp-json\/wp\/v2\/posts\/295\/revisions\/383"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lucianodev.com.br\/blog\/wp-json\/wp\/v2\/media\/298"}],"wp:attachment":[{"href":"https:\/\/lucianodev.com.br\/blog\/wp-json\/wp\/v2\/media?parent=295"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lucianodev.com.br\/blog\/wp-json\/wp\/v2\/categories?post=295"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lucianodev.com.br\/blog\/wp-json\/wp\/v2\/tags?post=295"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}