Foros Club Delphi

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

bbjb 27-09-2004 16:37:16

Problemas con funcion
 
Disculpen mi ignorancia (que es inconmensurable), pero es que procedo de la programación en 4gl, donde la declaración de una función te permite el retorno de multiples valores.

Sin embargo, desconozco si esto es posible en delphi, aunque creo que no, ya que solo se puede asociar un valor a la variable Result ¿me equivoco?.

Posdata : Ni que decir que soy principiante en esto.

roman 27-09-2004 16:45:44

Cita:

Empezado por bbjb
ya que solo se puede asociar un valor a la variable Result ¿me equivoco?.

Pues no te equivocas pero una función puede tener como valor de regreso un tipo de datos estructurado, un record por ejemplo, de manera que esto puede solventar la falta de valores de regreso múltiple.

// Saludos

bbjb 27-09-2004 16:54:47

¿La definicion de la misma sería algo asi como?

Function devuelve_valores ( s_cadena:String) :Record;

roman 27-09-2004 17:02:17

Cita:

Empezado por bbjb
¿La definicion de la misma sería algo asi como?

Function devuelve_valores ( s_cadena:String) :Record;

No. Tienes que especificar qué tipo de record vas a usar. Por ejemplo:

Código Delphi [-]
type
  TPersona = record
    Nombre: ShortString;
    Edad: Integer;
  end;

function UnaPersona: TPersona;
begin
  Result.Nombre := 'roman';
  Result.Edad := 65;
end;

// Saludos

bbjb 27-09-2004 17:05:09

Millon de gracias, te debo una.

roman 27-09-2004 17:11:20

Cita:

Empezado por bbjb
te debo una.

¡Ah! Pues me la puedes pagar fácilmente :p explicándome esto:

¿Qué viene a ser una función que regresa múltiples valores? En mis tiempos, matemáticamente hablando, regresar un sólo valor es un requisito para que una relación entre dos conjuntos sea una función.

// Saludos

bbjb 27-09-2004 17:33:41

Quiero construir una sql dependiendo del campo seleccionado en un formulario, de tal manera que si este campo es coche obtendre:

Código:

If campo = 'automovil' Then
  s_tabla  := 'automovil'
  s_campo := 'aut_descri'
  s_where  := 'aut_codigo'
Else If campo = 'camion' Then ...

Con estas tres variables puedo construir la sql de la siguiente manera:

Código:

  s_sql := ' Select ' + s_campo + ' From ' + s_tabla + ' Where ' + s_where  + ' =  1'
Este metodo lo puedo utilizar para el resto de tablas utilizadas en el programa.

Esta función la he incluido en un módulo general donde están todas las funciones y procedimientos genéricos.
Entre las diversas y múltiples opciones que existan, está la de crear variables globales y un sinfin más que harán de este método el menos adecuado, pero recuerda que vengo de programar en 4gl y estoy algo atrofiado, así que no te me riñas por favor.

roman 27-09-2004 17:41:17

Cita:

Empezado por bbjb
así que no te me riñas por favor.

Je, je, si no te estoy riñendo :) Mi pregunta era genuina, quiero saber qué significa en 4GL una función que devuelva múltiples valores. ¿Cómo se especifica algo así? ¿Como escoges cuál valore de regreso usar? Etc.

// Saludos

bbjb 27-09-2004 17:51:17

Es muy diferente la programación.

En la definición de la función no tienes que indicas el número de valores que devuelve la misma, simplemente devuelves los que te sean necesario .

Y a la hora de obtener los valores es tan simple como, poner en el mismo orden las variables que los valores retornados, de esta manera si en la variable 1 quieres guardar el retorno 1 solo habrá que hacer...

Código:

Main
  Define p_var1,p_var2,p_var3  Integer;

  Call devuelve_valores Returning  p_var1,p_var2,p_var3

End Main

Function devuelve valores

  Return 4,6,7

End Function

La variable p_var1 recoge el valor 4 , p_var2 = 6 y p_var3 = 7

Por eso, el cambio de una programación a otra es más que ostensible y uno va a base de tropezarse.

Si no fuera por gente como vosotros... :D

roman 27-09-2004 18:01:27

:eek: Interesante.

Pero entonces ¿quiere decir que no puedes usar la llamada a una función como parte de una expresión? Por ejemplo en un lenguaje como Delphi puedes poner la expresión

3*MiFuncion + 4;

En 4GL, ¿debes recoger primero los valores antes de poder usarlos?

// Saludos

bbjb 27-09-2004 18:08:19

También puedes hacer ese uso de la función, solo que te he puesto como ejemplo algo similar a lo que intento hacer en delphi.


La franja horaria es GMT +2. Ahora son las 06:03:14.

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