Ostatnio pomyślałem o użyciu liczb całkowitych bez znaku w języku C # (i chyba podobny argument można powiedzieć o innych „językach wysokiego poziomu”)
Gdy w potrzebie liczby całkowitej zwykle nie stoję przed dylematem wielkości liczby całkowitej, przykładem może być właściwość age klasy Person (ale pytanie nie ogranicza się do właściwości). Mając to na uwadze, o ile widzę, istnieje tylko jedna zaleta używania niepodpisanej liczby całkowitej („uint”) nad liczbą całkowitą ze znakiem („int”) - czytelność. Jeśli chcę wyrazić pogląd, że wiek może być tylko dodatni, mogę to osiągnąć, ustawiając typ wieku na uint.
Z drugiej strony obliczenia liczb całkowitych bez znaku mogą prowadzić do różnego rodzaju błędów i utrudniają wykonywanie operacji, takich jak odejmowanie dwóch grup wiekowych. (Przeczytałem, że jest to jeden z powodów, dla których Java pominęła liczby całkowite bez znaku)
W przypadku C # mogę również pomyśleć, że klauzula ochronna na seterze byłaby rozwiązaniem, które daje to, co najlepsze z dwóch światów, ale nie miałoby to zastosowania, gdy na przykład wiek byłby przejściem do jakiejś metody. Obejściem tego problemu byłoby zdefiniowanie klasy o nazwie Wiek, a jedyną rzeczą byłaby wiek właściwości, ale ten wzorzec spowodowałby, że utworzyłem wiele klas i byłby źródłem zamieszania (inni programiści nie wiedzieliby, kiedy obiekt jest tylko opakowaniem a kiedy jest to coś bardziej sofistycznego).
Jakie są najlepsze ogólne praktyki dotyczące tego problemu? Jak mam poradzić sobie z tego typu scenariuszem?