TL;DR:Stringi są prawdopodobnie bezpieczniejsze wybór, a różnica w wydajności powinna być znikoma. Liczby całkowite mają sens w przypadku dużych kolekcji, w których wyliczenie musi być indeksowane. MMW.
Prawda.
Moim zdaniem jest to kluczowa zaleta liczb całkowitych. Wymaga to jednak również upewnienia się, że powiązane wartości enum
nie zmieniaj. Jeśli to schrzanisz, prawie na pewno siejesz spustoszenie , co jest ogromną wadą.
Jeśli faktycznie używasz typu danych enum, prawdopodobnie jest to jakiś rodzaj liczby całkowitej wewnętrznie, więc liczba całkowita powinna wymagać mniej przetwarzania. Tak czy inaczej, ten koszt powinien być znikomy.
Powtarzam wiele z tego, co zostało powiedziane, ale może to pomaga innym czytelnikom. Podsumowując:
- Pomieszanie mapy wartości enum sieje spustoszenie. Wyobraź sobie, że Twój
Declined
stany są nagle interpretowane jakoAccepted
, ponieważDeclined
miał wartość '2', a teraz jestAccepted
ponieważ zmieniłeś kolejność wyliczenia i zapomniałeś ręcznie przypisać wartości... (drżenie ) - Smyczki są bardziej wyraziste
- Liczby całkowite zajmują mniej miejsca. Miejsce na dysku zwykle nie ma znaczenia, ale miejsce na indeks pochłonie pamięć RAM, co jest drogie.
- Aktualizacje liczb całkowitych nie zmieniają rozmiaru obiektu. Łańcuchy, jeśli ich długości znacznie się różnią, mogą wymagać ponownego przypisania. Jednak dopełnienie ciągów i współczynnik wypełnienia powinny to złagodzić.
- Liczby całkowite mogą być flagami (jeszcze nie można zadawać zapytań (jeszcze), niestety, zobacz SERVER-3518 )
- Liczby całkowite można odpytywać przez
$gt
/$lt
dzięki czemu możesz efektywnie zaimplementować złożone$or
zapytań, chociaż jest to dość tajemnicze wymaganie i nie ma nic złego w$or
zapytania...