FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
¿funcion que devuelva mas de 1 valor?
las funciones solo devuelven 1 valor.
es posible hacer ua funcion que devuelva mas de 1 valor por ejemplo yo llamo a una funcion llamada encontrre esto en php de un array. pero como declaro ese tipo de result como declaro un array en delphi como resultado de una funcion? http://www.superhosting.cl/manuales/...e-valores.html |
#2
|
||||
|
||||
Hola
Perdona pero no entiendo. Lo poco que se de funciones es que en base a una operacion dan un resultado. Esta operacion contiene parametros los cuales son declarados o bien al inicio o dentro de la misma funcion. En el caso de estas funciones que muestras no contienen nada. Lo mas seguro es que no lo entienda, por eso mejor pregunto. Saludos
__________________
Siempre Novato |
#3
|
||||
|
||||
Hola JXJ.
El mismo tema se trato en este hilo, me acuerdo por que cuando leí el título pensé inmediatamente en devolver un registro.(que fué una de las propuestas que ya habían contestado). Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#4
|
||||
|
||||
Hola,
A ver... si la idea es que el resultado en realidad sea un "algo más otros" la función en realidad, técnicamente, SI está regresando varios valores... en cierto modo. Pongamos por ejemplo que sea algo como:
Si se diseña la función para regresar siempre un resultado que sea:
Entonces podría decirse que si, la función estará regresando diferentes valores. El problema pasa aquí no por el lado de la función, sino del cliente que la utilizará. Es YA UNA RESPONSABILIDAD DE ÉSTE de procesar ese resultado variante. La manera más fácil y elemental de dar respuesta es disponer de un CASE:
Esta técnica, o algunas variantes menores, es utilizada en algunas bibliotecas. El concepto y la aplicación se sustenta en el uso de constantes, un resulto muy útil y pasado por alto. Otra posibilidad que también puede considerarse como se señala en el hilo recomendado ecfisa es el uso de parámetros "var". Es decir: function NombreFuncion(Param1, tipo; ... ; var ParamResult: tipo); begin .... end; Y dentro del cuerpo de la función alterar el valor de ParamResult por el adecuado. Noten como ambos esquemas son posibles, es más yo sugeriría que los valores que devuelva ParamResult estén definidos como constantes:
Uno de los peores males y diseños que deben evitarse es que una función regrese un array. Incluso, en lo posible debe de evitarse regresar una estructura como ser un record, o que esté formado por un conjunto de datos simples. Esto hace que existe un acoplamiento de estampado, que si bien manejado no es maligno debe repensarse su utilización. Además este acoplamiento se sugiere, y se lo utiliza de forma inversa. Es decir el módulo cliente o coordinador es quien le pasa como parámetro a otro módulo la estructura que requiere. La idea que la función le regrese al cliente o coordinador dicha estructura es un esquema un tanto fuera de lo normal, a pesar de que pueden aceptarse casos como éste. Hay dos peligros de este acoplamiento: información Innecesaria: pueden darse casos en que no toda la información de dicha estructura se utilice por tanto se malgasta "espacio" o se pierde utilidad, y termina obscureciendo su uso. bundling o empaquetamiento artificial: que se terminen empaquetando en una estructura de datos información no relacionada con la idea de reutilizarla en otros módulos y ganar "espacio" en los parámetros. Por ejemplo:
En el ejemplo se ha intentado "empaquetar" tanto la información sobre las Facturas y Recibos en una sola cosa pensando que sería una gran idea tenerlas juntas porque en dos o tres lugares se requiere de ambas. ¿Porqué no mejor separar Facturas de Recibos? ¿Se ve mejor el peligro de este acomplamiento? El acoplamiento por medio de parametros por referencia/valor de datos simples es más fácil de mantener, limpio y sano que este empaquetado. En lo posible hay que llegar al acoplamiento de datos o al de Control (cuando un parámetro se utiliza para controlar la lógica interna). Saludos, |
#5
|
||||
|
||||
Es más el tema del acoplamiento de control puede llevarse desde el módulo coordinador (cliente) como del subordinado. Es decir pueden esperarse ambas direcciones del parámetro de control:
1. Que el subordinado reciba el control, o bien 2. Que el subordinado sea quien notifique del control a aplicar Para el caso 1, el parámetro de control regula la lógica interna:
Para el caso 2, se requiere de "var":
El caso 2 como ya debe haber quedado claro se emplea cuando el subordinado debe notificar de algo "extra" o que sea a modo de control, o de cambio de "estado" al coordinador. Luego queda en el coordinar lleva a cabo lo necesario y en su responsabilidad de que hacer con él. Un caso aún aceptable de acoplamiento es un híbrido: una combinación del acoplamiento de datos más de control. Pero también debe evitarse. De hecho la escala de acoplamiento sugerida de mantener es: 1) Acoplamiento de datos 2) Acoplamiento estampado 3) Acoplamiento de control 4) Acoplamiento Híbrido 5) Acoplamiento Común 6) Acoplamiento por Contenido (o Patológico) Siendo 1 es más deseable y 6 el menos deseable. El punto y a lo que voy es que se debería pensar bien objetivamente que es lo que se pretende de esto. ¿Cuál es verdadero objetivo y lo que motiva a que una función deba regresar varios resultados? ¿Se debe hacer algo en función de esos resultados? ¿Esos resultados son utilizados para alguna situación diferente o a un tratamiento diferente? Responder a esas preguntas puede ayudar a determinar si en verdad el diseño que se estaba pensando es el más adecuado. Saludos, |
#6
|
||||
|
||||
¿Y... a todo esto, como ha quedado? Parece que ha JXJ le cortaron las manos porque se lo ha visto por aquí y no ha comentado al respecto.
Saludos, |
#7
|
|||
|
|||
Cita:
pues no entendi muy bien.. pero me gusta como se ve la funcion de Ñuño Martínez http://www.clubdelphi.com/foros/show...cion+resultado
namas no entiendo como la llamo o como recibo el result mas el otro valor de retorno. procedure recibe2valores; begin if Funcion ('valor de entrada', ) = True then begin end else begin end end Última edición por ecfisa fecha: 14-04-2011 a las 20:28:35. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Función devuelva día del año | Moparova | Varios | 2 | 23-04-2007 23:03:59 |
Funcion que Devuelva Fecha y Hora en C# | omar_e_rc | .NET | 1 | 28-09-2005 21:47:59 |
Crear Formulario que me devuelva un valor | coulthard | Internet | 2 | 26-11-2004 13:32:53 |
Funcion que devuelva mas de un valor | ckaki | Varios | 1 | 27-11-2003 00:07:59 |
Funcion Udf que devuelva un blob (imagen) | Emiro | Firebird e Interbase | 2 | 04-08-2003 15:59:40 |
|