Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
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 06-03-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 23
ozsWizzard Va por buen camino
En todo caso "CreateOrNil"... aunque me sigue gustando más "TryCreate". A menos que yo traduzca mal el "try"
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #2  
Antiguo 06-03-2013
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
El nombre mas comun que he visto en varios lenguajes es
Código:
getOrNone(param)
O si te gusta al estilo sql
Código:
ifcreate('param','defaultValue)(param)
.
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 06-03-2013
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
Realmente la forma de crear el objeto no es consistente con la práctica en Delphi. No es que sea malo romper con la práctica, más si ésta no es tan buena. Sino que puedes crear incosistencias en tu código. Pero la forma que propones es la utilizada por Python más o menos. Pero en Python, si un parámetro no valida se genera una excepción.

Con respecto al nombre de "Make", el verbo es muy general y ambiguo. En lo personal me quedaría con el Create.

Saludos!
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #4  
Antiguo 07-03-2013
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
Muchas gracias por sus valiosas respuestas.

He tenido la sensación de estar enfocando mal el problema, pero algo me dice quizá no voy tan mal. Elevar excepciones desde el interior de un constructor es algo normal cuando no están dadas las condiciones estrictamente necesarias para que la instancia exista. Pero a veces la instancia puede o no puede existir, sin que lo último amerite generar un error o aviso.

Hice un ejemplo un poquitín menos "abstracto":
Código Delphi [-]
type
  TXFile = Class
    Constructor Create (Const Path :String);
    Class Function Make (Path :String) :TXFile;
  End;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    XFile1, XFile2, XFile3 :TXFile;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Constructor TXFile.Create (Const Path :String);
Begin
  // ...
End;

Class Function TXFile.Make (Path :String) :TXFile;
Begin
  If Not FileExists (Path) Then  // Si el archivo indicado no existe
  Begin
    // Intentamos con uno de respaldo
    Path := 'C:\Respaldos\' + ExtractFileName (Path);

    If Not FileExists (Path) Then  // Si el respaldo tampoco existe
    Begin
      Result := Nil;  // No hay archivo con ese nombre, situación aceptable
      Exit;
    End;
  End;

  Result := Create (Path);
End;

procedure TForm1.FormCreate(Sender: TObject);
begin
  { Sin el método TXFile.Make (o una función que haga lo mismo que Make),
    este bloque de código sería más grande: }
  XFile1 := TXFile.Make ('C:\Hugo.x');
  XFile2 := TXFile.Make ('C:\Paco.x');
  XFile3 := TXFile.Make ('C:\Luis.x');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  XFile1.Free;
  XFile2.Free;
  XFile3.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // ...

  If XFile1 <> Nil Then
    // ...

  // ...

  If XFile2 <> Nil Then
    // ...

  // ...

  If XFile3 <> Nil Then
    // ...

  // ...
end;

Lo de Make fue por buscar un sinónimo de Create, algo que, quizá (y ahí tengo mi mayor duda) pudiera llegar a ser acuñado y con el tiempo dejar de sonar confuso o ambiguo. Una palabra que "insinúe" una acción semejante a la del constructor, pero que al mismo tiempo se diferencie de éste, entendiéndose que podemos obtener un Nil si cierta condición (que podría estar documentada) no se cumple en la llamada a ese método especial.

«Oh, mire compañero, la clase tiene método Make, hay que usarlo en esta parte del programa. Según dice aquí, devuelve Nil cuando...»

Me empieza a gustar el nombre TryCreate que propusieron en mensajes anteriores. TryOrNil se entiende también, pero se pierde un poco el sentido de "crear".

Otro camino es que este tipo de métodos se definan con nombres más explícitos y acomodados a cada clase y situación en particular, con lo cual ya no tendríamos una candidatura a estándar.

Y bueno, también está la opción de crear una función normal o de otra clase, que haga la tarea, pero creo que es más correcto que la propia clase se encargue de validar o verificar lo que a la clase concierne. ¿No creen?

Bueno, a alguna conclusión habremos de llegar entre todos.

¡Saludos!
Responder Con Cita
  #5  
Antiguo 07-03-2013
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Build?

// Saludos
Responder Con Cita
  #6  
Antiguo 07-03-2013
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Al González
Y bueno, también está la opción de crear una función normal o de otra clase, que haga la tarea
Podría ser algo así:

Código Delphi [-]
TXFile = class
  ...
end;

TXFileFactory = class
public
  [class] function Create(Path: String): TXFile;
end;

// Saludos
Responder Con Cita
  #7  
Antiguo 07-03-2013
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
Gracias Román.

Una hora más temprano que ayer, pongo una breve lista de posibles nombres:
  • Make
  • TryCreate
  • Build
  • CreateBy
  • Produce
  • Generate
  • Construct
Me estoy inclinando por Produce. Make da la simple idea un tanto vaga de "hacer algo", mientras que Produce es más concreto y sugiere la "construcción de algo" (un objeto) y a la vez sugiere que "produce un resultado" (que podría ser Nil).
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
Encontrar objeto por su nombre, encontrar metodo, ejecutar metodo coso Trucos 7 02-09-2011 00:23:13
Cambiar el nombre de la clase. rauros Varios 2 02-08-2008 20:56:44
Crear formularios a partir de su nombre de clase kes .NET 6 21-02-2008 08:06:07
Crear Objeto por su nombre de clase jlrbotella OOP 2 08-01-2008 23:44:37
nombre de variables de una clase Mariana OOP 8 25-10-2005 17:48:34


La franja horaria es GMT +2. Ahora son las 06:04:21.


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