Saltar al contenido

Devolver y consumir tuplas

Uno de los mayores problemas de un código como este es que parece engorroso y puede causar interrupciones cuando intentamos revisar el código que lo contiene. Cuando C# 7 fue lanzado, un nuevo tipo de tupla fue introducido; la Tupla de Valor. Las ValueTuples son un conjunto de clases genéricas similares a las tuplas, pero el equipo que está detrás de esta característica aprovechó la oportunidad de mejorar el lenguaje para agilizar el proceso de creación y uso de esta nueva característica.

Veamos cómo podemos reescribir el método GetPerson para usar el nuevo estilo de sintaxis.

Devolver y consumir tuplas
Devolver y consumir tuplas
12345privatestatic(string, DateTime,int)GetPerson(){DateTime dateOfBirth =newDateTime(1991,07,27);return("Jonathon ", dateOfBirth,CalculateAge(fechaOfBirth));}

csharp

El primer cambio que vemos aquí es el tipo de retorno de aspecto ligeramente extraño. La (cadena, DateTime, int) le dice al compilador que esto es una ValueTuple. La declaración de retorno se simplifica para eliminar por completo la creación de la Tupla. Adoptamos un enfoque similar para consumir este tipo de retorno:

1(string, DateTime,int) person =GetPerson();

csharp

Esos son todos los cambios que necesitamos hacer en nuestro código para usar una ValueTuple. El nombre de la persona sigue siendo el punto 1, la fecha de nacimiento sigue siendo el punto 2 y la edad sigue siendo el punto 3. Afortunadamente para nosotros, los diseñadores del lenguaje decidieron que una mejora útil aquí sería la capacidad de usar nombres más significativos para estas propiedades. Primero, cambiamos el nombre de GetPerson a esto:

1(nombre de la cadena, fecha y hora de nacimiento, edad) persona =GetPerson();

csharp

Con este cambio, podemos reemplazar el ítem 1, etc., por esto:

1Console.WriteLine($"{nombre.de.la.persona} nació en {fecha.de.nacimiento.año} y tiene {persona.edad} años de edad");

csharp

En este momento, sólo hemos cambiado el código para usar el nombre, la fecha de nacimiento y la edad en el método que se llama GetPerson. La firma del método GetPerson no ha cambiado; sigue siendo (string, DateTime, int). Deberíamos cambiar la firma del método también. Haciendo esto, estamos dando a la gente que consume este código una pista de para qué sirve cada parámetro. Ya no nos basamos sólo en una posición. No hay nada que nos obligue a tener los mismos nombres de parámetros en el lado de la llamada, pero es una buena práctica para eliminar los obstáculos para la comprensión del código. El método GetPerson ahora se ve así:

12345privatestatic(string name,DateTime dateOfBirth,int age)GetPerson(){DateTime dateOfBirth =newDateTime(1991,07,27);return(name: "Jonathon ", dateOfBirth: dateOfBirth, age:CalculateAge(dateOfBirth));}

csharp