Introducción a C#
Por Nacho Cabanes, versión 0.93 de 16-abr-2010


(Nota: Estás viendo una versión del curso antigua, creada en 2009. Es recomendable que sigas la versión 2015, mucho más actualizada, con contenidos más detallados, más ejemplos y más ejercicios propuestos)

5. Introducción a las funciones

5.1. Diseño modular de programas: Descomposición modular

Hasta ahora hemos estado pensando los pasos que deberíamos dar para resolver un cierto problema, y hemos creado programas a partir de cada uno de esos pasos. Esto es razonable cuando los problemas son sencillos, pero puede no ser la mejor forma de actuar cuando se trata de algo más complicado.

A partir de ahora vamos a empezar a intentar descomponer los problemas en trozos más pequeños, que sean más fáciles de resolver. Esto nos puede suponer varias ventajas:

Esos "trozos" de programa son lo que suele llamar "subrutinas", "procedimientos" o "funciones". En el lenguaje C y sus derivados, el nombre que más se usa es el de funciones.

5.2. Conceptos básicos sobre funciones

En C#, al igual que en C y los demás lenguajes derivados de él, todos los "trozos de programa" son funciones, incluyendo el propio cuerpo de programa, Main. De hecho, la forma básica de definir una función será indicando su nombre seguido de unos paréntesis vacíos, como hacíamos con "Main", y precediéndolo por ciertas palabras reservadas, como "public static void", cuyo significado iremos viendo muy pronto. Después, entre llaves indicaremos todos los pasos que queremos que dé ese "trozo de programa".

Por ejemplo, podríamos crear una función llamada "saludar", que escribiera varios mensajes en la pantalla:

public static void saludar() 
{
  Console.WriteLine("Bienvenido al programa");
  Console.WriteLine(" de ejemplo");
  Console.WriteLine("Espero que estés bien");
}

Ahora desde dentro del cuerpo de nuestro programa, podríamos "llamar" a esa función:

public static void Main()
{
  saludar();
  …
}

Así conseguimos que nuestro programa principal sea más fácil de leer.

Un detalle importante: tanto la función habitual "Main" como la nueva función "Saludar" serían parte de nuestra "class", es decir, el fuente completo sería así:

/*---------------------------*/
/*  Ejemplo en C# nº 47:     */
/*  ejemplo47.cs             */
/*                           */
/*  Funcion "saludar"        */
/*                           */
/*  Introduccion a C#,       */
/*    Nacho Cabanes          */
/*---------------------------*/
 
using System;
 
public class Ejemplo47
{
 
  public static void Saludar() 
  {
    Console.WriteLine("Bienvenido al programa");
    Console.WriteLine(" de ejemplo");
    Console.WriteLine("Espero que estés bien");
  }
 
  public static void Main()
  {
    Saludar();
    Console.WriteLine("Nada más por hoy...");
  }
 
}
 

Como ejemplo más detallado, la parte principal de una agenda podría ser simplemente:

leerDatosDeFichero();
do {
  mostrarMenu();
  pedirOpcion();
  switch( opcion ) {
    case 1: buscarDatos(); break;
    case 2: modificarDatos(); break;
    case 3: anadirDatos(); break;
    …