La evolución de C#


Ha estado en el top 10 de los lenguajes de programación más utilizados y queridos en el mundo durante los últimos años. Con mas de 20 años de existencia los cambios que ha tenido en su sintaxis y las diferentes tecnologías que hoy lo utilizan hacen de el un lenguaje que vale la pena aprender y profundizar.

En este articulo vamos a revisar las diferentes fases que a titulo personal pienso que han sido las más importantes hasta la versión 10.

Fase 1: La copia de java y la era Visual Basic (C# 1 –  C# 2)

Las primeras versiones de C# eran muy limitadas y parecidas a Java y C++ en todo, tanto así, que C# era conocido como la copia de Java. A pesar de estar inspirado en múltiples lenguajes incluyendo pascal, para las personas su parecido a Java y que fuera liberado en una época donde este era el rey fue difícil de aceptar.

Para los desarrolladores de tecnologías Microsoft, Visual Basic seguía siendo el lenguaje por excelencia y con mayor aceptación por la comunidad.

Algunas mejoras para resaltar de era de C# (Versión 1/2) :

Partial class

public partial class MyClass
{
    public void MyMethod1()
    {
        // Manually written code
    }
}
file2.cs:

public partial class MyClass
{
    public void MyMethod2()
    {
        // Automatically generated code
    }
}

Generics

public static IEnumerable<int> GetEven(IEnumerable<int> numbers)
{
    foreach (int i in numbers)
    {
        if (i % 2 == 0) 
            yield return i;
    }
}

Fase 2: El nuevo favorito (C#3 – C#4)

En esta etapa C# empieza hacer más popular y muchos desarrolladores de tecnologías Microsoft empiezan a trabajar con el y adaptarlo como su lenguaje favorito.

C# empieza a acoger diferentes mejoras que ya tienen otros lenguajes de programación y empieza a mejorar su sintaxis.

Y también es adoptado por otras tecnologías como xamarin, mono y unity.

Algunas mejoras para resaltar de era de C# (Versión 3-4):

Lambda Expresiones

//Antes de C#3:
listOfFoo.Where(delegate(Foo x) { return x.Size > 10; });
//C# 3:
listOfFoo.Where(x => x.Size > 10);

Default parameters

void Increment(ref int x, int dx = 1)
{
  x += dx;
}

Fase 3: El innovador (C# 5 –  C# 6)

C# empieza una nueva etapa en la que da ejemplos de grandeza demostrando innovadoras mejoras que luego fueron adaptadas por otros lenguajes de programación.

async/await se convierte en el estándar para manejar a sincronismo para varios lenguajes de programación. con esta mejora C# se aleja de la sombra de Java convirtiéndose en un lenguaje diferente, innovador y más simple.

Además del async/await C# implementa diferentes operadores que permiten simplificar las líneas de código que se utilizan para hacer comprobaciones y condicionales.

Las mejoras más importantes para resaltar son:

Async/Await

public async Task<int> GetUrlContentLengthAsync()
{
    var client = new HttpClient();
    Task<string> getStringTask =
        client.GetStringAsync("https://docs.microsoft.com/dotnet");
    DoIndependentWork();
    string contents = await getStringTask;
    return contents.Length;
}

String interpolation

$"Expected: {expected} Received: {received}."

Null conditional operator

var ss = new string[] { "Foo", null };
var length0 = ss [0]?.Length; // 3
var length1 = ss [1]?.Length; // null
var lengths = ss.Select (s => s?.Length ?? 0);

Fase 4: El más completo (C# 7 – C# 8)

Después de tantas mejoras y evolución continua, C# empieza a tomar popularidad entre los desarrolladores y con la llegada y desarrollo de netcore la comunidad opensource empieza a darle una oportunidad. C# se mantiene entre los 5 lenguajes mas usados del mundo y continua con un gran soporte para diferentes tecnologías.

Ahora con todas las mejoras en C# existen varias maneras de hacer lo mismo, pero dependiendo del escenario puedes una sintaxis u otra y buscar la manera de reducir las líneas de código.

C# también adopta muchas mejoras de otros lenguajes de programación (como Python) como las tuplas y funciones locales (como JavaScript).

Algunas mejoras incorporadas:

Tuplas

(double, int) t1 = (4.5, 3);

Local functions

private static string GetText(string path, string filename)
{
     var reader = File.OpenText($"{AppendPathSeparator(path)}{filename}");
     var text = reader.ReadToEnd();
     return text;
     string AppendPathSeparator(string filepath)
     {
        return filepath.EndsWith(@"\") ? filepath : filepath + @"\";
     }
}

Fase 5: El minimalista (C#9 – C# 10)

Una de las criticas mas grandes a C# y Java es la complejidad del código para hacer cosas simples.

Cualquier developer que apenas este empezando e intente hacer un hello world con C# se va a llevar la sorpresa que tendrá que saber que es un namespace, una clase y un método. Esto es una locura teniendo en cuenta que debemos considerar que apenas esta intentando aprender y entender el mundo de la programación. Lenguajes como JS, Go y Python simplifican en gran parte la forma de hacer las cosas, de esta manera son preferidos entre los juniors dev y para muchas empresas que necesitan acelerar su desarrollo y disminuir la curva de aprendizaje.

C# 9 y C#10 son el sueño de muchos años de esfuerzo en el que se quería que C# fuera el preferido no solo por los senior devs o por empresas de gran tamaño sino también por juniors devs y nuevas startups.  

C# 10 por fin podemos decir que el hello world de C# es solo una línea:

Console.WriteLine("Hello World");

Mejoras para resaltar en C#9 y C#10:

Top level statement

private static string GetText(string path, string filename)
{
     var reader = File.OpenText($"{AppendPathSeparator(path)}{filename}");
     var text = reader.ReadToEnd();
namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

//En C# 9:

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

Global Using en C#10

namespace MyNamespace;

Utilizar las mejoras de C# te va permitir reducir lineas de código y aplicar las mejores prácticas. C# es un lenguaje con una evolución interesante que le ha permitido manter su popularidad y mejorarle la vida a los desarrolladores.

En la documentación oficial de Microsoft siempre puedes encontrar la descripción de cada una de las mejoras y un ejemplo:

https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10

Y si quieres aportar al diseño y la evolución de C# puedes crear un issue o participar en las discuciones del repo oficial:

https://github.com/dotnet/csharplang

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s