Es muy frecuente que un programa llamado desde la "línea de comandos" tenga ciertas opciones que le indicamos como argumentos. Por ejemplo, bajo Linux o cualquier otro sistema operativo de la familia Unix, podemos ver la lista detallada de ficheros que terminan en .cs haciendo
ls -l *.cs
En este caso, la orden sería "ls", y las dos opciones (argumentos o parámetros) que le indicamos son "-l" y "*.cs".
La orden equivalente en MsDos y en el intérprete de comandos de Windows sería
dir *.cs
Ahora la orden sería "dir", y el parámetro es "*.cs".
Pues bien, estas opciones que se le pasan al programa se pueden leer desde C#. Se hace indicando un parámetro especial en Main, un array de strings:
static void Main(string[] args)
Para conocer esos parámetros lo haríamos de la misma forma que se recorre habitualmente un array cuyo tamaño no conocemos: con un "for" que termine en la longitud ("Length") del array:
for (int i = 0; i < args.Length; i++)
{
System.Console.WriteLine("El parametro {0} es: {1}",
i, args[i]);
}
Por otra parte, si queremos que nuestro programa se interrumpa en un cierto punto, podemos usar la orden "Environment.Exit". Su manejo habitual es algo como
Environment.Exit(1);
Es decir, entre paréntesis indicamos un cierto código, que suele ser (por convenio) un 0 si no ha habido ningún error, u otro código distinto en caso de que sí exista algún error.
Este valor se podría comprobar desde el sistema operativo. Por ejemplo, en MsDos y Windows se puede leer desde un fichero BAT o CMD usando "IF ERRORLEVEL", así:
IF ERRORLEVEL 1 ECHO Ha habido un error en el programa
Una forma alternativa de que "Main" indique errores al sistema operativo es no declarándolo como "void", sino como "int", y empleando entonces la orden "return" cuando nos interese (igual que antes, por convenio, devolviendo 0 si todo ha funcionado correctamente u otro código en caso contrario):
public static int Main(string[] args)
{
...
return 0;
}
Un ejemplo que pusiera todo esto a prueba podría ser:
// Ejemplo_05_11a.cs
// Parámetros y valor de retorno de "Main"
// Introducción a C#, por Nacho Cabanes
using System;
public class Ejemplo_05_11a
{
public static int Main(string[] args)
{
Console.WriteLine("Parámetros: {0}", args.Length);
for (int i = 0; i < args.Length; i++)
{
Console.WriteLine("El parámetro {0} es: {1}",
i, args[i]);
}
if (args.Length == 0)
{
Console.WriteLine("No ha indicado ningún parámetro!");
Environment.Exit(1);
}
return 0;
}
}
Ejercicios propuestos:
Ejercicio propuesto 5.11.1: Crea un programa llamado "suma", que calcule (y muestre) la suma de dos números que se le indiquen como parámetros en línea de comandos. Por ejemplo, si se teclea "suma 2 3" deberá responder "5", si se teclea "suma 2" responderá "2" y si se teclea únicamente "suma" deberá responder "no hay suficientes datos" y devolver un código de error 1.
Ejercicio propuesto 5.11.2: Crea una calculadora básica, llamada "calcula", que deberá sumar, restar, multiplicar o dividir los dos números que se le indiquen como parámetros. Ejemplos de su uso sería "calcula 2 + 3" o "calcula 5 * 60".
Ejercicio propuesto 5.11.3: Crea una variante del ejercicio 5.11.2, en la que Main devuelva el código 1 si la operación indicada no es válida o 0 cuando sí sea una operación aceptable.
Ejercicio propuesto 5.11.4: Crea una variante del ejercicio 5.11.3, en la que Main devuelva también el código 2 si alguno de los dos números con los que se quiere operar no tiene un valor numérico válido.