Saltar al pie de página
Iron Academy Logo
Aprender C#
Aprender C#

Otras categorías

Operador condicional nulo de C#

{academy-video-youtube({"vid": "eOpmjGF4qxo", "start_time": "0", "title": "Operador Nulo-Condicional en C# (? ¡Operador) Explicado!", "creador": "Gerald Versluis", "longitud": "13m 26s"})}]

En uno de sus vídeos, Gerald Versluis se encontró con una pregunta sobre el signo de interrogación (?) en su código de ejemplo. Esto le llevó a crear un vídeo detallado que explica el operador null-conditional en C#. Si alguna vez te has preguntado qué hace ?. o ?[ ] en C#, el video de Gerald es un gran recurso para entenderlo claramente. Veamos su explicación paso a paso.

Explicación rápida a través de la página Docs

Gerald comienza haciendo referencia a la documentación oficial de Microsoft sobre operadores y expresiones de acceso de miembros. Destaca la sección sobre el operador null-conditional, introducido en C# 6. En el momento de la grabación, C# 9 era la última versión, con C# 10 en el horizonte.

Gerald explica que cuando utilizas a?.x o a?[index], si a es nulo, toda la expresión se evalúa como nula en lugar de lanzar una NullReferenceException. Por lo demás, recupera el valor normalmente.

Aunque la documentación es útil, Gerald prefiere ejemplos prácticos, por lo que pasa a un entorno de codificación interactivo.

Ejemplo a través de try.dot.net

Para demostrarlo, Gerald pasa a try.dot.net, un entorno interactivo de C#. Menciona que esta herramienta se ejecuta en Blazor, lo que permite a los usuarios ejecutar código C# directamente en un navegador.

Muestra brevemente el ejemplo predeterminado de la secuencia de Fibonacci, que está precargado en try.dot.net, y luego lo borra para iniciar un nuevo ejemplo centrado en el operador null-conditional.

Explicación de los operadores de condicional nulo

Gerald crea una clase Persona sencilla con las siguientes propiedades:

public class Person
{
    // The Name property of the Person
    public string Name { get; set; }

    // A reference to another Person object representing the partner
    public Person Partner { get; set; }

    // An array representing the Person's hobbies
    public string[] Hobbies { get; set; }
}
public class Person
{
    // The Name property of the Person
    public string Name { get; set; }

    // A reference to another Person object representing the partner
    public Person Partner { get; set; }

    // An array representing the Person's hobbies
    public string[] Hobbies { get; set; }
}

Él inicializa un objeto Person como nulo:

// Initialize a Person object as null
Person person = null;

// Attempting to access a property of a null object will throw a NullReferenceException
Console.WriteLine(person.Name);
// Initialize a Person object as null
Person person = null;

// Attempting to access a property of a null object will throw a NullReferenceException
Console.WriteLine(person.Name);

Ejecutar este código arroja una NullReferenceException porque person es nulo. Para evitarlo, los desarrolladores suelen añadir una comprobación null antes de acceder a las propiedades:

// Check if the person object is not null before accessing its properties
if (person != null)
{
    Console.WriteLine(person.Name);
}
// Check if the person object is not null before accessing its properties
if (person != null)
{
    Console.WriteLine(person.Name);
}

Aunque esto funciona, introduce líneas de código adicionales. Gerald explica cómo el operador null-conditional simplifica esta tarea:

// Using the null-conditional operator to safely access the Name property
Console.WriteLine(person?.Name);
// Using the null-conditional operator to safely access the Name property
Console.WriteLine(person?.Name);

Ahora, si person es nulo, la expresión simplemente devuelve nulo en lugar de bloquearse.

Operador no condicional en propiedades

Gerald amplía el ejemplo configurando un objeto Person:

// Create a new Person object
Person person = new Person { Name = "Gerald" };

// Access the Name property safely
Console.WriteLine(person?.Name);
// Create a new Person object
Person person = new Person { Name = "Gerald" };

// Access the Name property safely
Console.WriteLine(person?.Name);

Dado que person no es nulo, imprime correctamente "Gerald".

A continuación, muestra un ejemplo anidado:

// Safely access the Name property of the Partner object
Console.WriteLine(person?.Partner?.Name);
// Safely access the Name property of the Partner object
Console.WriteLine(person?.Partner?.Name);

Si person.Partner es nulo, toda la expresión se evalúa como nula en lugar de lanzar una excepción. De este modo se evitan condicionantes innecesarios.

Encadenamiento de operadores nulo-condicionales

Gerald explica que los operadores de condición nula pueden encadenarse, lo que hace que el código sea más limpio cuando se trata de objetos profundamente anidados. En lugar de escribir varios controles null, puede utilizar:

// Chain null-conditional operators to safely access nested objects
Console.WriteLine(person?.Partner?.Name);
// Chain null-conditional operators to safely access nested objects
Console.WriteLine(person?.Partner?.Name);

Si person o person.Partner son nulos, el resultado será nulo, evitando errores en tiempo de ejecución.

Operadores de condición nula en matrices

Gerald amplía la discusión a arrays y colecciones. Añade una matriz Hobbies a la clase Person y muestra cómo acceder a los elementos de forma segura:

// Safely access the first element of the Hobbies array
Console.WriteLine(person?.Hobbies?[0]);
// Safely access the first element of the Hobbies array
Console.WriteLine(person?.Hobbies?[0]);

Aquí, si person o Hobbies son nulos, la expresión se evalúa como nula en lugar de causar una excepción.

Conclusión

El vídeo de Gerald ofrece una visión en profundidad del operador condicional nulo en C#. Al usar ?. y ?[ ], los desarrolladores pueden escribir código más limpio y seguro que evita la NullReferenceException. Ya se trate de propiedades, objetos anidados o matrices, el operador condicional nulo hace que el código sea más conciso y legible.

Para una demostración completa, no dejes de ver el vídeo de Gerald Versluis, donde lo explica todo con ejemplos prácticos

Hero Worlddot related to Operador condicional nulo de C#
Hero Affiliate related to Operador condicional nulo de C#

Gana más compartiendo lo que te gusta

¿Creas contenidos para desarrolladores que trabajan con .NET, C#, Java, Python o Node.js? ¡Convierte tu experiencia en un ingreso extra!

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame