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 22-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Llamar a funcion sin definir todos los parametros

Buenos dias

es posible en Delphi llamar a una funcion con parametros sin necesidad de indicarle la totalidad de los parametros?

por ejemplo

Código Delphi [-]
 
EstablecerRangos ()
 
EstablecerRangos(1)
 
EstablecerRangos(1,1)
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #2  
Antiguo 22-03-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Sí, es posible cuando la función tiene parámetros declarados con valor predeterminado:

Código Delphi [-]
Procedure EstablecerRangos (Par1 :Integer = 10; Par2 :Integer = 100);
Begin
End;

...

  EstablecerRangos;
  EstablecerRangos (5);
  EstablecerRangos (5, 50);
Responder Con Cita
  #3  
Antiguo 23-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
debo entender que si no los tiene predeterminado no se puede?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #4  
Antiguo 23-03-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por oscarac Ver Mensaje
debo entender que si no los tiene predeterminado no se puede?
Así es. De otra manera, ¿cómo sabría la función qué valores usar?
Responder Con Cita
  #5  
Antiguo 23-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
mmmm
yo provengo de otro lenguaje (Visual Fox - aunque algunos no lo consideran un lenguaje)

como sea... en Fox nuo podia llamar a una funcion inclusive sin parametros

EstablecerRangos()

Cita:
Function EstablecerRangos
Parameters RInicial, RFinal
RInicial = Iif (Type('rInicial') $ 'U', valor asignado, RInicial)
RFinal = Iif (Type('rFinal') $ 'U', valor asignado, RFinal)
Explicacion

se llama a la funcion sin parametros.. dentro de la funcion se pregunta si el tipo de Variable (del parametro) es Undefined o no definido, entonces toma un valor. caso contratio es un valor definido y conserva su valor....

no he visto hasta el momento en Delphi algo parecido
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #6  
Antiguo 23-03-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Me dio algo de nostalgia el ejemplo que expones. No porque le tuviera mucho cariño a FoxPro (también lo usé pero desde los tiempos en que todavía no existía la versión "visual"), sino por lo emocionante que era sacarle provecho hasta la última de sus limitadas capacidades como lenguaje (aquello de 5 niveles de llamadas como máximo era una majadería).

En Delphi sí que has visto ya algo parecido y que además requiere mucho menos código: los parámetros con valor predeterminado.

Responder Con Cita
  #7  
Antiguo 23-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
yo tambien use el Foxpro en sus primeras versiones... recuerdo la FoxproLn 2.0 version para redes

y aun es ese limitado lenguaje desarrolle rutinas de busqueda incremental en un "popup" simulado, asi como reportes "armados" que columnas variables e incluso recursividad
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #8  
Antiguo 23-03-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Encontré esto entre mis recuerdos, que de recuerdos tienen poco pues leo mi propio código de entonces y no entiendo nada.

Código:
* Introducir Teclaso Corrector.  Para usarse antes de un Read (o continuaci¢n
* de Read) que leer  botones, cajas de verificaci¢n o botones radio.
Procedure IntrTecCor
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Si el £ltimo teclaso antes de un Read es un click de rat¢n y el *
  * primer objeto de lectura es un bot¢n, una caja de verificaci¢n  *
  * o un bot¢n radio, FoxPro comete el grav¡simo error de no        *
  * resaltar tal objeto, por lo que yo utilizo las siguientes dos   *
  * l¡neas para asegurar que la £ltima pulsaci¢n antes del Read sea *
  * de teclado.  Keyboard mete el teclaso en el buffer de teclado e *
  * InKey lo extrae de ah¡ (para que no sea le¡do en el Read).      *
  * As¡, FoxPro "piensa" que la £ltima pulsaci¢n del usuario fue de *
  * teclado y s¡ resalta el objeto correctamente.                   *
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  Keyboard "{F2}" Plain Clear
  = InKey ()
Return
Responder Con Cita
  #9  
Antiguo 23-03-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Por cierto, en aquellos años tuve el descaro de diseñar un sistema de ventanas, menús y escritorio bastante más flexible que el nativo, incluyendo la capacidad de cerrar la aplicación en cualquier momento y abrirla nuevamente con todo lo que había en pantalla tal y como estaba (ventanas, variables, e incluso el cursor de teclado en el mismo objeto).

Aquello era como hacer "hibernar" a la aplicación, o como una especie de "snap shot" con el que se podía restaurar la sesión aún habiendo apagado o cambiado de computadora.

Estaba encantado con aquellos pequeños artilugios. Ahhhh, que tiempos...
Responder Con Cita
  #10  
Antiguo 23-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
yo encontre esta...
que me seria muy util en Delphi para cuando tengo un campo que debe ser validado

Cita:
Function _up
Clear Type
Return inli(Lastkey(), 5, 19, 26, 28)
lo que hace esta funcion es verificar si la tecla pulsada es arriba o izquierda, o home.. etc entonces... cuando hacia un get

Cita:
@10,10 Get _variable1 Pict "@!K' valid !_up() and fvalida_Variable1()
@12,10 Get _variable2 Pict "@!k' valid _up() or fvalida_Variable2()

lo que hace esto es... en el primer GET o edit. no me permitira "subir", entonces lo que coloque en el campo o variable... sera validado pero....
en el segundo get si me permite subir antes de validar la variable...

como dije...
esto me seria muy util en Delphi
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #11  
Antiguo 23-03-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo tuve un paso fugaz por FoxPro y lo que hice fue un sistema de menús que calcaba el de Turbo Pascal.

// Saludos
Responder Con Cita
  #12  
Antiguo 23-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
se me acaba de ocurrir una idea...
muchos de nosotros (los que provenimos de otros lenguajes) ya teniamos ciertas rutinas las cuales nos facilitaban la vida

es por eso que propongo la creacion de un mural donde "expongamos" las soluciones que le hemos dado en el lenguaje delphi

por ejemplo

en Foxpro tenia la funcion IIF (asi como el iif de Access)
la solucion en delphi la hice asi

Código Delphi [-]
 
function IIF(Condition: Boolean; TrueString : String; FalseString: String = ''): String; overload;
begin
  if Condition then
    result := TrueString
  else
    result := FalseString;
end;

y su aplicacion....
Código Delphi [-]
qrlSubTitulo.Caption := iif (frmBalanceIntegralGasto.rgRango.ItemIndex = 0, 'Saldos Mensuales','Saldos Acumulados');
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #13  
Antiguo 23-03-2011
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Cita:
Empezado por Al González Ver Mensaje
En Delphi sí que has visto ya algo parecido y que además requiere mucho menos código: los parámetros con valor predeterminado.
Como dice Al, en Delphi puedes lograr el mismo efecto con los parámetros con valores por defecto...

A manera informativa, te cuento que existe otra manera de lograr el efecto de utilizar un mismo método con diferentes parámetros, inclusive con diferentes tipos de parámetros... y que por supuesto te va a parecer mas largo, pero es bastante util en diferentes circunstancias... estos son los métodos sobrecargados (overload)...

Código:
En la seccion (interface)
  procedure MyMetodo(Parametro1: Integer; Parametro2: String); overload;
  procedure MyMetodo(Parametro1: Integer); overload;
  procedure MyMetodo; overload;

y en la implementacion

  procedure MyMetodo(Parametro1: Integer; Parametro2: String); 
  begin
  end;

  procedure MyMetodo(Parametro1: Integer);
  begin
  end;

  procedure MyMetodo;
  begin
  end;
Como dije, solo a manera informativa
Responder Con Cita
  #14  
Antiguo 23-03-2011
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Ja, ja, creo que respondimos al tiempo y veo que ya tienes implementado tu overload...

curiosamente yo tengo implementada la misma funcion iif en mis programas hace tiempo aunque la implemente con un Variant y así me evité el Overload:
Código:
Function IIF(blnCondicion_p:Boolean; varValorSiVerdadero_p:Variant;varValorSiFalso_p:Variant):Variant;
Begin
  if blnCondicion_p then
     Result:=varValorSiVerdadero_p
  else
     Result:=varValorSiFalso_p;
end;
un saludo,
Responder Con Cita
  #15  
Antiguo 23-03-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

En Delphi ya existen funciones que realizan eso: IfThen en las unidades Math y StrUtils


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #16  
Antiguo 23-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
obvio que existen !!!!

pero me refiero a la practicidad....

con la funcion determino 1 dato en 1 sola linea
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #17  
Antiguo 23-03-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

No se que entendiste, pero la función mencionada hace eso precisamente, en una sola línea puedes determinar un solo dato:

Código Delphi [-]
Str := IfThen(Condición, Str1, Str2);


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #18  
Antiguo 23-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
ohhhhhhhh ya caigo
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #19  
Antiguo 23-03-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
El problema con esas funciones es el costo que tiene para la aplicación, porque el compilador no las transforma en código máquina equivalente a un If...Then normal.

Por ejemplo, si el tercer parámetro dado a IfThen es una expresión que llama a otra rutina, ésta se ejecutará aunque el primer parámetro sea True, es decir, se realizará un procesamiento inútil. Y aun cuando las expresiones dadas como valores a devolver sean simples valores literales o variables, la carga para la CPU seguirá siendo mayor que la de un If...Then normal (incluso si IfThen fuese compilada como una función in line).

Supongo que todavía no se agrega un operador ternario en las últimas versiones del compilador de Delphi. Espero que eso ocurra, pero ruego al cielo que no vaya a ser tan horrible como el de C.

Gato: Sólo son métodos las rutinas que pertenecen a una clase. Al no estar dentro de una clase, hablamos entonces de funciones / procedimientos independientes (sueltos).

Saludos.

Al González.

AÑADO: Claro, pueden hacerse sobrecargas tanto de métodos como de rutinas sueltas.

Última edición por Al González fecha: 23-03-2011 a las 22:58:18.
Responder Con Cita
  #20  
Antiguo 23-03-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Al González siempre tan oportuno e iluistrativo con sus comentarios
__________________
Dulce Regalo que Satanas manda para mi.....
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
Llamar a un .exe msdos con parametros lroblesco Varios 5 29-05-2011 05:53:27
Llamar funcion dll con una cadena... robinsongm Varios 6 26-02-2010 20:55:21
Llamar a una función de una DLL desde PHP MON___ Varios 4 05-10-2007 23:06:48
Llamar una fución(parametros) Stevenmn Varios 11 08-08-2007 19:05:12
Llamar un flash con parámetros Alexander Varios 0 13-06-2005 22:44:10


La franja horaria es GMT +2. Ahora son las 08:15:36.


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