Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-01-2006
elcigarra elcigarra is offline
Miembro
 
Registrado: may 2005
Posts: 269
Poder: 20
elcigarra Va por buen camino
punteros... ¿para qué?

Siguiendo con la lista de confesiones y viendo que no me fué tan mal con la confesión de que jamás había usado un Datamódulo en una aplicación en este hilo, tengo la necesidad de ir llenando antiguos baches de conocimiento que tal vez se empiezan a convertir en errores tumorales en mi estilo de programación.

El enunciado-pregunta es sencillo. JAMÁS he usado un puntero en ninguno de mis programas. Tengo una base rudimentaria de lo que es un puntero pero, aunque he visto código de la gente que domina el delphi y la programación (que no es mi caso), y siempre lo usan para una cosa u otra, no he encontrado ninguna situación que no pueda resolverse utilizando las variables y/o constantes comunes y corrientes. La pregunta que me hago es: ¿es necesario o beneficioso en alguna forma utilizar punteros?, ¿Hay algún caso que no pueda resolverse sin hechar mano del mismo?
Responder Con Cita
  #2  
Antiguo 09-01-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por elcigarra
...no he encontrado ninguna situación que no pueda resolverse utilizando las variables y/o constantes comunes y corrientes...
Evidentemente no has liado mucho con la WinApi


Cita:
Empezado por elcigarra
¿es necesario o beneficioso en alguna forma utilizar punteros?
Si, es necesario, por ejemplo muchas funciones empaquetadas que nos pinde punteros de la información que necesitamos.
Si, es beneficioso, pues es mucho mas económico para el procesador y la memoria pasar una referencia a un sector de memoria, que copiar los datos de ese sector de memorias a la hora de asignar un valor.
Código Delphi [-]
var
  P1, P2: PChar;
  S1, S2: string;
begin
  ...
  P1 := P2; {Solamente esta asignando la dirección}
  S1 := S2; {Aloca el espacio necesario para alojar los valores de S2 en S1 y copia toda la cadena}
Debe haber infinitas situaciones donde es conveniente el uso de punteros, si bien el ejemplo es algo vago, puedo comentarte que muchas veces podemos asistirnos simplemente con las herramientas del lenguaje, sin necesitar acceder a las direcciones reales de nuestros datos.

Saludos!
Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 09-01-2006
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 delphi.com.ar
Código Delphi [-]
  S1 := S2; {Aloca el espacio necesario para alojar los valores de S2 en S1 y copia toda la cadena}
Mmmm, ¿sí? En el caso de strings ¿no se supone que simplemente se asigna la referencia?

De cualquier forma coincido con Federico. Es necesario saber manejar apuntadores (punteros), sobre todo al lidiar con rutinas de APIs externas, pero hay que reconocer que, a diferencia de otros lenguajes y versiones anteriores de Pascal, en muchas ocasiones no requerirás hacer uso de ellos.

// Saludos
Responder Con Cita
  #4  
Antiguo 09-01-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por roman
Mmmm, ¿sí? En el caso de strings ¿no se supone que simplemente se asigna la referencia?
Entonces si modifico S2 se modifica S1??
Internamente utiliza una función de Asignación LStrLAsg definida en System, que hace los pasos que resumí en el comentario. (Si mal no recuerdo, el manejo de strings no es igual para todas las versiones de Delphi)

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 09-01-2006
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 delphi.com.ar
Entonces si modifico S2 se modifica S1??
No, pero mira esto:

Código Delphi [-]
var
  S, T: String;

begin
  S := 'Hola';
  T := S;

  Assert(Addr(Pointer(S)^) = Addr(Pointer(T)^));

  S[1] := 'P';

  Assert(Addr(Pointer(S)^) = Addr(Pointer(T)^));
end;

El primer Assert no falla, luego de la asignación, S y T realmente apuntan a lo mismo. El segundo Assert falla, al modificar S es cuando se crea la copia.

// Saludos
Responder Con Cita
  #6  
Antiguo 09-01-2006
[Gunman] [Gunman] is offline
Miembro
 
Registrado: dic 2004
Ubicación: Pedreguer.
Posts: 355
Poder: 20
[Gunman] Va por buen camino
A mi me pasa que no encuentro funcionalidad a los punteros, seguramente porqué no tenga muy claro el tema, o porqué no haya profundizado en la programación, sólo soy un novato, apenas un año que trabajo con Delphi, es decir, programo "en serio" (a mi un año me parece poco, no sé si es poco o es que soy imbécil y más vale que me dedica a recoger setas (no quiero decir con esto que los que recojen setas son imbéciles, sólo lo aplico a mi caso)).
Ahora he empezado con C, si, he manejado punteros, pero claro, són los ejemplos del libro y ejercicios, si tuvíese que hacer un programa... No se me ocurririan para nada (creo) los punteros.
Bueno, no sé, como llevastéis el tema de los punteros al inicio de vuestra vida como programadores?
__________________
l2prog.co.nr
Responder Con Cita
  #7  
Antiguo 09-01-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por roman
El primer Assert no falla, luego de la asignación, S y T realmente apuntan a lo mismo. El segundo Assert falla, al modificar S es cuando se crea la copia.
Es verdad, la copia no se crea hasta que sea alterado si es que lo es. (Creo que vamos a terminar mareando a elcigarra )
Insisto con que no funciona en todas las versiones igual, recuerdo haber leído que había que tener precauciones en el uso de strings Delphi 6, porque borland hizo un cambio de filosofía que descartó para la versión 7. Sinceramente como no utilizo esta versión no recuerdo cuales son estos cambios.
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 09-01-2006 a las 21:59:25.
Responder Con Cita
  #8  
Antiguo 09-01-2006
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues al igual que con los DataModule, también soy un "forofo" de los punteros, ya que estuve años trabajando en lenguaje C y allí es casi obligatorio.

En rutinas lentas con muchos datos, por ejemplo en arrays, listas, estructuras de datos, etc. al cambiar a punteros se incrementa la velocidad de una manera bastante apreciable, además de que es más cómodo de usar una vez que te acostumbras.
Responder Con Cita
  #9  
Antiguo 09-01-2006
[fer21unmsm] fer21unmsm is offline
Miembro Premium
 
Registrado: dic 2005
Ubicación: Lima
Posts: 627
Poder: 19
fer21unmsm Va por buen camino
Cita:
Empezado por elcigarra
El enunciado-pregunta es sencillo. JAMÁS he usado un puntero en ninguno de mis programas.
Hola elcigarra, ¿estás seguro de ello?, estoy seguro que siempre lo has usado bueno en delphi, pero de forma implícita, recuerda la definición de un puntero(ya sea estático o dinámico)

Saludos.
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


La franja horaria es GMT +2. Ahora son las 13:50:21.


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