Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: J_F_NASH en 31 de Marzo de 2007, 04:06:43 PM

Título: ¿Cómo hacer una función con parámetros opcionales?
Publicado por: J_F_NASH en 31 de Marzo de 2007, 04:06:43 PM
Necesito crear una función a la cual se le puedan pasar 2 parametros PERO que si no le paso ninguno no me de error. ¿esto es posible hacerlo? y ¿si lo es que nombre recibe esto?

S2.
Título: ¿Cómo hacer una función con parámetros opcionales?
Publicado por: gdl en 31 de Marzo de 2007, 04:12:41 PM
Muchos lenguajes permiten realizar sobrecarga de funciones (que es lo que quieres). En ese caso, las funciones con distinto número de argumentos se consideran distintas.

Por ejemplo, en C++

void funcion(int a);
void funcion(void);


El código de esta función es distinto según tenga un argumento o ninguno.

void funcion(int a)
{
//hace algo
}

void funcion(void)
{
//hace otra cosa
}


A la hora de usarlo, es transparente y da la impresión de un argumento opcional.

funcion(3);//Llama a funcion(int)
funcion();//Llama a funcion()


Es la labor del programador hacer que, ya que tienen el mismo nombre, lo que hagan esas funciones sea consistente y que en efecto parezca que una es la otra con un argumento opcional.
Título: ¿Cómo hacer una función con parámetros opcionales?
Publicado por: fiero en 31 de Marzo de 2007, 04:12:52 PM
¿Que tal si les das un valor por defecto a esos dos parámetros en la cabecera (.h)?

un saludo
Título: ¿Cómo hacer una función con parámetros opcionales?
Publicado por: shephiroth en 31 de Marzo de 2007, 04:45:51 PM
Buenas.

GDL a eso se le llama sobrecarga, mientras lo q esta pidiendo es mas dejarles un valor defecto.

FIERO exacto. Para poner un poco de codigo y poco de "reglas" de uso, veamos:

void func1(char* uno, int a=10, int b=10);
void func2(char* uno, int a=10, int b);
void func3(char* uno, int b, int a=10);

Veamos, en la func1 tenemos una variable necesaria y dos opcionales. Puedes no pasarle ni a ni b, pasarle a, o pasarle ambas. Si hay una manera de pasarle solo b no la conozco.
En la func2 tenemos la variable uno normal, a como opcional y b como normal.....ESTO ESTA MAL!!!!!! Siempre tendras que pasarle los 3 valores,  por lo q pierde la funcionalidad que estabas buscando.
En func3 tienes la solucion, poner b antes que a.

Resumiendo, los parametros opcionales SIEMPRE LOS ULTIMOS y ordenados por importancia.

Si quieres mas potencia tendrías que ir al codigo de GDL, pero ya digo que eso es sobrecarga de funciones, en ningun caso dar valores por defecto.

SALUDOS ^^
Título: ¿Cómo hacer una función con parámetros opcionales?
Publicado por: J_F_NASH en 31 de Marzo de 2007, 06:24:12 PM
Cita de: "shephiroth"Buenas.

GDL a eso se le llama sobrecarga, mientras lo q esta pidiendo es mas dejarles un valor defecto.

FIERO exacto. Para poner un poco de codigo y poco de "reglas" de uso, veamos:

void func1(char* uno, int a=10, int b=10);
void func2(char* uno, int a=10, int b);
void func3(char* uno, int b, int a=10);

Veamos, en la func1 tenemos una variable necesaria y dos opcionales. Puedes no pasarle ni a ni b, pasarle a, o pasarle ambas. Si hay una manera de pasarle solo b no la conozco.
En la func2 tenemos la variable uno normal, a como opcional y b como normal.....ESTO ESTA MAL!!!!!! Siempre tendras que pasarle los 3 valores,  por lo q pierde la funcionalidad que estabas buscando.
En func3 tienes la solucion, poner b antes que a.

Resumiendo, los parametros opcionales SIEMPRE LOS ULTIMOS y ordenados por importancia.

Si quieres mas potencia tendrías que ir al codigo de GDL, pero ya digo que eso es sobrecarga de funciones, en ningun caso dar valores por defecto.

SALUDOS ^^

Si, eso es exactamente lo que buscaba.
Aunque gracias también por la explicación de sobrecarga de funciones puede que me sea útil.


Gracias.
Título: ¿Cómo hacer una función con parámetros opcionales?
Publicado por: gdl en 08 de Abril de 2007, 12:24:14 AM
Cita de: "shephiroth"Buenas.

GDL a eso se le llama sobrecarga, mientras lo q esta pidiendo es mas dejarles un valor defecto.



Tienes razón. Hay días que me paso con el anís. Jajajajaja
Título: ¿Cómo hacer una función con parámetros opcionales?
Publicado por: Pogacha en 08 de Abril de 2007, 05:58:46 PM
En realidad ambas eran validas ...

void func(int a) { hacer algo }
inline void func() { func(0); }


Los parametros por defecto fueron agregados por conveniencia mas que por necesidad.

Y ademas tampien existe el "..." que te permite usar un numero variable y de tipos indefinidos de datos. Vease el conjunto de flujo standart de C. (printf, scanf and so). Obviamente esto requiere un conocimineto avanzado del proceso de compilación.

Saludos.