Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-07-2014
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola Nelson.

Cita:
Empezado por nlsgarcia Ver Mensaje
1- ¿Donde se puede ver esa recomendación a Embarcadero de modificación de la sentencia Try?.
Al menos aquí: http://qc.embarcadero.com/wc/qcmain.aspx?d=1545

Cita:
Empezado por nlsgarcia Ver Mensaje
2- ¿Como se implementaría dicha modificación?
Podría ser como lo pusiste en el mensaje #7, que, dicho sea de paso, es similar a lo que permiten ya otros lenguajes.

Yo creo que es cosa de tiempo y reflexión.

Saludos.
Responder Con Cita
  #2  
Antiguo 05-07-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Al González,

Cita:
Empezado por Al González
...Yo creo que es cosa de tiempo y reflexión...
Supongo que Embarcadero no lo ha implementado aun para no salirse del estándar de Object Pascal

En C# se implementa de la siguiente forma:
Código:
 using System;

 namespace ConsoleApplication1
 {
     class Program
     {
         static void Main()
         {
            try
            {
                int N1, N2, N3;
                N1 = 100;
                N2 = 0;
                N3 = (N1 / N2);
                Console.WriteLine("N3 = {0}", N3);
            }
            catch (System.DivideByZeroException e)
            {
               Console.WriteLine("Error : {0}", e.Message);
            }
            catch
            {
               Console.WriteLine("Se Produjo una Excepción No Definida");
            }
            finally
            {
               Console.WriteLine("Fin del Bloque Try");
            }
            Console.ReadKey();
         }
     }
 }
Saludos

Nelson.

Última edición por nlsgarcia fecha: 05-07-2014 a las 09:37:49.
Responder Con Cita
  #3  
Antiguo 05-07-2014
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
La verdad es que más de una vez he usado los try except dentro de otros try except y entre try finally.
Aunque normalmente no lo recomiendo porque no queda muy claro qué hace exactamente.
Responder Con Cita
  #4  
Antiguo 09-07-2014
pani_alex pani_alex is offline
Miembro
 
Registrado: oct 2005
Posts: 51
Poder: 21
pani_alex Va por buen camino
gracias por las respuestas, el try except dentro del try finally me funciona muy bien, solo queria saber si existe alguna mejor forma de hacerlo, el try finally dentro del tray except no me parece q vaya a funcionar pues me parece a mi q al ocurrir la excepcion dentro del try finally el tray except ni se daria por enterado, tampoco lo probe, solo imagine lo q haria segun la informacion que menejo de lo que hacen. Una ves mas gracias
Responder Con Cita
  #5  
Antiguo 09-07-2014
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por pani_alex Ver Mensaje
[...] el try except dentro del try finally me funciona muy bien, solo queria saber si existe alguna mejor forma de hacerlo [...]
Dentro de algunos años, quizá. Hay que seguir granjeando las mejoras. Expresar legítimas inquietudes como la tuya contribuye de buena forma a ese objetivo.

Un saludo.
Responder Con Cita
  #6  
Antiguo 09-07-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.939
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Existen otros caminos. Try/Except/Finallys es problemático porque altera el flujo del programa y hace difícil tratar situaciones que se salen del tema de los que es *realmente* excepcional.

El truco es no mezclar Error/Excepción/Opción/Alternativa, que es la causa de mucho lío, ya que muchas cosas que son errores se modelan usando algo hecho para tratar los muy poco habituales excepciones.

La alternativa mas común es usar códigos de error, como en C, pero eso también es problemático, ya que se pierde información.

La manera *elegante* de hacerlo es usando un tipo opcional (https://en.wikipedia.org/wiki/Option_type) que lastimosamente no es viable (osea, delphi no tiene pattern matching ni tipos algebraicos) o usar una función que retorne múltiples valores, que es viable:

Código Delphi [-]
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  Generics.Defaults;

type
  TOptional = record
    E:Exception;
    IsOk:Boolean;
  end;


procedure LogOption(value:TOptional);
begin
  if not value.IsOk then
  begin
    //Aqui logeas...
  end;
end;

function OptionError(fun: TProc): TOptional;
begin
    try
      fun();

      result.IsOk := True;
    except
      on E:Exception do
      begin
        result.E := E;
      end;
    end;
end;

var
  result: TOptional;


begin
  LogOption(OptionError(
        procedure
        begin
          Writeln('Hello World');
        end
    ));
end.

//P.D: No encontré como hacer una versión genérica usando TFunc en vez de un TProc. Se puede implementando como una clase pero ya no queda tan limpio de usar.

Nota que la idea es encapsular el manejo de las excepciones y usar procedimientos anónimos para quedar con una interface limpia a la vez que se retiene el error/excepción y se usa como se quiere, sin perder la linea de visión.

Esto combina ambos beneficios del método de manejo de errores con "Códigos de retorno" y "Excepciones".

Es una lastima que no veo como hacerlo aun mas limpio, y que en Delphi, a si como en la mayoría de los lenguages que usan excepciones, - con la excepción -!- de objective-c que tiene separado Error de Excepcion- ambas cosas están mezcladas y no hay una forma simple de desgranar las dos cosas. Se puede hacer un API que en vez de Exeption devuelve un Objeto Error, pero eso no es natural en Delphi, asi que creo que esto es lo máximo que se puede sin meter cosas alienigenas.

P.D:

Esto se parece al método que se usa en GO:

http://stackoverflow.com/questions/1...ing-techniques

Aunque en GO se pierde las ventajas de las excepciones. No hay muchos lenguajes donde se pueda diferenciar entre ambas cosas y que ademas no mezclen el asunto de liberar recursos.

D es uno de ellos, maso:

http://dlang.org/exception-safe.html

Ah!, me acorde que Elixir tiene el estilo que busco:

http://elixir-lang.org/getting_started/17.html

Da resultado estar averiguando como hacer un lenguaje de programacion
__________________
El malabarista.

Última edición por mamcx fecha: 09-07-2014 a las 23:42:03.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta SQL basada en otra consulta anterior jafera SQL 5 19-11-2013 01:07:37
consulta sobre una consulta :D PablorD MySQL 4 02-06-2010 21:59:51
Realizar una consulta sobre los registros que devuelve otra consulta Borjaserrano Firebird e Interbase 12 01-10-2007 23:19:44
Consulta dentro de otra consulta judit25 Conexión con bases de datos 1 25-06-2007 15:52:15
consulta sobre consulta superhopi SQL 2 16-05-2003 19:01:47


La franja horaria es GMT +2. Ahora son las 13:03:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi