para levine estadística estadistica edicion conceptos básica berenson basica aplicaciones administración administracion 4ta delphi parameters pass-by-reference

delphi - estadística - estadistica para administracion levine 4ta edicion pdf



¿Cuál es la diferencia entre los parámetros "var" y "out"? (3)

¿Cuál es la diferencia entre los parámetros declarados con var y los declarados out ? ¿De qué forma el compilador los trata de forma diferente (por ejemplo, generando códigos diferentes o cambiando los diagnósticos que genera)? ¿O los diferentes modificadores simplemente le permiten al programador documentar el uso previsto de los parámetros? ¿Qué efecto tienen los tipos de parámetros en el asunto?


No hay mucha diferencia, para el compilador que es. Ver la respuesta de Mason para eso.

Semánticamente, hay una gran diferencia:

  • var le dice al programador que la rutina podría funcionar con su valor actual,
  • out le dice al programador que la rutina ignorará / descartará su valor actual.

Un parámetro var se pasará por referencia, y eso es todo.

Un parámetro de out también se pasa por referencia, pero se supone que el valor de entrada es irrelevante. Para los tipos gestionados, (cadenas, interfaces, etc.), el compilador aplicará esto, borrando la variable antes de que comience la rutina, equivalente a escribir param := nil . Para tipos no administrados, el compilador implementa de forma idéntica a var .

Tenga en cuenta que la eliminación de un parámetro gestionado se realiza en el sitio de llamada y, por lo tanto, el código generado para la función no varía con out parámetros out o var .


Un poco tarde, pero para que quede constancia, encontré un caso en el que var o out marcó una gran diferencia.

Estaba trabajando en un servicio web SOAP que exportaba el siguiente método:

function GetUser( out User :TUser ) :TResult;

que se estaba importando a C # como el equivalente de

function GetUser( out Result :TResult) :TUser;

cuando cambié la salida a una var que importó correctamente.

Supongo que el invocador Delphi SOAP trata el resultado de la función como un parámetro de salida y que tener dos parámetros de salida confunde las rutinas Delphi SOAP. No estoy seguro de si hay una solución que te permita usar los parámetros.