Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-07-2007
luigi_cr luigi_cr is offline
Miembro
 
Registrado: jul 2007
Ubicación: Costa Rica
Posts: 39
Poder: 0
luigi_cr Va por buen camino
como llamo a un procedimiento con parametros opcionales

Ok este es el procedimiento que he creado los ultimos cuatro parametros son opcionales:

Código Delphi [-]
procedure X.opcionales(x1 : Integer; x2 : String;
                          x3 : String; x4 : String;
                          x5 : String; x6 : String;
                          x7 : String = '000000000000';
                          x8 : String = '00000000';
                          x9 : String = '000000';
                          x10 : String = '000000');

pero okupo llamar al procedimiento y pasarle solo los x1, x2, x3, x4, x5, x6 que son los obligados y ademas el parametro x9 por dar un ejemplo; yuo crei q simplemente dejaba el espacio en blanco cuando hacia la llamada al procedure:


Código Delphi [-]
opcionales(x1, x2, x3, x4, x5,
              x6, , ,x9);

no paso ni x7, x8, x10, pero no me funciona me da el siguiente error:

[Error] X.pas(425): Expression expected but ',' found

la idea del procedure con parametros opcionales, es para llamarle varias veces con unicamente los parametrso que okupo pasarle.
Responder Con Cita
  #2  
Antiguo 10-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Si no me equivoco no puedes hacer lo que quieres tal como quieres hacerlo. Se me ocurre que si no quieres ocupar un parámetro opcional, pero, necesitas indicar un parámetro opcional posterior... tal vez puedas establecer el parámetro que no necesitas con el valor por defecto. No sé si me explico.

Código Delphi [-]

procedure Proc(p1: string; p2: integer = 1; p3: integer = 2);
begin
  {...}
end;

{...}

begin
  Proc('cadena', 1, 3);
end;

Suponiendo que lo que me interesa realmente es que "llegue" el tercer parámetro, lo que puedo hacer es establecer el segundo parámetro con el valor por defecto. Creo que esa es la única manera de conseguir algo similar a lo que dices, pero, a lo mejor me equivoco.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 10-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
La verdad la solucion expuesta por Dec es la mas facil y yo tampoco se si habra otra, pero de recomendacion es mas sencilo hacerlo asi que seguir esperando
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #4  
Antiguo 10-07-2007
luigi_cr luigi_cr is offline
Miembro
 
Registrado: jul 2007
Ubicación: Costa Rica
Posts: 39
Poder: 0
luigi_cr Va por buen camino
si entiendo tu respuesta y te agredesco, pero entonces que sentido tienen los parametros opcionales, si digamas kiera (en mi ejemplo) insertar, bueno los seis primeros q son obligatorios, y solamente el diez, de la forma que tu dices, entonces tendria que pasarle los diez parametros y asi no tiene mucho sentido el uso de parametros opcionales, gracias de todos modos.
Responder Con Cita
  #5  
Antiguo 10-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Estamos hablando de que es sintácticamente un error tratar de hacer lo que dices. Es decir, el compilador no toleraría esto:

Código Delphi [-]

Proc('cadena', , 3);

Y cualquier otra cosa pasa por un valor válido, sea este o no el determinado "por defecto" para el parámetro. Ya digo, no sé explicarme, pero, me parece algo de cajón que no funcione el asunto tal como quieres.

Ahora bien, contar con la posibilidad de establecer parámetros opcionales... podrá venir bien en algunas ocasiones, podrá no ser recomendable para otras... como suele ocurrir: no es el cuchillo el que mata.

Personalmente, encuentro la posibilidad de establecer parámetros opcionales una buena cosa. Puede ser útil no pocas veces, incluso con sus limitaciones, si quiere verse así.

Por cierto, en PHP, por ejemplo, el modo de tratar los parámetros opcionales es igual que en Delphi. E intuyo que no puede haber mucha diferencia con otros lenguajes.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 10-07-2007 a las 02:18:27.
Responder Con Cita
  #6  
Antiguo 10-07-2007
luigi_cr luigi_cr is offline
Miembro
 
Registrado: jul 2007
Ubicación: Costa Rica
Posts: 39
Poder: 0
luigi_cr Va por buen camino
sip entendi tu respuesta y gracias, me parece un poco engorroso q en delphi se tenga que hacer asi, y si en JAVA o en VB cuando llamas al procedure y no quieres pasarle un parametro simplemente lo dejas en blanco, ya veo que en delphi no, gracias de todos modos
Responder Con Cita
  #7  
Antiguo 10-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

¿Cómo? ¿Que en Java o Visual Basic (+ Satán +) puede hacerse lo que dices? ¡Pero entonces estoy completamente equivocado! Ahora bien, ¿cómo es posible? ¿Podrías poner aquí algo de código y si no es mucha molestia explicarlo? No hay forma de "saltarse" un parámetro. Tal como lo dices y/o tal como yo lo entiendo no puede hacerse eso en ningún lenguaje de programación de que yo tenga una mínima noción...

Y estoy dispuesto a cortarme la... coleta.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 10-07-2007 a las 02:30:39.
Responder Con Cita
  #8  
Antiguo 10-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Cita:
Empezado por DEC
Y estoy dispuesto a cortarme la... coleta.
jajaja esa estuvo bueno

Por intuicion creo que vb lo permite gracias a los tipos Variant, habria qe tratar de hacelo con la opcion explicit = true
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #9  
Antiguo 10-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Nada, nada... yo exigo pruebas.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 10-07-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Lamento no poder probarlo pero no tengo instalado VB y espero que comprendas qe no pretendo instalarlo :P
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #11  
Antiguo 10-07-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Yo creo que se refiere a esto

Cita:
Empezado por ajlopez
Pero args no es sólo un String. Es un arreglo de String. Eso es por el uso de [] en la declaración:

String args[]

Esos corchetes declaran que es un arreglo, en este caso, de String. Por qué la existencia de este parámetro en main? Esta clase ejecutará un programa de consola. Lo lanzaremos desde la línea de comando (el próximo punto a estudiar es cómo compilamos y ejecutamos la clase). Cuando escribimos un comando, podemos agregarle parámetros. Justamente esos parámetros opcionales son los que Java se encarga de entregarnos en el argumento args. Notemos que al declarar un arreglo, no hemos puesto la cantidad de elementos que tiene.
Aqui el link.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #12  
Antiguo 10-07-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bien puede ser egostar, pero, eso no deja de ser un parámetro. ¿Que puede incluir varias cadenas de caracteres? Sí; pero no deja de ser un solo parámetro. Ains... a ver si el amigo luigi_cr nos saca de dudas.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #13  
Antiguo 10-07-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
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]
Responder Con Cita
  #14  
Antiguo 10-07-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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).

Código Delphi [-]
procedure X.opcionales(x1 : Integer; x2 : String;
                          x3 : String; x4 : String;
                          x5 : String; x6 : String;
                          x7 : String = '000000000000';
                          x8 : String = '00000000';
                          x9 : String = '000000';
                          x10 : String = '000000'); overload;

procedure X.opcionales(x1 : Integer; x2 : String;
                          x3 : String; x4 : String;
                          x5 : String; x6 : String;                          
                          x9 : String = '000000'
); overload;

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.
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
¿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


La franja horaria es GMT +2. Ahora son las 14:42: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