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 29-09-2010
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 25
José Luis Garcí Va camino a la fama
Muchas Gracias Ai (González) perdon por haberte abrebiado el nick
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #2  
Antiguo 29-09-2010
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 José Luis Garcí Ver Mensaje
Muchas Gracias Ai (González) perdon por haberte abrebiado el nick
Vale. ( )

Saludos.

AL.
Responder Con Cita
  #3  
Antiguo 05-10-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.025
Poder: 27
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Otro ejemplillo: usar el modificador OUT en los parámetros. La ventaja que tiene es que ese parámetro es sólo de salida, por lo que no es apilado al llamar a la función y se ganan unos pocos ciclos de procesador en la llamada.

Código Delphi [-]
PROCEDURE MiProcedimiento (Variable: INTEGER; OUT Respuesta1, Respuesta2: INTEGER);

Evidentemente, si intentas obtener el valor de Respuesta1 o Respuesta2 antes de asignarles un valor, recibirás (como mínimo) un aviso del compilador.

En mi opinión se utilizan poco los modificadores CONST y OUT (sobre todo este último) y deberían usarse más, porque ayudan mucho al compilador a optimizar el código.
Responder Con Cita
  #4  
Antiguo 05-10-2010
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
No recuerdo haber usado nunca 'out' , ¿qué ventajas e inconvenientes tiene, Ñuño?
Responder Con Cita
  #5  
Antiguo 05-10-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.025
Poder: 27
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por Casimiro Notevi Ver Mensaje
No recuerdo haber usado nunca 'out' , ¿qué ventajas e inconvenientes tiene, Ñuño?
Con OUT le estás diciendo al compilador que dentro del procedimiento no vas a usar el valor contenido en la variable, pero sí vas a modificar su valor, que luego vas a utilizar desde el procedimiento llamante. Por decirlo de alguna manera, es un caso especial de VAR. Por lo tanto el compilador tiene información de primera mano en cuanto a qué vas a hacer con ese parámetro. En consecuencia:
  1. En ese parámetro sólo pueden usarse variables: ni constantes ni expresiones ni funciones... En esto es igual al modificador VAR.
  2. Como vas a ignorar el valor del parámetro, el compilador puede ahorrarse el apilarlo en la llamada, optimizando la operación.
  3. Como es un parámetro de "sólo salida", el compilador puede optimizar la vuelta (RET) del procedimiento o función.
  4. Si haces algo mal, el compilador te avisa y así puedes encontrar posibles errores en tu algoritmo (por ejemplo, si intentas acceder al contenido del parámetro antes de asignarle nada).

Un posible problema puede darse si finalmente no asignamos ningún valor a los parámetros OUT, ya que entonces la variable podría quedarse con un valor indeterminado (dependiendo del compilador, opciones de optimización, etc.), y esos errores son difíciles de detectar. Por ejemplo:
Código Delphi [-]
FUNCTION Funcion (CONST Entrada: STRING; OUT Salida: STRING): BOOLEAN;
BEGIN
  IF Entrada <> '' THEN Salida := 'Hay entrada';
  RESULT := Length (Entrada) > 5;
END;

 ...
{ ¡Aquí el Label1 puede ser "indefinido" si el Edit1 está vacío! }
  EsLargo := Funcion (Edit1.Text, Label1.Caption);

Muchas veces, cuando usamos el modificador VAR en realidad deberíamos usar OUT (aunque no siempre, ojo). De la misma forma, cuando no usamos ningún modificador muchas veces deberíamos utilizar CONST.

Última edición por Ñuño Martínez fecha: 05-10-2010 a las 12:33:43.
Responder Con Cita
  #6  
Antiguo 05-10-2010
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
Está curioso, es realmente para devolver parámetros. Y para evitar el problema que mencionas, ¿no se le puede pasar un valor por defecto?
Responder Con Cita
  #7  
Antiguo 05-10-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.025
Poder: 27
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cool

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Está curioso, es realmente para devolver parámetros. Y para evitar el problema que mencionas, ¿no se le puede pasar un valor por defecto?
Pero entonces ya no sería "OUT" sino "VAR".

De todas formas yo tengo como costumbre asignar un valor de retorno en la primera línea de las funciones. De esa forma si olvido un ELSE o similar, el daño es menor. Siguiendo con el ejemplo:
Código Delphi [-]
FUNCTION Funcion (CONST Entrada: STRING; OUT Salida: STRING): BOOLEAN;
BEGIN
  Salida := '';
  RESULT := FALSE;
  IF Entrada <> '' THEN Salida := 'Hay entrada';
  RESULT := Length (Entrada) > 5;
END;

Et voilá!

Claro que lo ideal siempre es no olvidarse nunca de los ELSE y los TRY .. FINALLY, pero en ocasiones merece la pena.
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
Grid no trae el result correcto Paulao Varios 14 19-03-2009 14:16:52
Alamcenar Result de storedProc desde otra unidad R0M3R0 Conexión con bases de datos 3 22-08-2008 01:32:52
PROCEDURE xxx.yyy can't return a result set in the given context. erian96 MySQL 2 15-07-2006 21:13:49
Result de un Query a dataset walito Conexión con bases de datos 2 19-04-2006 20:38:12
Parametro Result del StoredProc MarcelRuz Conexión con bases de datos 2 11-06-2004 21:24:15


La franja horaria es GMT +2. Ahora son las 14:31:22.


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