Tema: VAR y CONST?
Ver Mensaje Individual
  #4  
Antiguo 14-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 31
Lepe Va por buen camino
Creo que Neftali y Alfredo han dejado claro el uso de variables y constantes, así que paso a detallar esas palabras reservadas para el paso de parámetros en procedimientos:

Igual que lo explicado anteriormente, const significa Constante, y var significa Variable.

Código Delphi [-]
procedure CopiaArchivo(const NombreArchivo:string; var DaFallos:Boolean);
begin

end;

El uso de const indica que el Nombre del archivo es constante, es decir, dentro de esa rutina no se puede modificar el NombreArchivo, el compilador te dará un error. Esto es muy util, ya que el programador que llama a la funcion CopiaArchivo, sabe que el nombre del archivo no se va a modificar jamás. Por otra parte, se minimiza errores tontos que pueda cometer el que implementa CopiaArchivo.

Imagina que la función fuese así:
Cita:
Empezado por Jamás hagas esto
Código:
procedure CopiaArchivo(var NombreArchivo:string; var DaFallos:Boolean);
begin

end;
El programador que va a usar la función copiaArchivo se queda un poco mosqueado, diría....." a ver, a ver, yo le paso el nombre del archivo, y la rutina puede modificar el nombre....¿que sentido tiene?" Ahora tendría que ir a ver como está hecha la función y entender por qué modifica el nombre del archivo.

El que ha hecho la función, está complicando la existencia a los demás, ¿no crees?.

Esto no debe hacerse jamás!!!
El uso de var indica que dentro de la función se modifica el valor de DaFallos, es decir, es un parámetro de salida. De hecho, esta llamada produce un error en compilación:
Código Delphi [-]
CopiaArchivo('c:\autoexec.bat', true);
Ya que el segundo parámetro puede modificarse dentro de la función y necesita que sea una variable. Para llamarla de forma correcta hay que crear una variable de tipo Boolean y pasarle dicha variable.
Código Delphi [-]
var Fallo:Boolean;
begin
CopiaArchivo('c:\autoexec.bat', Fallo);
if Fallo then 
  ShowMessage('No se puede copiar el archivo c:\autoexec.bat');

Tema aparte, Delphi optimiza las llamadas a los procedimientos dependiendo de si un parámetro lleva el var o el const y es más complejo de lo que puedas creer,(en la ayuda de delphi viene más información al respecto).

Saludos
Responder Con Cita