Argumentos variables (varargs) en Java

Para aquellos anticuados como yo que en C, desde que descubrimos la varargs.h no podemos dejar de mandar un número de argumentos variables, hoy veremos que con Java también es posible.

Como introducción, para aquellos con conocimientos en C, sabrán de funciones como prinft que les permite enviar un número ilimitado de argumentos luego de su cadena con formatos.

A continuación, veremos una implementación de la varargs que de muy buena forma nos muestra la Wikipedia:

Ejemplo de función sumar:

[C]
#include

int sumar(int n, …)
{
va_list ap;
int i = 0;

va_start(ap, n);
for (; n; n–) {
i += va_arg(ap, int);
}
va_end(ap);
return i;
}
[/C]

Ejemplo de llamados a la función:
[C]
sumar (1);
sumar (1,2,3,4);
[/C]

En Java, para hacer que un método tenga un número variable de argumentos se puede hacer enviando un array, o alguna colección, y luego desde el método recorrer el array o los elementos de la colección ¿que mejor ejemplo que el método main?

[JAVA]
public static void main(String[] args) {
System.out.println(“y los argumentos son:”);
for (String arg : args)
System.out.println(arg);
}
[/JAVA]

Pero bien, no es para desesperar, pues desde Java 5 se puden utilizar argumentos variables a un método de una forma por demás de sencilla:

[JAVA]
public static void imprimir(String… cadenas) {
for (String cadena : cadenas)
System.out.println(cadena);
}
[/JAVA]

Como comentario, no está demás destacar que varargs no es más que una cáscara, pues internamente Java sigue utilizando un array, aunque a nosotros nos alivia mucho la sintaxis y por lo tanto se agradece 😉

Vía: Mundo Geek

Tags: , , , ,


  • luiX_

    Yo si te digo la verdad… no veo la ventaja. El único cambio que veo es poner “…” en vez de “[]”. ¿te refieres a la hora de llamar a la función?

    Reply

  • Juan Camilo Cardona Graciano

    La ventaja se entiende cuando tienes un método simple como sumar y quieres que sea el mismo sin importar el número de parámetros. De esta manera con llamar una función sumar(int… numero) puedes usarla con sumar(1,2) y sumar(3,4,7,9) y funciona para la misma función sin necesidad de crear arrays, ni 20 funciones diferentes con diferente número de argumentos.

    Reply

  • Ricardo

    Para mí tiene muchísima utilidad, ya que en un parser que genera de forma automática los argumentos (de número variable) es imposible pasarselo a un método que hacepta un array ya que son diferentes en cada caso y tampoco los puedo agrupar en un array antes.
    Con lo cual si es muy útil.
    Gracias por el post, muy simple y útil la verdad

    Reply

  • julia

    mi profesor me regaño por llevar esa informacion qe no sirve

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.