Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   como creo funcion ? (https://www.clubdelphi.com/foros/showthread.php?t=32104)

kiringui 26-05-2006 12:38:40

como creo funcion ?
 
buenas queridos maestros!!!!
soy nuevo en esto y me interesaria saber como devo crear una nueva funcion ...
sonde devo implemetarla ????
Y a poder ser algun ejemplillo?

gracias
kiringui

dec 26-05-2006 12:54:23

Hola,

Tal vez te interesaría echar un vistazo al curso de Delphi que tiene Francisco Charte en su Web Torre de Babel.

Bicho 26-05-2006 12:56:22

Hola y bienvenido al ClubDelphi, nunca viene mal darle un repaso a la Guia de Estilo .

En cuanta a tú duda ahí va un ejemplo. Las funciones, al igual que los procedimientos puedes declararlo donde quieras, generalmente en la parte privada, pero si deseas que sea accesible, desde otros módulos del programa puedes ponerla en parte private.

La forma de declararla es sencilla, le pones el identificador delate de si es procedure o function, un espacio y le nombre de dicha funcion. Despues le puede poner los parámetros que le quieras pasar (entre parentesis) y los datos que quieres que te devuelva.

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    Button1: TButton;  
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    function SumaValores(valor1, valor2 : Integer) : Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var v1, v2 : Integer;
begin
   v1 := 3;
   v2 := 8;
   edit1.text := IntToStr(sumavalores(v1, v2));
end;

function Tform1.SumaValores(valor1, valor2 : Integer) : Integer;
begin
   Result := valor1 + valor2;
end

end.

Es sencillo, hemos declarado la funcion en la parte privada del programa, la hemos implementado con la combinación de teclas CTRL + SHIFT + C, para que se cree el cuerpo de la funcion:

Código Delphi [-]
function Tform1.SumaValores(valor1, valor2 : Integer) : Integer;
begin

end

y luego la hemos rellenado. Lo que hay entre parentesis sin los valores que le pasamos y lo que hay despues de los dos puntos es el tipo de dato que queremos que nos devuelva.

Por último hemos añadido un botón que rellena la propiedad text de un campo edit con el valor que devuelve la funcion que hemos creado. Hemos tenido que hacer un cast (IntToStr), porque la propiedad text es una cadena de texto.

Si tienes alguna duda más postéala aquí.

Espero te haya servido.

Saludos

dec 26-05-2006 13:01:32

Hola,

Sólo quería añadir que Bicho está declarando e implementando métodos de un objeto, más que funciones, simplemente. Implementar una función puede hacerse dentro de la cláusula "implementation" de una determinada unidad, y, si se quiere que dicha función sea accesible desde fuera de dicha unidad, habría que añadir el prototipo de la función, su declaración, dentro de la cláusula "interface". Algo como esto:

Código Delphi [-]
unit UMiUnidad;

interface

implementation

{ Función no accesible desde fuera de esta unidad
}
function Suma(const a,b: integer) : integer;
begin
  Result := a + b;
end;

end.

O esto:

Código Delphi [-]
unit UMiUnidad;

interface

function Suma(const a,b: integer) : integer;

implementation

{ Función accesible desde fuera de esta unidad
}
function Suma(const a,b: integer) : integer;
begin
  Result := a + b;
end;

end.

Pero, en fin, sigo remitiéndote al curso de Delphi que he mencionado antes y a otros que puedas encontrar. Sólo quería decir que Bicho ha utilizado métodos, que, efectivamente, no dejan de ser funciones, pero, funciones que pertenecen a un objeto.

roman 26-05-2006 13:02:41

En pascal una función se declara así:

Código Delphi [-]
function MiFuncion(parámetros): tipo;
begin
  (*
    código de la función
  *)

  Result := valor_de_vuelta;
end;

Ejemplo:

Código Delphi [-]
{ Suma dos números enteros }
function Suma(A, B: Integer): Integer;
begin
  Result := A + B;
end;

Ahora, ¿dónde implementarla?

En pascal, una unidad tiene la siguiente estructura:

Código Delphi [-]
unit nombre_de_unidad;

interface

implementation

end.

Debes poner la implementación en lasección implementation

Código Delphi [-]
unit nombre_de_unidad;

interface

implementation

function Suma(A, B: Integer): Integer;
begin
  Result := A + B;
end;

end.

Puesto así nada más, sólo podrás usar la función en la misma unidad. Para poder usarla en otras unidades, debes "exportarla" colocando su encabezado en la sección interface:

Código Delphi [-]
unit nombre_de_unidad;

interface

function Suma(A, B: Integer): Integer;

implementation

function Suma(A, B: Integer): Integer;
begin
  Result := A + B;
end;

end.

// Saludos

dec 26-05-2006 13:13:16

Hola,

Román, he restaurado tu mensaje, puesto que creo que aporta información que puede ser útil.

Bicho 26-05-2006 13:36:26

me han distraido
 
Sólo añadir que dec tiene razón con lo poder declarar una función directamente en el apartado interface sin necesidad de declararlo como un método privado o publico. Tenia pensado ponerlo, pero me distrajeron mientras lo redactaba y al retomarlo se me fue de la cabeza y proseguí con lo empezado.

Siempre es bueno tener gente en el club que está a punto siempre para detectar cualquier errata/fallo o en éste caso un descuido de cualquiero.

Con ésto no quiero ofender a mi buen amigo dec, en absoluto, en éste caso agradecer la rapidez con la que ha visto lo que me dejaba y nos ha adevertido por ello ;)

Saludos

roman 26-05-2006 13:51:15

Cita:

Empezado por Bicho
Sólo añadir que dec tiene razón con lo poder declarar una función directamente en el apartado interface sin necesidad de declararlo como un método privado o publico.

Yo creo que hay que tener muy clara la diferencia. Tú lo dices como si private o public fuesen otras secciones de la misma unidad, al igual que interface o implementation. Pero son de naturaleza totalmente distinta.

private o public son "secciones" de la declaración de una clase y las "funciones" o "procedimientos" allí declarados son métodos del objeto que se esté definiendo.

Las clases se definen entro de una unidad pero no son inherentes a ella y una unidad puede no tener definida ninguna clase. Además, los métodos de una clase no pueden usarse directamente sino que debe siempre crearse un objeto de esa clase.

// Saludos

Bicho 26-05-2006 14:01:40

Cita:

Empezado por roman
Yo creo que hay que tener muy clara la diferencia. Tú lo dices como si private o public fuesen otras secciones de la misma unidad, al igual que interface o implementation. Pero son de naturaleza totalmente distinta.

Tienes razón, me expresé mal. Pero el estar 3 años trabajando de la misma forma y sólo programando en el trabajo, ya no programo fuera, hace que mi forma de programar sea monotona, y la forma de trabajar en mi empresa, es decir que los programas que desarrollamos no necesitan de estructas en la que tengamos que declarar varias clases en la misma unidad, y nos hemos acostumbrado a declarar siempre las funciones dentre de las secciones de la clase del formulario en el que estemos trabajando. No es que lo desconociera, en absoluto, pero repito, la rutina del trabajo y la falta de práctica en ésto, aparte de la distracción antes comentada han hecho que lo olvidase, es lo que tiene estar posteando en el trabajo, pero no se lo digais a nadie :D

Un saludo

kiringui 29-05-2006 09:33:38

kiringui
 
gracias a todos prove varias formas funcia perfect!!!!!
Otra consulta ....
como pinto una celda en concreto de stringgrid ????

kiringui,


La franja horaria es GMT +2. Ahora son las 20:44:22.

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