## Convenciones para los Argumentos de la Línea de Comandos

El lenguaje Java sigue las convenciones de UNIX que definen tres tipos diferentes de argumentos:

- Palabras (también conocidos como opciones)
- Argumentos que requieren argumentos
- Banderas

Además, una aplicación debe observar las siguientes convenciones para utilizar los argumentos de la línea de comandos en Java:

- El guión ( - ) precede a las opciones, banderas o series de banderas.
- Los argumentos pueden ir en cualquier orden, excepto cuando sea un argumento que requiere otros argumentos.
- Las banderas pueden listarse en cualquier orden, separadamente o combinadas: `-xn` o `-nx` o `-x -n`.
- Típicamente los nombres de fichero van al final.
- El programa imprime un mensaje de error de utilización cuando no se reconoce un argumento de la línea de comandos. Estas sentencias pueden tener esta forma:

      utilización: nombre_aplicación [ argumentos_opcionales ] argumentos_requeridos

### Opciones

> Los argumentos como `-verbose` son argumentos de palabra y deben especificarse completamente en la línea de comandos. Por ejemplo, `-ver` no correspondería con `-verbose`.

> Se pueden utilizar sentencias como esta para comprobar los argumentos de palabras:

>     if (argument.equals("-verbose"))
>         vflag = true;

Esta sentencia comprueba si la palabra `-verbose` está en la línea de argumentos y activa una bandera en el programa para que este se ejecute en modo verboso.

### Argumentos que Requieren Argumentos

> Algunos argumentos necesitan más informaión. Por ejemplo, un argumento como `-output` podría permitir que el usuario redirigiera la salida del programa. Sin embargo, la opción `-output` en solitario no ofrece la información suficiente a la aplicación: ¿Cómo sabe la aplicación dónde redirigir la salida? Por lo tanto el usuario debe especificar también un nombre de fichero. Normalmente, el ítem siguiente de la línea de comandos proporciona la información adicional para el argumento que así lo requiere. Se puede utilizar la siguiente sentencia para emparejar argumentos que requieren argumentos:

>     if (argument.equals("-output")) {
>         if (nextarg < args.length)
>             outputfile = args[nextarg++];
>         else
>             System.err.println("-output requiere un nombre de fichero");
>     }

> Observa que el código se asegura de que el usuario ha especificado realmente un argumento siguiente antes de intentar utilizarlo.

### Banderas

> Lss banderas son carácteres que modifican el comportamieneo del programa de alguna manera. Por ejemplo, la bandera `-t` proporcionada al comando `ls` de UNIX indica que la salida debe ordenarse por la fecha de los ficheros. La mayoría de las aplicaciones permiten al usuario especificar banderas separadas en cualquier orden:

>     -x -n     o    -n -x

> Además, para hacer un uso más sencillo, las aplicciones deberán permitir que el usuario concatene banderas y las especifique en cualquier orden:

>     -nx    o    -xn

> El programa de ejemplo descrito en la página siguiente implementa un sencillo algoritmo para procesar banderas que pueden especificarse en cualquier orden, separadas o de forma combinada.

Ozito