Cita:
Empezado por Casimiro Notevi
No recuerdo haber usado nunca 'out' ![Embarrassment](http://www.clubdelphi.com/foros/images/smilies/redface.gif) , ¿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:
- En ese parámetro sólo pueden usarse variables: ni constantes ni expresiones ni funciones... En esto es igual al modificador VAR.
- Como vas a ignorar el valor del parámetro, el compilador puede ahorrarse el apilarlo en la llamada, optimizando la operación.
- Como es un parámetro de "sólo salida", el compilador puede optimizar la vuelta (RET) del procedimiento o función.
- 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;
...
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.