En programación , el argumento predeterminado es un argumento de función que es opcional cuando se llama. En la mayoría de los lenguajes de programación, las funciones pueden tomar uno o más argumentos. Como regla general, todos los argumentos deben especificarse en su totalidad (como en el lenguaje de programación C [1] ). Posteriormente, algunos lenguajes (por ejemplo, C++ ) permitieron al programador especificar los valores de algunos argumentos en la declaración de la función. Por lo tanto, la función podría llamarse pasando solo los argumentos requeridos.
Considere la siguiente declaración de función:
int my_func ( int a , int b , int c = 12 );Esta función toma tres argumentos, el último de los cuales tiene un valor predeterminado de 12. El programador puede llamar a esta función de dos formas:
resultado = mi_func ( 1 , 2 , 3 ); resultado = mi_func ( 1 , 2 );En el primer caso, el valor del argumento c se determina en la llamada a la función y es igual a tres. En el segundo caso, se omite el último argumento y c se establecerá en doce .
Los argumentos predeterminados se establecen a partir del último argumento.
Los valores de los argumentos predeterminados para los métodos virtuales no están determinados en tiempo de ejecución por el tipo de objeto, sino que se toman del tipo del puntero. En este ejemplo, la pantalla de la consola mostrará 1 Derived:
base de clase { público : vacío virtual foo ( int x = 1 ) { std :: cout << x << "Base" ; } }; clase Derivado : base pública { public : void foo ( int x = 2 ) anular { std :: cout << x << "Derivado" ; } }; int principal () { Base * x = nuevo Derivado ; x -> foo (); // "1 Derivado" devuelve 0 ; }Para funciones miembro, los valores de argumento predeterminados se pueden especificar en las definiciones. Dichas funciones solo se pueden llamar con valores predeterminados si su definición ocurre antes de la llamada. Ejemplo :
estructura C { vacío g ( int i , int j = 99 ); C ( int a ); }; C :: C ( int = 5 ) { } vacío C :: g ( int i = 88 , int j ) { }Algunos otros lenguajes, como Java , no admiten argumentos predeterminados. Sin embargo, este comportamiento se puede reproducir utilizando una sobrecarga de métodos con el mismo nombre y menos argumentos:
int MyFunc ( int a , int b ) { return MyFunc ( a , b , 12 ); } int MyFunc ( int a , int b , int c ) { /* implementación principal */ }Para cada llamada de función, los valores de argumento predeterminados deben pasarse a la función llamada. Esto conduce a la repetitividad en el código. Los argumentos predeterminados se eliminan para evitar esto.
Si el argumento predeterminado no es solo un literal, sino una expresión, esta expresión se puede evaluar una vez para todo el programa.
Python se destaca por el hecho de que evalúa expresiones en argumentos predeterminados solo una vez, durante la carga del módulo. Si desea evaluar un valor en cada llamada de función, puede asignar un valor de señal al argumento (por ejemplo, Noneen Python) y luego en la primera línea de la función, verifíquelo.
Por ejemplo, los argumentos predeterminados en Python se pueden implementar así:
import datetime def f ( a , b = None ) : b = bo datetime . fecha y hora ahora ()