Hasta ahora todo nuestro código lo hemos escrito en un único bloque central de código llamado Main(). Dicho módulo en realidad es una función, el método principal donde se empieza a ejecutar todo el código que escribamos dentro.
class clasePrincipal {
static void Main() {
Console.WriteLine("Hola, mundo");
}
}
Cuando escribimos mucho código y nos damos cuenta de que estamos repitiendo partes del código, es señal de que necesitaremos utilizar un nuevo recurso que vamos a ver ahora, que llamamos funciones. O métodos si hablamos de funciones dentro de clases, pero eso lo dejaremos para más adelante cuando veamos la programación orientada a objetos.

Una función es un bloque de código que realiza tareas específicas. Podemos crear una función para mostrar un texto, para hacer un cálculo, o para hacer tareas repetitivas a lo largo de nuestro flujo de programa. Dicho de otra forma, una función contiene un algoritmo.
Por ejemplo, vamos a definir una función llamada saludo() (dentro del bloque class clasePrincipal):
static void saludo() {
Console.WriteLine("Hola, mundo");
}
Pero este código no se va a ejecutar por sí solo. Necesitaremos llamarlo desde otra función. ¿Desde qué función nos podemos asegurar por ahora de que dicho trozo de código se vaya a ejecutar? Desde la función Main():
static void Main() {
saludo();
}
static void saludo() {
Console.WriteLine("Hola, mundo");
}
Para invocar a una función, bastará con escribir el nombre de la misma, tal cual está declarada en el código (respetando mayúsculas y minúsculas). Es decir, si tenemos una función declarada static void saludo(), no la vamos a poder invocar escribiendo Saludo(); en el Main, ni con salUdo(); (igual que como pasa con las variables).
Este código hará exactamente lo mismo que el primer código del tema: mostrar por consola un texto que dice: Hola, mundo. Primero empieza a ejecutarse el código que hay en la función definida en Main(), y desde ahí llamamos a saludo(), que en este caso se encargará de mostrar simplemente la línea que dice “Hola, mundo”.
Tenemos que pensar al final que una función es como una variable, pero que hace cosas. Una caja negra de la que se espera que realice una acción determinada dentro del programa.
Muy bonito todo, sí, pero… ¿para qué hemos escrito una función, si acabamos antes ejecutando todo en Main()?
Esta es una pregunta típica de alguien que se está iniciando en programación. Y es verdad, en este caso no merece la pena crear una función solo para mostrar una línea de texto. Pero en este caso lo hemos hecho como ejemplo (muy básico) para entender cómo se crea una función y cómo se invoca desde otra función.
Lo bueno de trabajar con funciones es:
- Modularidad: nos permite separar varias partes de un programa muy complejo en diferentes bloques de código más pequeños, lo que simplifica bastante su comprensión y facilita la lectura del código. Ideal para cuando varias personas trabajan sobre el mismo código en un proyecto.
- Reutilización: lo que comentaba en la introducción de este apartado. Una función te permite poder reutilizar una porción de código sin tener que repetirlo, es decir, sin tener que alargarlo mucho más copiando y pegando.
- Mantenimiento: con estas dos cualidades mencionadas antes, mantener un programa será mucho más sencillo, ya que un bug que esté localizado en una función, por mucho que se utilice en otras partes de todo el código, se podrá corregir tan sólo cambiando la función afectada. Imagínate lo que pasaría si prescindimos de funciones y una porción de código que hemos utilizado en varias partes del Main lo tenemos que corregir.