Parece que uno de los objetivos de C#10 es eliminar código de los archivos de código fuente de C#, simplificando su codificación y lectura. Lo hemos visto con la introducción de características como directivas using
globales o los using
implícitos: en ambos casos se ahorraba espacio en vertical sustituyendo los using
declarados individualmente en cada archivo por directivas aplicadas de forma global al proyecto, bien de forma explícita o implícita.
En cambio, los espacios de nombre con ámbito de archivo o namespace declarations permiten ahorrar espacio en horizontal, evitando un nivel de indentación en el código que la mayoría de las veces es innecesario.
Declaración de namespaces en C#10
Según comentan en la documentación oficial, examinando archivos de código en el ecosistema de C#, se ha demostrado que más del 99% de ellos presentan una estructura similar a la siguiente, que seguro podéis reconocer muy rápidamente:
// Directivas using
...
namespace XYZ
{
public class Something
{
...
}
... // Otros tipos definidos en el namespace
}
Esta estructura hace que casi siempre vuestro código (clases, estructuras, enums, etc.) aparezca desplazado hacia la derecha, a la altura de la primera tabulación.
En C#10 podemos eliminar este espacio extra utilizando una declaración de espacio de nombre, que tiene la siguiente pinta:
// Usings
...
namespace XYZ; // Yeah!
public class Something
{
...
}
... // Otros tipos definidos en el namespace
Como podéis ver, a diferencia del enfoque tradicional, ya no se trata de un bloque namespace
que envuelve los elementos definidos en éste, sino en una declaración que afecta a todo el archivo C#.
Obviamente, el hecho esto tiene sus limitaciones. Por ejemplo, ya no podremos definir elementos de distintos namespaces en el mismo archivo, pero, bah, ¿quién lo hacía? 😄
Es decir, esto es válido en un único archivo .cs
: dos namespaces distintos, cada uno con elementos definidos en su interior:
// C# válido en un único archivo .cs
namespace ABC
{
public class MyClassInABC { ... }
}
namespace DEF
{
public class MyClassInDEF { ... }
}
Sin embargo, el siguiente código fallará en compilación si lo intentamos usar en un único archivo C#:
// Error CS8954: Source file can only contain one
// file-scoped namespace declaration
namespace ABC;
public class ClassInABC { }
namespace DEF;
public class ClassInDEF { }
Por las mismas razones, tampoco es posible anidar namespaces usando estas declaraciones. En otras palabras, no existe un equivalente para el siguiente código:
// Válido en C#
namespace A
{
namespace B
{
public class MyClass { }
}
}
Lo más parecido que podríamos lograr sería lo siguiente:
// Válido en C#10
namespace A.B;
public class MyClass { }
En definitiva, un cambio más al lenguaje para ganar pedacitos de pantalla. Cuando empecemos a usar esto de forma intensiva seguro que echaremos de menos ese margen de la izquierda (son muchos años de costumbre) pero seguro que en poco tiempo lo habremos interiorizado y disfrutaremos del espacio ganado :)
Publicado en Variable not found.
Aún no hay comentarios, ¡sé el primero!
Enviar un nuevo comentario