{"id":463,"date":"2023-08-06T16:07:17","date_gmt":"2023-08-06T15:07:17","guid":{"rendered":"https:\/\/jorgeturiel.es\/?p=463"},"modified":"2023-08-06T16:07:17","modified_gmt":"2023-08-06T15:07:17","slug":"excepciones-en-free-pascal","status":"publish","type":"post","link":"https:\/\/jorgeturiel.es\/?p=463","title":{"rendered":"Excepciones en Free Pascal"},"content":{"rendered":"\n<p>Hace unos d\u00edas vi un v\u00eddeo en internet, en el que se mostraba como hacer una calculadora r\u00e1pidamente en Python. Era un ejemplo muy sencillo. Lo que me llam\u00f3 la atenci\u00f3n es que cuando el usuario introduc\u00eda datos, no se ten\u00eda en cuenta si eran n\u00fameros o no.<\/p>\n\n\n\n<p>As\u00ed que me pregunt\u00e9 como ser\u00eda ese programa escrito en Free Pascal, y pero de una manera robusta<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>El c\u00f3digo que se mostraba en el v\u00eddeo, consist\u00eda en cuatro funciones, una para cada operaci\u00f3n b\u00e1sica: sumar, restar, dividir, y multiplicar. <\/p>\n\n\n\n<p>Y la parte principal para del programa ped\u00eda dos valores al usuario y llamaba a las cuatro funciones con estos valores y mostraba el resultado por pantalla. As\u00ed que dicho y hecho. Me puse manos a la obra, y este es el c\u00f3digo<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:delphi decode:true \" >program calculador;\n\nuses\n  SysUtils;\n\n  function Sumar(a, b: integer): integer;\n  begin\n    Result := a + b;\n  end;\n\n  function Restar(a, b: integer): integer;\n  begin\n    Result := a - b;\n  end;\n\n  function Multiplicar(a, b: integer): integer;\n  begin\n    Result := a * b;\n  end;\n\n  function Dividir(a, b: integer): integer;\n  begin\n    Result := a div b;\n  end;\n\nvar\n  Valor1, Valor2: integer;\nbegin\n  WriteLn('Introduce dos n\u00fameros');\n  try\n    try\n      Write('Primer n\u00famero: ');\n      Readln(Valor1);\n      Write('Segundo n\u00famero: ');\n      Readln(Valor2);\n      Writeln('Suma:' +IntToStr(Sumar(Valor1, Valor2)));\n      Writeln('Resta: ' + IntToStr(Restar(Valor1, Valor2)));\n      Writeln('Multiplicar: ' + IntToStr(Multiplicar(Valor1, Valor2)));\n      Writeln('Dividir: ' + IntToStr(Dividir(Valor1, Valor2)));\n    except\n      on E: Exception do\n        Writeln(E.Message);\n    end;\n  finally\n    Writeln('Pulsa una tecla para continuar');\n    Readln();\n  end;\nend.<\/pre><\/div>\n\n\n\n<p>En este c\u00f3digo que program\u00e9, us\u00e9 las estructuras<a href=\"https:\/\/www.freepascal.org\/docs-html\/ref\/refse120.html\"><em> Try Finally<\/em> <\/a>y <em><a href=\"https:\/\/wiki.freepascal.org\/Try\/es\">Try Excepcion<\/a> <\/em>una dentro de la otra. De manera que con la primera estructura me aseguro que pase lo que pase en mi c\u00f3digo siempre se ejecute la parte contenida debajo de <em>Finally<\/em>. <\/p>\n\n\n\n<p>Y con la segunda estructura, lo que busco es atrapar o gestionar cualquier error en tiempo de ejecuci\u00f3n que pueda producirse en el c\u00f3digo contenido entre las palabras claves <em>Try<\/em> y <em>Except<\/em>.<\/p>\n\n\n\n<p>En este v\u00eddeo se puede ver como funciona este ejemplo.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Calculadora en ObjectPascal\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/jwSyeO-jaeM?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Saludos<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hace unos d\u00edas vi un v\u00eddeo en internet, en el que se mostraba como hacer una calculadora r\u00e1pidamente en Python. Era un ejemplo muy sencillo. Lo que me llam\u00f3 la atenci\u00f3n es que cuando el usuario introduc\u00eda datos, no se ten\u00eda en cuenta si eran n\u00fameros o no. As\u00ed que me pregunt\u00e9 como ser\u00eda ese [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27,25,26],"tags":[51,22,50,32,23,52],"class_list":["post-463","post","type-post","status-publish","format-standard","hentry","category-lazarus","category-pascal","category-programacion","tag-buen-codigo","tag-delphi","tag-excepciones","tag-free-pascal","tag-lazarus","tag-python"],"_links":{"self":[{"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts\/463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=463"}],"version-history":[{"count":1,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts\/463\/revisions"}],"predecessor-version":[{"id":464,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=\/wp\/v2\/posts\/463\/revisions\/464"}],"wp:attachment":[{"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jorgeturiel.es\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}