Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-04-2006
zvf zvf is offline
Miembro
 
Registrado: abr 2006
Posts: 158
Poder: 19
zvf Va por buen camino
Funciones que regresan valor

Quiero saber como se hace para que una funcion regrese un valor, y si es posible regresar mas de un valor en una funcion, dentro de la misma unit y como hacerlo cuando la funcion esta dentro de otra unit.

Por ejemplo la mando llamar:
Código Delphi [-]
  haz_algo (a,b);

y la funcion esta asi:
Código Delphi [-]
  procedure haz_algo (var1 : integer; var2: string) ;
  begin
    //aqui quiero que se regrese un valor
 end;

Y saber si es verdad que toma la variable a, dentro de la funcion con el nombre de var1 y la variable b con el nombre var2.

GRACIAS!
Responder Con Cita
  #2  
Antiguo 22-04-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.110
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Vayamos por partes, como dijo Jack el destripador.

Lo que tú señalas como función es un procedimiento, y, la diferencia entre uno y otra, es que la función devuelve un valor, naturalmente, y el procedimiento no necesariamente.

El siguiente código puede que dé alguna pequeña idea.

Código Delphi [-]
{ Requiere dos parámetros integer; devuelve
  el resultado de sumar estos dos parámetros.
}
function Suma(a, b: integer) : integer;
begin
  Result := a + b;
end;

{ Requiere dos parámetros integer (que se pasan
  por referencia); devuelve el resulado de mul-
  tiplicar estos dos parámetros; también cambia
  el valor las variables de ambos parámetros:
  puede considerarse otra forma de devolver un
  valor, además del resultado de la función.
}
function Multiplica(var a, b: integer) : integer;
begin
  Result := a * b;
  a := 1;
  b := 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  a,b,c: integer; // Para las pruebas

begin

  a := 5; // Inicializamos a 5 la variable A
  b := 5; // Lo mismo hacemos con la variable B

  c := Suma(a, b); // C vale ahora 10

  // Aquí mostramos el valor de A, B y C
  ShowMessage(Format('A vale: %d; B vale %d; C vale %d', [a, b, c]));

  c := Multiplica(a, b); // C vale ahora 25

  { Pero como pasamos por referencia las variables
    A y B, y la función Multiplica modificó su valor,
    lo siguiente mostrará que A vale 1, B también
    y C vale 25, como es de esperar. }

  ShowMessage(Format('A vale: %d; B vale %d; C vale %d', [a, b, c]));

end;

Si te fijas se trata de utilizar dos funciones "Suma" y "Multiplica". Ambas reciben dos parámetros de tipo integer y devuelven la suma de estos, una, y el producto de su multiplicación, otra.

La segunda, además, recibe los parámetros por referencia (la palabra reservada "var" se encarga de hacérselo saber así al compilador), y, de este modo, si dentro de la función se cambia el valor de dichos parámetros/variables, estos cambios se reflejarán en las variables que se pasaron como parámetro.

En el código se ve mejor: a la función "Multiplica" se le pasan dos variables con un valor "5", pero, en su interior se establece el valor de ambas a "1", y este es, efectivamente, el valor que tendrán luego de llamar a la función "Multiplica". No ocurre así en la función "Suma". No se modifica el valor de los parámetros en este caso, pero, aunque así fuera, los cambios de estos solamente estarían disponibles en el interior de la función, porque los parámetros se pasan por valor, no por referencia.

No sé... no sé si te he liado más o qué. Ya dirás algo sobre todo este rollo que he soltado y veríamos cómo seguir adelante.

PD. Una cosa más. Nota que la función "Multiplica", al recibir las variables/parámetros por referencia, puede decirse que devuelve más de un resultado, puesto que en la función, además del resultado, podemos ofrecer resultados en las variables que se pasan como rerefencias, o nosotros podemos tomarnos eso como resultados.

Así tengo entendido que un procedimiento puede devolver un valor, aunque no como una función. Si a un procedimiento se le pasan parámetros por referencia, en cierto modo, a la que modifique dichos parámetros/variables, podemos decir que nos está devolviendo un favor... digo un valor o más de uno.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Funciones que no funcionan micayael PHP 2 13-09-2005 22:26:33
Dll y funciones mar646 API de Windows 2 27-04-2005 16:45:40
procedures y funciones StartKill Providers 1 02-03-2005 12:13:28
Funciones de SQL DarkSide SQL 6 24-01-2005 16:00:02
Funciones Ras mauro Varios 0 17-07-2003 03:36:28


La franja horaria es GMT +2. Ahora son las 09:01:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi