Za każdym razem, gdy piszę metodę, która przyjmuje parametr boolowski reprezentujący opcję, myślę sobie: "czy powinienem zastąpić to przez wyliczenie, które spowodowałoby odczyt wywołań metod dużo łatwiej?"..NET: bool vs enum jako parametr metody
Rozważmy, co następuje z obiektem, który pobiera parametr informujący, czy implementacja powinna używać wersji wątkowo bezpiecznej, czy też nie (nie pytam tutaj, czy ten sposób jest dobry, czy nie, tylko użycie boolean):
public void CreateSomeObject(bool makeThreadSafe);
CreateSomeObject(true);
Gdy połączenie znajduje się obok deklaracji, cel parametru wydaje się oczywiście oczywisty. Kiedy to w jakiś trzeci biblioteki strona ledwo zna, to trudniej natychmiast zobaczyć, co robi kod, w porównaniu do:
public enum CreationOptions { None, MakeThreadSafe }
public void CreateSomeObject(CreationOptions options);
CreateSomeObject(CreationOptions.MakeThreadSafe);
który opisuje intencje znacznie lepiej.
Sytuacja się pogarsza, gdy istnieją dwa parametry boolowskie reprezentujące opcje. Zobacz, co stało się z ObjectContext.SaveChanges(bool)
między Framework 3.5 a 4.0. Został on przestarzały, ponieważ wprowadzono drugą opcję, a całość została przekształcona w wyliczenie.
O ile wydaje się oczywiste, że używa się wyliczenia, gdy występują trzy elementy lub więcej, jakie są wasze opinie i doświadczenia dotyczące używania wyliczenia zamiast wartości boolowskiej w tych konkretnych przypadkach?