![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Pues yo tampoco tengo instalado VB, y tampoco pienso instalarlo (a mi pc le diagnosticaron alergia al VB y se me puede resfriar). Pero te puedo confirmar que en VB se pueden saltar parámetros. Eso sí, al principio puede parecer muy bonito, pero cuando te encuentras código así (lo estoy escribiendo de memoria, así que puede haber algún error):
[vb (no leer puede dañar el intelecto)] Sub Funcion(primero as Integer, Optional ByVal segundo As Integer = 8, Optional ByVal tercero As Integer = 3, Optional ByVal cuarto As Integer = 3, Optional ByVal quinto As Integer = 7, Optional ByVal sexto As Integer = 9, Optional ByVal septimo As Integer = 3) as integer . . . resultado = Funcion (3, , , variable1, 4, 5, 7) ' o resultado = Funcion(3, cuarto = variable1, quinto = 4, sexto = 5, septimo = 7) [/vb] |
|
#2
|
||||
|
||||
|
Otra opción podría ser sobrecargar el método y crear dos llamadas diferentes con diferentes parámetros (si es que es muy común llamarla con ese parámetro relleno y el resto de los opcionesles no).
La segunda llamada, llamaría a la primera rellenando el resto de parámetros opcionales. Sólo le veo utilidad en el caso que he comentado de que la llamada con el parámetro X9 rellenado y el resto de opcioneles vacíos sea muy habitual.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#3
|
||||
|
||||
|
Hola,
Cita:
![]() Es broma. Pero, vamos... si esto no queda como el culo del profesor Cojonciano que venga dios y lo vea: Código:
resultado = Funcion (3, , , variable1, 4, 5, 7) ![]() |
|
#4
|
||||
|
||||
|
¡Hola a todos!
Luigi_cr: Conozco, he utilizado, pero no me agrada del todo esa flexibilidad adicional de Visual Basic para el manejo de los parámetros opcionales porque propicia el viejo vicio de la parametrización excesiva, en lugar de fomentar una adecuada programación orientada a objetos. Vaya, este tipo de cosas son el quid de las eternas rivalidades entre Delphi y Visual Basic, entre lo bien pensado y lo que vende al vulgo. Dices que no tiene mucho sentido que Delphi impida omitir parámetros intermedios. Bien, eso sería cierto si por otra parte tuviera sentido un método con 10 parámetros y no existiera en Delphi la sobrecarga de funciones (esta característica se incluyó en Delphi al mismo tiempo que los parámetros opcionales). Si lo analizas de una manera objetiva, te darás cuenta que rara vez es menester crear un método con más de tres o cuatro parámetros. La POO está hecha para simplificar la manera de trabajar con los datos y la funcionalidad que hay alrededor de ellos. Un método como ese X.Opcionales tendría que ser revisado. Ahora bien, ya que tengas un método más decente, digamos, que sólo declare unos tres o cuatro parámetros, podrías recurrir a la sobrecarga (directiva Overload), como bien lo sugirió Neftali, para entonces sí permitir la "omisión" de un parámetro intermedio, que en realidad sería utilizar la versión del método que no requiere (que asume) tal parámetro.
Espero esto sea de utilidad. Un abrazo opcional. Al González. ![]() Última edición por Al González fecha: 10-07-2007 a las 17:12:20. |
|
#5
|
|||
|
|||
|
la idea no era comparar si vb o delphi es mejor, yo me quedo con JAVA, pero bueno para que voy a sobrecargar un metodo diez veces si la funcion q cumple es la misma, es decir voy a digitar diez veces el mismo codigo noo, para eso son los parametros opcionales, el procedimiento siempre va hacer lo mimo lo unico que va cambiar es el resultado.
|
|
#6
|
|||
|
|||
|
Cita:
Además, te han dado respuestas de porque no lo hace Delphi, si es mejor o peor no es el caso, mas bien el porque Delphi no lo maneja así. Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
|
#7
|
|||
|
|||
|
En delphi se puede hacer una llamada a un procedimiento evitando algún parámetro cuando se usa OLE:
Código:
Mar:=CreateOleObject('Excel.Application');
Mar.WorkBooks.Open(ExtractFilePath(Application.ExeName)+'\Producto_Terminado_bco.xls');
Mar.Sheets[1].Copy(,Mar.Sheets[1]);
Código:
procedure Copy(Before, After: OleVariant; lcid: Integer); safecall; |
|
#8
|
||||
|
||||
|
¡Hola de nuevo!
Cita:
De hecho, si ese fuese el derrotero, no serían 10 sobrecargas sino casi mil. ![]() Insisto que un método con 10 parámetros es algo que despierta muchas dudas respecto a una buena estructuración de clases. ¿Por qué no nos das un poco de contexto para ampliar el panorama y afinar propuestas? Te invito a leer de nuevo mi comentario anterior. Un abrazo incomparable. Al González. ![]() Última edición por Al González fecha: 10-07-2007 a las 19:35:14. |
|
#9
|
||||
|
||||
|
Hola,
Opino igual que Al, ¿10 parámetros? ¿Que de ellos el 40% sea opcional? Desde ya decanto esa opción. Creo que deberías reconsiderar un mejor análisis de la situación. Yo he llegado a declarar funciones, y clases... pero ninguna excede cuanto mucho a los 4 o 5 parámetros. ¿No podrías considerar que agunos parámetros sean propiedades de la clase? Con respecto a la opción que te recomienda Neftali, creo que es la acertada. Y eso no quiere decir que debas codificar 10 veces el mismo código. Como te lo han dicho hay un error de diseño. La solución es buscar la mínima expresión común e implementarla en una función. Cada sobre carga llamará a dicha función (que debe ser privada, según una primera impresión y análisis). El objetivo de los parámetros opcionales es evitar estar declarando valores que en la mayoría de los casos son considerados por defecto (o considerado lo mayormente esperado), por lo cual indicar un valor distinto sería considerado un caso "particular" (algo no habitual). Este enfoque puede llevarse a la inversa. Es decir que nadie puede impedirte que emplees el valor opcional (por defecto) para evitar hacer una cosa. Algo como esto:
En resumen lo que he tratado de decirte es que podrías llevar y emplear el valor opcional en la forma inversa, es decir que si se suministra un valor distinto que se haga la operación que deba realizar. Para finalizar, debo decirte que a pesar de que esta alternativa pueda llegar a funcionar sigue siendo un error conceptual y de diseño ya que el modo de trabajo no es el normal o "el esperado" del lenguaje. Puede llevar a confusiones en el futuro, y lo hace muy dificil de seguirle un correcto mantenimiento y documentación. Espero que se me entienda. Saludos, |
|
#10
|
||||
|
||||
|
Cita:
Contando que el método esté bien definido y sin poner en duda la definición de la cabecera (cosa que empiezo a dudar dados los problemas que te surgen), lo que yo he comentado es: Cita:
En ese caso, seguramente habría que cambiar la cabecera de la función y llamar con dos arrays de parámetros, por ejemplo: (x1:Integer; xNames:array of String; xValues: array of string) Un array fijo de 4 posiciones, sólo para los opcionales o algun otro sistema que se ajuste a tus necesidades concretas (9 parámetros de tipo string, 4 opcionesles y que además llamas de la forma comentada).
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#11
|
|||
|
|||
|
Muchas Gracias a todos los que, tomarón un poco de sutiempo y postearón tratando de ayudar, al final de cuentas deje el procedimiento como estaba, me parecieron execelentes la mayoria de respuestas...Gracias
Creo que con esto se cierra el tema.... Gracias de nuevo. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| ¿como llamo un procedimiento almacenado? | jeshu252006 | Conexión con bases de datos | 6 | 28-10-2006 17:49:55 |
| Parametros Opcionales no Parametros por defecto | Velia | Varios | 7 | 19-08-2006 15:18:42 |
| Parametros Opcionales | c748a | Varios | 5 | 21-09-2005 04:53:25 |
| Parametros Opcionales en Procedures/Functions | Enan0 | Varios | 4 | 03-03-2005 10:32:30 |
| Parametros opcionales en SELECTs | Gydba | Firebird e Interbase | 4 | 22-04-2004 22:46:38 |
|