Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Pasar parámetros a una función

Estas en el tema de Pasar parámetros a una función en el foro de Visual Basic clásico en Foros del Web. Ante todo, buenas!! A ver, quería hacer una función muy sencillita para sacar el menor de una serie de números. Al principio lo hice con ...
  #1 (permalink)  
Antiguo 04/06/2008, 17:37
 
Fecha de Ingreso: mayo-2008
Mensajes: 42
Antigüedad: 16 años
Puntos: 0
Pasar parámetros a una función

Ante todo, buenas!! A ver, quería hacer una función muy sencillita para sacar el menor de una serie de números. Al principio lo hice con ParamArray y todo bien, y luego pensé en pasar una matriz, y de nuevo, sin problema. La cuestión es que lo que me gustaría es usar las dos, pero de forma opcional... me explico.
A veces pasaré una serie de números, otras una matriz de número, y otras ambas cosas. Si sólo mando la serie, que me de el menor de la serie; si mando la matriz, que me de el menor de la matriz; y si mando las dos cosas, que me de el menor de ambas cosas. Bueno, ya está explicado. La cosa sería dejar los dos argumentos como opcionales, pero no sé si se puede, y si se puede, no encuentro la forma. No voy a pasar ningún argumento más... Bueno, gracias.

Salu00000010!!!
  #2 (permalink)  
Antiguo 05/06/2008, 10:35
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Pasar parámetros a una función

Cita:
Iniciado por auxsys Ver Mensaje
Ante todo, buenas!! A ver, quería hacer una función muy sencillita para sacar el menor de una serie de números. Al principio lo hice con ParamArray y todo bien, y luego pensé en pasar una matriz, y de nuevo, sin problema. La cuestión es que lo que me gustaría es usar las dos, pero de forma opcional... me explico.
A veces pasaré una serie de números, otras una matriz de número, y otras ambas cosas. Si sólo mando la serie, que me de el menor de la serie; si mando la matriz, que me de el menor de la matriz; y si mando las dos cosas, que me de el menor de ambas cosas. Bueno, ya está explicado. La cosa sería dejar los dos argumentos como opcionales, pero no sé si se puede, y si se puede, no encuentro la forma. No voy a pasar ningún argumento más... Bueno, gracias.

Salu00000010!!!
No, no podrás hacerlo, porque ni una matriz ni ParamArray pueden ser argumentos opcionales.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 08/06/2008, 06:32
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: Pasar parámetros a una función

Efectivamente, ParamArray no puede ser opcional, pero puedes utilizar un pequeño truco, ya que ParamArray debes declararlo como Variant.

Dentro de la función, comprueba el tipo del primer elemento del ParamArray así:

Código:
Private Function MatrizOParam(ByVal ParamArray Matriz() As Variant) As Boolean
    ...
    If VarType(Matriz(0)) And vbArray <> 0 then
        ' El primer elemento es una matriz, puedes referenciar sus sub-elementos
        ' como Matriz(0)(0), Matriz(0)(1), etc.
    Else
        ' El primer elemento no es una matriz, así que puedes considerar leer el
        ' resto de parámetros de la función.
    End If
    ....
End Function
Además, para evitar errores, te recomiendo que lo primero que compruebes en la función es que el límite superior del ParamArray es mayor de -1, por si la llamas sin parámetros, así:

If UBound(Matriz) = -1 Then ' Se ha llamado a MatrizOParam sin argumentos

Espero que esto te sirva!

Última edición por Txoco; 08/06/2008 a las 06:35 Razón: Poner el código como dios manda
  #4 (permalink)  
Antiguo 08/07/2008, 13:49
 
Fecha de Ingreso: mayo-2008
Mensajes: 42
Antigüedad: 16 años
Puntos: 0
Respuesta: Pasar parámetros a una función

Ups, me olvidé de este post... para que no me llamen desagradecido, aunque haya pasado un mes... pues gracias! Voy a intentar el truquillo ese, a ver qué tal.

Salu00000010!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:46.