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:
Un comentario en «La evolución de C#»
Los comentarios están cerrados.