Argumentos variables


Argumentos variables


Desde la versión 5.0 de Java existe la característica de varargs que permite que un método reciba un número variable de argumentos. Por ejemplo:

public int calcularSuma(int ... valores){
   int sum = 0;
   for(int i = 0; i < valores.length; i++){
      sum += valores[i];
   }
   return sum;
}


El anterior método retorna la suma de los valores pasados como parámetro. Lo importante es que la cantidad de valores que se le puede pasar es variable. Vea las siguientes llamadas:

calcularSuma(1, 2, 3);  // Retorna 6.
calcularSuma(1, 2, 3, 4, 5, 6);  // Retorna 21.
calcularSuma();  // Retorna 0.


Vemos como el mismo método puede recibir diferentes cantidad de parámetros (en este artículo las palabras parámetro y argumento se usan indistintamente). Notar que los parámetros adentro del método se procesan como si fuera un array.
De la misma manera, los programadores de C# pueden usar la palabra clave params y también existe una alternativa para los Pythoneros.
Bien, lo que nos ocupa a nosotros ahora es como hacer esto en PHP. Para esto existen 3 funciones:
  • func_num_args(void)
  • func_get_args(void)
  • func_get_arg(int $arg_num)
  •  

Estas funciones permiten consultar y manipular los argumentos pasados a una función. La primera función func_num_args(void) retorna la cantidad de argumentos pasados a una función. La segunda función func_get_args(void) retorna un array con los argumentos pasados y, por último, la tercera función retorna el argumento en la posición $arg_num. Así, por ejemplo, la siguiente función retornará la cantidad de parámetros que le fueron pasados:

function varargs(){
    $cantidad = func_num_args();
    return $cantidad;
}

Algunos ejemplos de llamadas son:

varargs(1, 5)  // Retorna 2.
varargs(1, 5, 5, 6, 2, 3)  // Retorna 6.
varargs(1)  // Retorna 1.

Ahora como un ejemplo más complejo podemos presentar la siguiente función que calcula la suma de argumentos variables.

function calcular_suma(){
    $cantidad = func_num_args();
    $argumentos = func_get_args(); // Retorna un array.
    $suma = 0;
    for($i = 0; $i < $cantidad; $i++){
       $suma += $argumentos[$i];
    }
    return $suma;
}

O en su alternativa equivalente:

function calcular_suma(){
    $cantidad = func_num_args();
    $argumentos = func_get_args();
    $suma = 0;
    for($i = 0; $i < $cantidad; $i++){
       $suma += func_get_arg($i);
    }
    return $suma;
}

Vemos que el manejo de varargs es sencillo pero diferente al resto de los lenguajes.

Bibliografía