{"id":1330,"date":"2011-08-01T14:42:51","date_gmt":"2011-08-01T21:42:51","guid":{"rendered":"http:\/\/www.andreanolanusse.com\/pt\/?p=1330"},"modified":"2011-10-23T23:13:04","modified_gmt":"2011-10-24T06:13:04","slug":"dicas-para-a-certificacao-delphi-developer-3","status":"publish","type":"post","link":"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/","title":{"rendered":"Dicas para a Certifica\u00e7\u00e3o Delphi Developer #3"},"content":{"rendered":"<p>Tratamento de exce\u00e7\u00e3o (exception handling) \u00e9 o tema a ser abordado na terceira dica para a Certifica\u00e7\u00e3o Delphi Developer.<\/p>\n<p>Exce\u00e7\u00f5es (exceptions em ingl\u00eas) s\u00e3o condi\u00e7\u00f5es que requerem um tratamento especial, o tratamento de exce\u00e7\u00e3o fornece uma maneira padr\u00e3o de lidar com erros, quando utilizado permite que voc\u00ea gerencie os erros quando eles aconte\u00e7am e decida o que fazer.<\/p>\n<p>A documenta\u00e7\u00e3o do RAD Studio tem um t\u00f3pico espec\u00edfico que trata de <i>Exception Handling<\/i>, invista algum na leitura deste\u00a0<strong><a title=\"RAD Studio documentation - Exception Handling\" href=\"http:\/\/docwiki.embarcadero.com\/RADStudio\/en\/Exception_handling_Index\" target=\"_blank\">t\u00f3pico<\/a><\/strong>,  lendo este t\u00f3pico voc\u00ea estar\u00e1 melhor preparado para responder as perguntas sobre este tema durante a prova..<\/p>\n<p>Al\u00e9m disso, voc\u00ea pode pensar que pelo fato de usar try..except..end no seu desenvolvimento di\u00e1rio \u00e9 suficiente para responder as perguntas da prova, a resposta \u00e9 <strong>N\u00c3O<\/strong>. O programa de certifica\u00e7\u00e3o tem um banco de dados com muitas perguntas, a prova ir\u00e1 trazer perguntas sobre diferentes aspectos do tratamento de exce\u00e7\u00e3o, como:\u00a0<a title=\"Documenta\u00e7\u00e3o RAD Studio - Reraising exceptions\" href=\"http:\/\/docwiki.embarcadero.com\/RADStudio\/en\/Reraising_Exceptions\" target=\"_blank\">Propagando (Re-raising) exce\u00e7\u00f5es<\/a>, <a title=\"Documenta\u00e7\u00e3o RAD Studio - Silent Exceptions\" href=\"http:\/\/docwiki.embarcadero.com\/RADStudio\/en\/Silent_Exceptions\" target=\"_blank\">Exce\u00e7\u00f5es silenciosas (Silent Exceptions)<\/a> e mais.<\/p>\n<p>Exce\u00e7\u00e3o silenciosa \u00e9 uma forma de levantar (raise) uma exce\u00e7\u00e3o sem mostrar a mensagem de erro, o m\u00e9todo padr\u00e3o para levantar uma exce\u00e7\u00e3o mostra a mensagem de erro, mas n\u00e3o \u00e9 s\u00f3 isso.<\/p>\n<ul>\n<li>Todas as exce\u00e7\u00f5es silenciosas descendem da exce\u00e7\u00e3o padr\u00e3o\u00a0<em>EAbort<\/em>.<\/li>\n<li>Delphi tem uma procedure chamada Abort, o qual automaticamente cria e levanta a exception EAbort<\/li>\n<\/ul>\n<div>Quando o assunto \u00e9 <i>propagar exce\u00e7\u00f5es (re-raising exceptions)<\/i>, a documenta\u00e7\u00e3o do RAD Studio documentation oferece uma \u00f3tima introdu\u00e7\u00e3o ao tema.<\/div>\n<div>\n<p>Propagar exce\u00e7\u00e3o \u00e9 muito \u00fatil quando uma procedure ou fun\u00e7\u00e3o tem que executar alguma c\u00f3digo adicional ap\u00f3s a exce\u00e7\u00e3o acontecer e n\u00e3o pode gerenciar a exce\u00e7\u00e3o totalmente.<\/p>\n<p>Por exemplo, a fun\u00e7\u00e3o GetFileList\u00a0aloca um objeto TStringList e preenche o mesmo com nomes de arquivo que atenda condi\u00e7\u00e3o de busca de um diret\u00f3rio espec\u00edfico:<\/p>\n<\/div>\n<pre class=\"brush: delphi\">function GetFileList(const Path: string): TStringList;\r\nvar\r\n  I: Integer;\r\n  SearchRec: TSearchRec;\r\nbegin\r\n  Result := TStringList.Create;\r\n  try\r\n    I := FindFirst(Path, 0, SearchRec);\r\n    while I = 0 do\r\n      begin\r\n          Result.Add(SearchRec.Name);\r\n          I := FindNext(SearchRec);\r\n      end;\r\n  except\r\n      Result.Free;\r\n      raise;\r\n  end;\r\nend;<\/pre>\n<p>GetFileList cria um objeto TStringList e ent\u00e3o usa as fun\u00e7\u00f5es FindFirst e FindNext para inicializ\u00e1-lo. Se a inicializa\u00e7\u00e3o falhar, por exemplo porque o diret\u00f3rio \u00e9 inv\u00e1lido ou porque n\u00e3o h\u00e1 mem\u00f3ria suficiente para preencher o string list &#8211; ser\u00e1 necess\u00e1rio que GetFileList se desfa\u00e7a do novo string list. Por esta raz\u00e3o, a inicializa\u00e7\u00e3o do string list ocorre em um bloco try&#8230;except..statement. Se a exce\u00e7\u00e3o ocorrer, a parte do c\u00f3digo do except ir\u00e1 destruir o string list e assim propagar a exce\u00e7\u00e3o com um raise.<\/p>\n<p>A prova ir\u00e1 al\u00e9m dos aspectos que aqui mencionei. A seguir cinco links que ir\u00e1 lhe ajudar a aprender mais sobre tratamento de exce\u00e7\u00f5es:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.activedelphi.com.br\/modules.php?op=modload&#038;name=News&#038;file=article&#038;sid=574\" target=\"_blank\">Try..Except..Finally &#8211; Parte 01<\/a><\/li>\n<li><a href=\"http:\/\/www.activedelphi.com.br\/modules.php?op=modload&#038;name=News&#038;file=article&#038;sid=586\" target=\"_blank\">Try..Except..Finally &#8211; Parte 02<\/a><\/li>\n<li><a href=\"http:\/\/www.activedelphi.com.br\/modules.php?op=modload&#038;name=News&#038;file=article&#038;sid=594\" target=\"_blank\">Try..Except..Finally &#8211; Parte 03<\/a><\/li>\n<li><a href=\"http:\/\/docwiki.embarcadero.com\/RADStudio\/en\/Exception_handling_Index\" target=\"_blank\">RAD Studio documentation &#8211; Exception Handling<\/a><\/li>\n<li><a href=\"http:\/\/www.delphibasics.co.uk\/Article.asp?Name=Exceptions\" target=\"_blank\">Delphi Basic &#8211; Exception handling in your code<\/a><\/li>\n<li><a href=\"http:\/\/www.delphibasics.co.uk\/RTL.asp?Name=Raise\" target=\"_blank\">Delphi Basic &#8211; Raise<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Tratamento de exce\u00e7\u00e3o (exception handling) \u00e9 o tema a ser abordado na terceira dica para a Certifica\u00e7\u00e3o Delphi Developer. Exce\u00e7\u00f5es (exceptions em ingl\u00eas) s\u00e3o condi\u00e7\u00f5es que requerem um tratamento especial, o tratamento de exce\u00e7\u00e3o fornece uma maneira padr\u00e3o de lidar com erros, quando utilizado permite que voc\u00ea gerencie os erros quando eles aconte\u00e7am e decida [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1294,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_s2mail":"yes","footnotes":""},"categories":[102],"tags":[112,181],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Dicas para a Certifica\u00e7\u00e3o Delphi Developer #3 | Andreano Lanusse | Tecnologia e Desenvolvimento de Software<\/title>\n<meta name=\"description\" content=\"Tratamento de exce\u00e7\u00e3o (exception handling) \u00e9 o tema a ser abordado na terceira dica para a Certifica\u00e7\u00e3o Delphi Developer. Exce\u00e7\u00f5es (exceptions em ingl\u00eas)\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dicas para a Certifica\u00e7\u00e3o Delphi Developer #3 | Andreano Lanusse | Tecnologia e Desenvolvimento de Software\" \/>\n<meta property=\"og:description\" content=\"Tratamento de exce\u00e7\u00e3o (exception handling) \u00e9 o tema a ser abordado na terceira dica para a Certifica\u00e7\u00e3o Delphi Developer. Exce\u00e7\u00f5es (exceptions em ingl\u00eas)\" \/>\n<meta property=\"og:url\" content=\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/\" \/>\n<meta property=\"og:site_name\" content=\"Andreano Lanusse | Tecnologia e Desenvolvimento de Software\" \/>\n<meta property=\"article:published_time\" content=\"2011-08-01T21:42:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2011-10-24T06:13:04+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2011\/06\/Delphi_Certified_Developer_Logo_dicas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"440\" \/>\n\t<meta property=\"og:image:height\" content=\"250\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@andreanolanusse\" \/>\n<meta name=\"twitter:site\" content=\"@andreanolanusse\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\">\n\t<meta name=\"twitter:data1\" content=\"3 minutos\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#website\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/\",\"name\":\"Andreano Lanusse | Tecnologia e Desenvolvimento de Software\",\"description\":\"Andreano Lanusse blog - artigos, tutoriais e v&iacute;deos sobre tecnologia, desenvolvimento de software (Delphi XE4, C#, PHP, .NET) e t&eacute;cnicas de programa&ccedil;&atilde;o\",\"publisher\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"http:\/\/www.andreanolanusse.com\/pt\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/#primaryimage\",\"inLanguage\":\"pt-BR\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2011\/06\/Delphi_Certified_Developer_Logo_dicas.png\",\"contentUrl\":\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2011\/06\/Delphi_Certified_Developer_Logo_dicas.png\",\"width\":440,\"height\":250},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/#webpage\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/\",\"name\":\"Dicas para a Certifica\\u00e7\\u00e3o Delphi Developer #3 | Andreano Lanusse | Tecnologia e Desenvolvimento de Software\",\"isPartOf\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/#primaryimage\"},\"datePublished\":\"2011-08-01T21:42:51+00:00\",\"dateModified\":\"2011-10-24T06:13:04+00:00\",\"description\":\"Tratamento de exce\\u00e7\\u00e3o (exception handling) \\u00e9 o tema a ser abordado na terceira dica para a Certifica\\u00e7\\u00e3o Delphi Developer. Exce\\u00e7\\u00f5es (exceptions em ingl\\u00eas)\",\"breadcrumb\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/\",\"name\":\"In\\u00edcio\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/#webpage\"}}]},{\"@type\":\"Article\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/#article\",\"isPartOf\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/#webpage\"},\"author\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\"},\"headline\":\"Dicas para a Certifica\\u00e7\\u00e3o Delphi Developer #3\",\"datePublished\":\"2011-08-01T21:42:51+00:00\",\"dateModified\":\"2011-10-24T06:13:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/#webpage\"},\"commentCount\":1,\"publisher\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\"},\"image\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/#primaryimage\"},\"keywords\":[\"Certifica\\u00e7\\u00e3o\",\"Delphi\"],\"articleSection\":[\"Delphi\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/www.andreanolanusse.com\/pt\/dicas-para-a-certificacao-delphi-developer-3\/#respond\"]}]},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\",\"name\":\"Andreano Lanusse\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#personlogo\",\"inLanguage\":\"pt-BR\",\"url\":\"http:\/\/0.gravatar.com\/avatar\/6a9c6f73c7c480fb826c7303288abfd3?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/0.gravatar.com\/avatar\/6a9c6f73c7c480fb826c7303288abfd3?s=96&d=mm&r=g\",\"caption\":\"Andreano Lanusse\"},\"logo\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#personlogo\"},\"sameAs\":[\"https:\/\/twitter.com\/andreanolanusse\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/posts\/1330"}],"collection":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/comments?post=1330"}],"version-history":[{"count":0,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/posts\/1330\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/media\/1294"}],"wp:attachment":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/media?parent=1330"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/categories?post=1330"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/tags?post=1330"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}