Ver Mensaje Individual
  #6  
Antiguo 12-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Cita:
Empezado por Norum Ver Mensaje
Hola Delphius!

Vayamos por partes....

Con respecto al formato para que quede el código encuadrado, lo hice con el boton de "resaltar sintaxis de delphi", ahora lo raro es que en la vista preliminar se veía bien como debería ser, ahora en la versión final salió lo que salió, medio desparejo.
Voy a ver en la próxima a ver cómo sale.
Es sencillo simplemente antes de poner el código escribres [ DELPHI ] (pero sin los espacios). Luego escribes el código y al finalizar, colocas [ /DELPHI ] (también sin espacios).


Cita:
Empezado por Norum Ver Mensaje
Con respecto a la Cara Oculta, lo estuve leyendo, me parece un librazo, pero justamente no es para novatos, Ian Marteens lo explica al principio. Si bien pude seguirlo un poco al principio y el libro tiene un tono ameno y divertido, que me ha hecho reir más de una vez (supongo que a otro le ha pasado lo mismo), después se torna más complejo.
Voy a ver de nuevo donde trata el tema de parámetros por valor y por referencia.
La Cara Oculta es un buen libro para comenzar... si cuesta un poco es porque no es que te va a explicar todo sobre el lenguaje.

A ver... el asunto de valor o referencia no es tan complicado. Cometí un error en el mensaje anterior. Veamos de nuevo.

Código Delphi [-]
Procedure MiProcedimientoA (Algo: integer); // Este es "por valor"
Procedure MiProcedimientoB (var Algo: integer); // Esto es "por referencia"

Cuando los parámetros se pasan por valor, el compilador lo que hace es copiar el VALOR que contiene la variable Algo. Por lo que dicha variable no se ve alterada dentro del procedimiento. En cambio, cuando se pasa por referencia, el compilador suministra el "puntero" de dicha variable, y con esto se conseguie que la variable Algo pueda alterar su valor.

Supongamos que tienes una variable MiAlgo y se hace esto:

Código Delphi [-]
MiAlgo := 5; // MiAlgo vale 5
MiProcedimientoA(MiAlgo); // MiAlgo sigue valiendo 5
ShowMessage(IntToStr(MiAlgo)); // nos mostrará 5!

Pero en cambio si haces:

Código Delphi [-]
MiAlgo := 5; // MiAlgo vale 5
MiProcedimientoB(MiAlgo); // MiAlgo sigue valiendo 5
 ShowMessage(IntToStr(MiAlgo)); // MiAlgo no vale 5. ¿Cuanto vale?

Es decir que cuando se procede por referencia se está pidiendo que se trabaje con dicha variable y no una copia. Es por ello que una vez que finalizas este procedimiento debes chequear el valor que contiene MiAlgo.

Se debe usar MiAlgo cuando tenga sentido esperar un cambio en alguna variable. O incluso cuando se desea obtener más de un valor.
Te voy a poner un ejemplo, extremo, de un mal uso del var:

Código Delphi [-]
procedure Sumar(A, B: integer; var Suma: integer);
begin
  Suma := A + B;
end;

Lo que tenga la variable Suma será cambiado por la operación que se realice. En este caso la suma de A y B. ¿Es útil tener esto? La respuesta es no. Bastaría con tener una función:

Código Delphi [-]
function Sumar(A, B: integer): integer;
begin
  result := A + B;
end;

Pero en cambio, es útil el valor de var cuando se desea crear variables de control de operación (o variables de estado). Por ejemplo puede ser útil esto:

Código Delphi [-]
procedure RealizarOperacion(Operacion: TOperacion; var Estado: TEstado);

Y asi como tenemos un procedimiento, podemos tener una función.

Cita:
Empezado por Norum Ver Mensaje
Por último, voy a seguir adelante porque creo que esto no tiene mucha vuelta que darle. Si se llega a complicar con más unidades (cosa que no creo), voy a investigar más a fondo este tema de no dejar variables "muy al descubierto".
Sigue. Continua. Si tu crees que esta bien, no dejes de avanzar.


Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita