• Pedro Rubio
C#
learn development C#

En este artículo queremos echar un vistazo a una nueva característica que llega con C# 9.0 llamada Top-level programs, la cual simplifica ciertos programas en C#. En resumen, hay menos código que escribir para tener algo funcionando, lo cual es siempre bueno.

Vamos a analizar algunas de las cosas útiles que se pueden hacer con los top-level programs y cómo empezar.

Configuración inicial

Como los programas de alto nivel son una característica de C# 9 necesitamos elegir un framework que incluya esa versión del lenguaje; .NET 5.0 (todavía en versión RC al momento de escritir este artículo) nos valdrá.

Desde una carpeta vacía vamos a ejecutar el siguiente comando para crear nuestro proyecto:

dotnet new console -f net5.0

La herramienta de línea de comandos generará un fichero Program.cs con la estructura básica para una aplicación de consola:

using System;

namespace TopLevelFeature
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Creando el programa más sencillo en C#

Ahora es cuando ocurre la magia... Vamos a simplificar el programa anterior, así el contenido del fichero Program.cs debería tener solamente la siguiente sentencia:

System.Console.WriteLine("Hello World");

Si ejecutamos nuestra aplicación de consola con:

dotnet run

Obtendremos la salida esperada:

 Hello World

¡Ese es probablemente el programa en marcha en C# más sencillo que has visto en tu vida! Puede que te preguntes dónde está todo el código repetitivo que siempre hemos necesitado: declaración de espacio de nombres y clase, método principal estático con argumentos, etc.

¡Sencillamente no lo necesitamos con programas de alto nivel!

Cuando nuestro programa C# de una sola línea se compila, el compilador genera la clase Program y también el método Main, así que por debajo es como si tuviéramos el programa original del principio del artículo. Eso hace nuestra vida más fácil como desarrolladores ya que el compilador hace el trabajo por nosotros.

Añadiendo funcionalidad a nuestro programa

Vamos a jugar con nuestro programa añadiendo un poco de complejidad para ver qué podemos implementar con programas de alto nivel:

Argumentos de línea de comandos

Las aplicaciones de consola a menudo reciben argumentos de línea de comandos en un array de cadenas. Nuestro sencillo programa podría obtener el mensaje que se mostrará como un argumento de línea de comandos, con lo que podríamos modificarlo para que sea:

System.Console.WriteLine(args[0]);

La siguiente ejecución producirá exactamente la misma salida que obtuvimos antes:

dotnet run -- "Hello World"

Funciones

¿Qué pasaría si quisiéramos tener algunaas funciones en nuestro programa? Podemos añadir una sencilla para procesar nuestro mensaje antes de mostrarlo; vamos también a añadir de vuelta la sentencia using para los que la echen de menos:

using System;

string Transform(string message) => message.ToUpper();

var message = Transform(args[0]);
Console.WriteLine(message);

La misma ejecuión del programa con el argumento "Hello World" producirá ahora:

 HELLO WORLD

Código asíncrono

El código asíncrono es una de las características más populares en C# desde que fue introducido en C# 5. Podemos usar la palabra clave await directamente en nuestro programa si, por ejemplo, queremos retrasar 3 segundos la salida que generamos:

using System;
using System.Threading.Tasks;

string Transform(string message) => message.ToUpper();

var message = Transform(args[0]);
await Task.Delay(3000);
Console.WriteLine(message);

Conclusiones

Los programas de alto nivel son perfectos al escribir sencillas aplicaciones que no tengan mucho código, con lo que el compilador generará el método principal y la clase por nosotros. También añaden a C# la posibilidad de crear scripts de una forma sencilla y rápida, de la misma forma que los creamos en otros lenguajes de scripting como Python o JavaScript que están diseñados para ese propósito.

¿Te gustó este post? ¡Compártelo!
Sobre Pedro Rubio

Más de 15 años de experiencia en la Industria del Software. Enfocado en añadir valor a clientes y productos con equipos compuestos por los mejores profesionales. Le encantan los videojuegos y viajar.