Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #41  
Antiguo 13-11-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
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 donald shimoda Ver Mensaje
Tenes absolutamente razón, lo escribí rápido y me olvide que en realidad soy yo el que hago siempre:

Código Delphi [-]
if Assigned(x) then
  FreeAndNil(x);

Esto segun Allen Bauer es un vicio horrendo de programación . Ahora si mirás el código delhi de FreeAndNil:

Código Delphi [-]
procedure FreeAndNil(var Obj);
var
  Temp: TObject;
begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
end;

Si obj = nil estas llamando a nil.free!!!! No jodamos, es inaceptable o muy arriesgado para mis pareceres. Aunque se enoje Allen Bauer , escucho argumentos en contra que me quiten el vicio.

Saludos
Un placer, Donald. Argumentos dados tal como los solicitó. Sólo que es una pena no conocer si te convencieron para erradicar ese vicio y, en caso contrario, las razones.

Una disculpa a elcigarra por las derivaciones que tuvo el hilo (al menos por lo que a mí me toca).

Saludos.

Al González.
Responder Con Cita
  #42  
Antiguo 13-11-2008
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 17
donald shimoda Va por buen camino
Cita:
Empezado por Al González Ver Mensaje
Un placer, Donald. Argumentos dados tal como los solicitó. Sólo que es una pena no conocer si te convencieron para erradicar ese vicio y, en caso contrario, las razones.
Como le dije a Román estoy totalmente de acuerdo en sus explicaciones, se las agradezco, son correctas, que mas debo decir?

Si han sido suficientes para erradicar el vicio? Primera regla del programador es no toques código que funciona sin una buena razón. No veo una buena razón en revisar código viejo.

Para el código nuevo probaré, te cuento cuando tenga mis propias pruebas de uso.

Saludos.
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
  #43  
Antiguo 13-11-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
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 donald shimoda Ver Mensaje
...Para el código nuevo probaré, te cuento cuando tenga mis propias pruebas de uso...
Urbana respuesta, gracias. Y una disculpa si te hice sentir presionado, no era esa la intención. Cuando gustes te invito un trago en La Taberna.
Responder Con Cita
  #44  
Antiguo 13-11-2008
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 ContraVeneno Ver Mensaje
changos, era broma maese Roman
Je, je. Yo me di cuenta de tu mensaje oculto sólo hasta que cité tu mensaje. Pero de todas formas fue lo primero que me vino a la mente. No sé si sea cierto, pero alguna vez leí que de ahí viene la palabra nil.

// Saludos
Responder Con Cita
  #45  
Antiguo 13-11-2008
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
Una pregunta, porque creo que me perdí en algún punto. Exactamente ¿qué es lo que no aceptaría FPC de mi codigo? ¿No compila? Es que se me hace raro, porque Delphi igualmente "protesta" marcando una advertencia, pero no impide la compilación y no veo porque no compilaría. Sintacticamente es correcto ¿no? ¿Qué error marca?

// Saludos
Responder Con Cita
  #46  
Antiguo 13-11-2008
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 17
donald shimoda Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Una pregunta, porque creo que me perdí en algún punto. Exactamente ¿qué es lo que no aceptaría FPC de mi codigo? ¿No compila? Es que se me hace raro, porque Delphi igualmente "protesta" marcando una advertencia, pero no impide la compilación y no veo porque no compilaría. Sintacticamente es correcto ¿no? ¿Qué error marca?

// Saludos
Protesta y corre. A eso me refería con que no lo *acepta*. Lo mismo que sucede en Delphi.

Saludos.
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
  #47  
Antiguo 13-11-2008
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
¡Ah! Ok, gracias.

Y, como dice Al, hemos desviado el hilo, pero creo que nuestro compañero no lo verá tan mal ya que, a fin de cuentas, hemos estado hablando de buenas prácticas de programación.

Aunque no le veo problema al nil.Free, lo cierto es que ejemplos como el que puse de la clase TPersona, no deben hacerse. No lo hagan en casa niños

-----------------

Por otra parte, retomando el hilo original, quiero comentar que voy de acuerdo con lo expresado: un método no debe devolver objetos, a no ser que sea una especie de fábrica y quede claro tanto en la documentación como en el nombre:

Código Delphi [-]
var
  Persona: TPersona;

begin
  Persona := Dios.CrearPersona();
end;



// Saludos
Responder Con Cita
  #48  
Antiguo 13-11-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por roman Ver Mensaje

Por otra parte, retomando el hilo original, quiero comentar que voy de acuerdo con lo expresado: un método no debe devolver objetos, a no ser que sea una especie de fábrica (...)
Y como por lo general (aunque no siempre) una Fábrica se accede mediante el patrón Singleton. ¡Ahora si! ¡En este caso si hay Singleton! ¡Santos patrones!

Lo siento, no pudo evitarlo tenía que decirlo.
Disculpen que haya desviado el hilo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #49  
Antiguo 13-11-2008
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Thumbs up

Hola ???

Retomando la pregunta inicial.
Código Delphi [-]
function TForm1.GetStrings:TStrings;
var
  miLista: TStrings;
begin
  miLista := TStringList.Create;
  miLista.Add('uno');
  miLista.Add('dos');
  Result := miLista;
  FreeAndNil(MiLista); // Esta linea da un error EAccessViolation
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  memo1.Lines.Assign(GetStrings);
end;

Por que no haces esto:
Código Delphi [-]
function TForm1.GetStrings:TStrings;
begin
  Result := TStringList.Create;
  Result.Add('uno');
  Result.Add('dos');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  memo1.Lines.Assign(GetStrings);
end;

Al salir de la función GetStrings, la variable se libera sola.

Un saludo
Responder Con Cita
  #50  
Antiguo 13-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por olbeup Ver Mensaje
Al salir de la función GetStrings, la variable se libera sola.
¿quien te ha dicho eso? ¿eh? que yo me entere
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #51  
Antiguo 13-11-2008
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por olbeup Ver Mensaje
Al salir de la función GetStrings, la variable se libera sola.
Cita:
Empezado por Lepe Ver Mensaje
¿quien te ha dicho eso? ¿eh? que yo me entere
Evidentemente, no, no se libera sola.

Creo que hay una regla simple para no equivocarse:
Si tú coges memoria --> tú tienes que liberarla cuando terminas
Si Delphi coge memoria --> Delphi la libera cuando termina.


No recuerdo si existe alguna excepción a la regla, como casi siempre
Responder Con Cita
  #52  
Antiguo 14-11-2008
elcigarra elcigarra is offline
Miembro
 
Registrado: may 2005
Posts: 269
Poder: 19
elcigarra Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Y, como dice Al, hemos desviado el hilo, pero creo que nuestro compañero no lo verá tan mal ya que, a fin de cuentas, hemos estado hablando de buenas prácticas de programación.
El haber iniciado este hilo es el único derecho que siento, como humilde mortal, de escribir entre inmortales. Cuando sea grande me gustaría saber todo lo que saben ustedes... Ups! me olvidaba, no me queda tiempo porque ya me pasé de "grande".

Como sea... sinceras gracias.
Responder Con Cita
  #53  
Antiguo 14-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
No recuerdo si existe alguna excepción a la regla, como casi siempre
¿_CopyObject?


(perdón).

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



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
Buenas prácticas de programación elcigarra OOP 18 07-11-2008 17:05:27
Siete prácticas para un óptimo y rápido desarrollo de software poliburro Noticias 5 30-07-2008 16:48:55
buenas maneras... BlueSteel Humor 23 13-06-2008 08:11:21
Buenas Noticias faustoffp Noticias 0 04-09-2006 06:33:06
Ayuda Practicas En Delphi MARIAM23 Varios 1 22-07-2006 01:19:34


La franja horaria es GMT +2. Ahora son las 10:13:47.


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