C# 10: las 5 principales funciones nuevas de la próxima versión de C#

1. Verificación de parámetros nulos

La excepción de referencia nula es uno de los peores errores que puede tener en su código. Es simplemente doloroso. Para protegerse de este tipo de excepción, necesita un diseño a prueba de balas de la aplicación y muchas verificaciones de los parámetros de las funciones. Esta nueva característica debería ayudarnos con eso y hacer que nuestro código sea más legible y robusto.


1.1 Problema actual

Por el momento, si desea verificar que cierto parámetro de su función sea nulo, tendría que hacer algo como esto:

public SomeFunction(int id, SomeClass newObject)
{
  if (newObject == null)
    throw new ArgumentNullException("newObject");
  ...
}

En el código anterior, inyectamos newObject de SomeClass en SomeFunctionSi el objeto mencionado es nulo no debemos continuar con el código. Sé que mucha gente dirá que con el diseño correcto de la aplicación este problema no debería existir en primer lugar, sin embargo, a veces es necesario hacer esto.

1.2 Característica de C# 10

La nueva versión de C# tiene como objetivo simplificarnos este problema con - !!Todo lo que tiene que hacer es agregar dos signos de exclamación después del nombre del parámetro:

public SomeFunction(int id, SomeClass newObject!!)
{
	...
}

En este ejemplo, el código comprobará automáticamente si newObject es nulo. La ArgumentNullException se lanzará automáticamente si el valor de newObject es nulo.

2. Propiedades requeridas

¿Soy solo yo o los constructores se usaron de manera más explícita en el pasado? Hoy en día no escribimos constructores pesados ​​y la mayoría de las veces usamos constructores ligeros, lo que significa que definimos los valores de las propiedades directamente.


2.1 Problema actual

Para un par de versiones de C# ahora, podemos crear objetos usando constructores ligeros como este:

var newArticle = new Article
{
	Title = "C# 10 - Top 5 new features",
	Category = ".NET",
	ReleaseDate = DateTime.Now()
}

El principal problema con este enfoque es que a veces necesitamos inicializar alguna propiedad y no lo hacemos. Por ejemplo, podríamos hacer algo como esto, aunque no tiene sentido crear un objeto Artículo sin un título:

2.2 Característica de C# 10

C# 10 introduce una nueva palabra clave para propiedades: obligatorioDe esta forma, al definir una clase, podemos hacer necesaria una propiedad. Si intenta crear un objeto sin la propiedad requerida, obtendrá un error en el tiempo de compilación.

public class Article
{
  public required string Title { get; init; }
  public string Category { get; init; }
  public DateTime ReleaseDate{ get; init; }
}

3. Palabra clave field

Las propiedades implementadas automáticamente no son una característica nueva, de hecho, aparecieron por primera vez en C# 3. Esto significa que cuando se compila el código, el compilador crea un campo de respaldo privado y anónimo al que solo se puede acceder a través de los descriptores de acceso get y set de la propiedad.

Una de las características interesantes que vino con la versión actual de C# es un descriptor de acceso initCon este descriptor de acceso, los objetos inmutables son más flexibles y permiten que la persona que llama mute los miembros durante el acto de construcción.


3.1 Problema actual

Todo esto es genial, sin embargo, cuando este enfoque no se adapta a su problema, se ve obligado a agregar el campo de respaldo y escribir los métodos de propiedad habituales. Algo como esto:

public class Article
{
  private string _title;
  public string Title
  {
    get
    {
      return _title;
    }
    set
    {
      if (value.Trim() == "")
        throw new ArgumentException("Title can't be empty");

      _title = value;
    }
  }
}

3.2 Característica de C# 10

La nueva versión del lenguaje de programación C# introduce otra nueva palabra clave: fieldEl código de arriba ahora se puede simplificar:

public class Article
{
  public string Title
  {
    get;
    set
    {
      if (value.Trim() == "")
        throw new ArgumentException("Title can't be empty");
      field = value;
    }
  }
}

En esencia, desde C# 10 no será necesario implementar el campo de respaldo por su cuenta. Esta palabra clave también se puede utilizar en el descriptor de acceso init:

public class Article
{
  public string Title
  {
    get;
    set
    {
      if (value.Trim() == "")
        throw new ArgumentException("Title can't be empty");
      field = value;
    }
  }

  public string Category { get; init; }
  public DateTime ReleaseDate{ get; init => field = value.Date(); }
}

4. Usos globales

Esta es una nueva característica que simplificará mucho el código. Como sabe, cada archivo C# comienza con una lista de usos que son necesarios para la implementación. Sin embargo, a veces esto es redundante. Especialmente si está trabajando con ASP.NET, mucho de ese código se repite y, en general, es solo un ruido para los codificadores.


4.1 Problema actual

Si tomamos, por ejemplo, un archivo ASP.NET, la lista de usos es enorme:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

4.2 Característica de C# 10

Otra palabra clave que introduce C# 10 es globalUsando global, podrá definir usos globales para todo el proyecto. En general, se recomienda crear un archivo separado que contendrá estas importaciones, algo así como usings.cs.

Esto significa que otros archivos en el proyecto se pueden simplificar ya que ya no necesitan agregar todos estos usos. Los diseñadores de C# se refieren a esto como la eliminación de residuos verticales.

global using Microsoft.AspNetCore.Builder;
global using Microsoft.AspNetCore.Hosting;
global using Microsoft.AspNetCore.HttpsPolicy;
global using Microsoft.AspNetCore.Identity;
global using Microsoft.AspNetCore.Identity.UI;
global using Microsoft.EntityFrameworkCore;
global using Microsoft.Extensions.Configuration;
global using Microsoft.Extensions.DependencyInjection;
global using Microsoft.Extensions.Hosting;
global using System;
global using System.Collections.Generic;
global using System.Linq;
global using System.Threading.Tasks;

5. Espacios de nombres de archivos

El uso de la palabra clave global C# elimina el desperdicio vertical y, con los espacios de nombres de archivos, elimina el desperdicio horizontal. Básicamente, esta característica tiene como objetivo resolver el problema de la sangría y es más un cambio cosmético que, con suerte, hará que su código sea más limpio.


5.1 Problema actual

Hoy en día, después de la lista de usos, lo primero que ve en un archivo C# es la definición del espacio de nombres. Después de eso viene la definición de la clase. La implementación de la clase ya está sangrada en este punto. Esto es lo que consideramos residuos horizontales.

namespace Blog
{
  public class Article
  {
    ...
  }
}

5.2 Característica de C# 10

Con esta función, puede definir el espacio de nombres a nivel de archivo de esta manera:

namespace Blog;

public class Article
{
  ...
}

Comentarios

  1. And because of its luxe, blue velvet pouch, in our eyes, 토토사이트 could be} absolutely no want for wrapping paper; she's cute as is. My.parimatch.com needs to review the safety of your connection before proceeding. This is a soft, refined, powdery vanilla perfume with a delicate sweetness about it – the sort of scent that seems like the right method to welcome the day. À La Rose is a perfume that captures the very essence of spring. It’s extremely clean, dewy and sparkly with it’s fresh, moist rose and peony notes.

    ResponderEliminar

Publicar un comentario