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

Otras categorías

Comprender los indicadores de C#

Tim Corey
8m 32s

Los indicadores de C# son una función potente, aunque a menudo ignorada, que permite a los desarrolladores gestionar permisos y opciones mediante operaciones de bit a bit. En su vídeo "Binary in C#: Flags in 10 minutes or less", Tim Corey ofrece una explicación clara y concisa de cómo funcionan las banderas y cómo pueden aprovecharse eficazmente en C#. En este artículo, desglosaremos las explicaciones de Tim y los puntos de vista del vídeo para comprender mejor los indicadores de C#.

¿Qué son las banderas?

Tim comienza introduciendo el concepto de Flags. Explica que los Flags nos permiten asignar múltiples valores a una única variable, lo que los hace útiles para gestionar permisos en una aplicación. Para ilustrar esto, Tim crea un enum llamado SystemPermissions que incluye varias permisos como SQL, WebServer, Redis, Azure, GitHub y BuildSystem.

Tim destaca que sin Flags, una sola variable solo puede contener un permiso a la vez. Por ejemplo, si intentamos asignar SystemPermissions.GitHub a un usuario, no podemos asignar también SystemPermissions.BuildSystem a menos que usemos un arreglo, lo que se vuelve engorroso de manejar.

El problema sin banderas

En este punto, Tim demuestra las limitaciones de las asignaciones de enumeración tradicionales. Si asignamos los permisos de uno en uno, comprobarlos más tarde requiere iterar a través de una matriz, lo que es ineficiente y no escalable. Esto da lugar a una implementación "fea", como la describe Tim, en la que la gestión de múltiples permisos se convierte en un engorro.

Presentación del atributo Flags

Para resolver este problema, Tim introduce el atributo [Flags], que permite tratar un enum como un campo de bits. Explica que a cada permiso se le asigna un valor binario único mediante el desplazamiento de bits.

En lugar de asignar números incrementales (0, 1, 2, 3, etc.), Tim asigna valores utilizando potencias de dos:

[Flags]
enum SystemPermissions
{
    None = 0,
    SQL = 1 << 0,       // 00000001
    WebServer = 1 << 1, // 00000010
    Redis = 1 << 2,     // 00000100
    Azure = 1 << 3,     // 00001000
    GitHub = 1 << 4,    // 00010000
    BuildSystem = 1 << 5 // 00100000
}
[Flags]
enum SystemPermissions
{
    None = 0,
    SQL = 1 << 0,       // 00000001
    WebServer = 1 << 1, // 00000010
    Redis = 1 << 2,     // 00000100
    Azure = 1 << 3,     // 00001000
    GitHub = 1 << 4,    // 00010000
    BuildSystem = 1 << 5 // 00100000
}

Tim explica que el desplazamiento de los bits garantiza que cada permiso tenga un valor único sin solaparse, lo que permite la combinación eficaz de varios permisos.

Asignación y combinación de indicadores

A continuación, Tim demuestra cómo asignar y combinar permisos mediante operaciones bit a bit. Explica que podemos asignar múltiples permisos a un usuario utilizando la función bitwise OR (|operador):

SystemPermissions timsPermissions = SystemPermissions.SQL | SystemPermissions.Redis | SystemPermissions.GitHub;
SystemPermissions timsPermissions = SystemPermissions.SQL | SystemPermissions.Redis | SystemPermissions.GitHub;

Esto asigna permisos de SQL, Redis y GitHub a timsPermissions, almacenándolos en una sola variable utilizando operaciones bit a bit.

Comprobación de permisos con indicadores

Uno de los beneficios clave de Flags es la capacidad de verificar si un permiso específico está establecido usando el operador AND (&) a nivel de bits. Tim muestra cómo comprobar si un usuario tiene un permiso determinado:

if ((timsPermissions & SystemPermissions.SQL) == SystemPermissions.SQL)
{
    Console.WriteLine("Tim has SQL access.");
}
if ((timsPermissions & SystemPermissions.SQL) == SystemPermissions.SQL)
{
    Console.WriteLine("Tim has SQL access.");
}

Tim subraya que este método es mucho más eficaz que recorrer una matriz en bucle, ya que permite realizar comparaciones rápidas entre bits.

Quitar permisos

Tim también cubre cómo eliminar un permiso utilizando los operadores AND y NOT (~) a nivel de bits. Si necesitamos revocar el permiso SQL de timsPermissions, lo hacemos de esta manera:

timsPermissions &= ~SystemPermissions.SQL;
timsPermissions &= ~SystemPermissions.SQL;

De este modo, se elimina el permiso SQL y se mantienen intactos los demás permisos.

Visualización de banderas en binario

Para visualizar el funcionamiento de Flags, Tim sugiere convertir el valor enum a su representación binaria. Utiliza un método de ayuda para mostrar el valor binario de un permiso:

Console.WriteLine(Convert.ToString((int)timsPermissions, 2));
Console.WriteLine(Convert.ToString((int)timsPermissions, 2));

Tim explica que esto ayuda a comprender cómo se establecen y manipulan los bits individuales dentro del enum.

¿Por qué utilizar indicadores?

Tim concluye haciendo hincapié en por qué los Flags son útiles en C#:

  • Permiten almacenar múltiples valores en una sola variable.
  • Permiten una gestión eficaz de los permisos.
  • Simplifican la comprobación y modificación de permisos mediante operaciones de bit a bit.

También señala que los indicadores se utilizan habitualmente en situaciones como permisos de archivos, funciones de usuario y configuración de aplicaciones.

Reflexiones finales

A lo largo del vídeo, Tim Corey ofrece una demostración clara y práctica del funcionamiento de los indicadores de C#. Al usar el atributo [Flags] y las operaciones bit a bit, podemos gestionar de manera eficiente múltiples permisos sin necesidad de estructuras de datos complejas. Si está trabajando con permisos o configuraciones que requieren múltiples valores, los indicadores son una herramienta excelente para simplificar su implementación.

Para una comprensión práctica, echa un vistazo al vídeo de Tim Corey, donde explica estos conceptos paso a paso. Los flags pueden parecer complicados al principio, pero una vez que entiendes su naturaleza binaria, se convierten en una característica increíblemente útil en el desarrollo de C#.

Hero Worlddot related to Comprender los indicadores de C#
Hero Affiliate related to Comprender los indicadores 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