Esta pregunta ha estado en mi mente por un tiempo, lo siento si parece subjetiva. Hay algunas desventajas en el uso de bool en propiedades públicas y constructores para objetos de datos. Considere el siguiente código como un ejemplo.Enumeración de dos miembros vs. valor booleano
Usando bool:
public class Room
{
public string Name { get; set; }
public bool Bookable { get; set; }
public Room(string name, bool bookable);
}
y el uso de esta clase
Room r = new Room ("101", true);
Este es adecuadamente funcional, no es sin embargo otra manera de ponerla en práctica:
Usando enum :
public enum BookingStatus
{
Bookable,
NotBookable
}
public class Room
{
public string Name { get; set; }
public BookingStatus Bookable { get; set; }
public Room(string name, BookingStatus bookable);
}
y el uso de esta clase
Room r = new Room ("101", BookingStatus.Bookable);
Para mí los dos aparecen funcionalmente equivalente, hay algunas ventajas y desventajas de cada uno, sin embargo:
- Al configurar las propiedades del método de enumeración es más verboso (puede inferir el uso de la enumeración solo del código)
- Las enumeraciones se pueden ampliar para admitir otros estados (particularmente útiles para una API)
- Las enumeraciones requieren considerablemente más tipeo (aunque lo reduce considerablemente)
- Las enumeraciones no se pueden usar en condicionales (es decir if (r.bookable)), aunque aprecio que esto es trivial de resolver.
¿Me falta algo, totalmente fuera de lugar? No estoy seguro de por qué esto me molesta tanto, ¡quizás yo también soy TOC por mi propio bien!
Opinión: esto parece que no es el mejor ejemplo - si se trata de una verdadera pregunta de sí/no, luego los booleos son apropiados. Aunque debe nombrar sus propiedades correctamente de acuerdo con la convención (es decir, "IsBookable"): un mejor ejemplo es una pregunta que no es sí o no, como por género o unidades de medida, etc., incluso si solo reconoce dos estados (pulgadas vs cm, o masculino vs. femenino), debe usar una enumeración, porque definitivamente estas no son preguntas de "sí o no" (aunque podría convertirlas en preguntas de sí/no, no, y podrían ser ampliado para admitir más estados). – BrainSlugs83