Ver Mensaje Individual
  #13  
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.000
Reputación: 25
Ñ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.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 05-10-2010 a las 12:33:43.
Responder Con Cita