Wybór odpowiedniego typu danych

Zakończone

Wcześniej opisano różnice między typami wartości i typami referencyjnymi, a także między typami całkowitoliczbowymi i zmiennoprzecinkowymi.

Załóżmy, że Twoje zadanie polega na opracowaniu nowej aplikacji, która pobiera, modyfikuje i zapisuje różne typy danych. Jakich typów danych używasz?

W niektórych przypadkach jest to łatwy wybór. Jeśli na przykład musisz pracować z tekstem, domyślnie używasz string typu danych, chyba że musisz wykonać znaczną ilość łączenia.

Ale jaki typ wybierzesz do pracy z danymi liczbowymi? Dostępnych jest 11 różnych opcji. Jak wybrać właściwy typ danych?

Wybór odpowiedniego typu danych

Dysponując tyloma typami danych do wyboru, jakimi kryteriami należy się kierować, aby wybrać typ danych właściwy dla konkretnej sytuacji?

Podczas oceniania opcji należy rozważyć kilka ważnych zagadnień. Często nie ma jednej prawidłowej odpowiedzi, ale niektóre odpowiedzi są bardziej prawidłowe niż inne.

Wybierz typ danych, który spełnia wymagania zakresu wartości granic aplikacji

Wybór typu danych może pomóc w określeniu granic rozmiaru danych, które mogą być przechowywane w określonej zmiennej. Jeśli na przykład wiesz, że określona zmienna powinna przechowywać tylko liczbę z zakresu od 1 do 10 000 w przeciwnym razie znajduje się poza granicami tego, czego można się spodziewać, prawdopodobnie uniknąć byte i sbyte ponieważ ich zakresy są zbyt niskie.

Ponadto prawdopodobnie nie będą potrzebne intpliki , long, uinti ulong , ponieważ mogą przechowywać więcej danych niż jest to konieczne. Analogicznie, prawdopodobnie pominiesz typy float, double i decimal, jeśli nie potrzebujesz wartości ułamkowych. Można go zawęzić do short i ushort, z których oba mogą być opłacalne. Jeśli masz pewność, że wartość ujemna nie będzie miała znaczenia w aplikacji, możesz wybrać ushort wartość (dodatnia liczba całkowita bez znaku, od 0 do 65 535). W takiej sytuacji każda wartość przypisana do zmiennej typu ushort, która nie mieści się w zakresie od 0 do 65 535, spowoduje zgłoszenie wyjątku. Dzięki temu będzie wymuszane pewnego rodzaju sprawdzanie poprawności liczb używanych w Twojej aplikacji.

Zacznij od wybrania typu danych, aby dopasować je do danych (aby nie zoptymalizować wydajności)

Możesz wybrać typ danych, który używa najmniejszych bitów do przechowywania danych, myśląc, że poprawia wydajność aplikacji. Jednak jedną z najlepszych porad dotyczących wydajności aplikacji (czyli szybkości działania aplikacji) jest unikanie przedwczesnych optymalizacji. Należy oprzeć się pokusie odgadnięcia części kodu, w tym wyboru typów danych, które mogą mieć wpływ na wydajność aplikacji.

Wiele osób przyjmuje założenie, że jeśli pewien typ danych przechowuje mniej informacji, to musi używać mniej zasobów procesora i pamięci komputera niż typ danych, który przechowuje więcej informacji. Podczas wybierania typów należy się raczej kierować odpowiednim ich dopasowaniem do danych. Później można empirycznie zmierzyć wydajność aplikacji przy użyciu specjalnego oprogramowania, które zapewnia wgląd w szczegółowe informacje dotyczące poszczególnych części aplikacji mających negatywny wpływ na wydajność.

Wybieranie typów danych na podstawie typów danych wejściowych i wyjściowych używanych funkcji biblioteki

Załóżmy, że chcesz pracować z danymi z zakresu lat między dwiema datami. Ponieważ aplikacja jest aplikacją biznesową, możesz określić, że potrzebujesz tylko zakresu od około 1960 do 2200. Możesz pomyśleć, że spróbujesz pracować z byte , ponieważ może reprezentować liczby z zakresu od 0 do 255.

Jednak przeglądając wbudowane metody w klasach System.TimeSpan i System.DateTime, zdajesz sobie sprawę, że przeważnie akceptują one wartości typów double i int. Jeśli wybierzesz typ sbyte będziesz stale musiał przeprowadzać rzutowanie między typami byte i double lub int. W takim przypadku rozsądniejsze może się okazać wybranie typu int, jeśli nie jest wymagana precyzja rzędu ułamków sekund, lub typu double, jeśli potrzebujesz precyzji rzędu ułamków sekund.

Wybieranie typów danych na podstawie wpływu na inne systemy

Czasami należy wziąć pod uwagę sposób, w jaki informacje będą używane przez inne aplikacje lub inne systemy, takie jak baza danych. Na przykład system typu SQL Server różni się od systemu typu C#. W związku z tym przed zapisaniem danych w bazie danych należy przeprowadzić pewne mapowanie między tymi dwoma systemami.

Jeśli celem aplikacji jest interfejs z bazą danych, prawdopodobnie trzeba rozważyć sposób przechowywania danych i ilość przechowywanych danych. Wybór większego typu danych może mieć wpływ na ilość (i koszt) magazynu fizycznego wymaganego do przechowywania wszystkich danych generowanych przez aplikację.

W razie wątpliwości, trzymać się podstaw

Podczas gdy zapoznaliśmy się z kilkoma zagadnieniami, w miarę rozpoczynania pracy, dla uproszczenia warto preferować podzbiór podstawowych typów danych, w tym:

  • int — dla większości liczb całkowitych
  • decimal — dla liczb reprezentujących pieniądze
  • bool — dla wartości true lub false
  • string — dla wartości alfanumerycznych

Wybieranie specjalnych typów złożonych w sytuacjach specjalnych

Nie wymyślaj ponownie typów danych, jeśli co najmniej jeden typ danych już istnieje w danym celu. W poniższych przykładach przedstawiono, gdzie mogą być przydatne określone typy danych platformy .NET:

  • byte: praca z zakodowanymi danymi pochodzącymi z innych systemów komputerowych lub przy użyciu różnych zestawów znaków.
  • double: praca z geometrycznymi lub naukowymi celami. double — jest często używany podczas tworzenia gier z dużą ilością ruchu.
  • System.DateTime — dla określonej wartości daty i godziny.
  • System.TimeSpan — dla zakresu lat / miesięcy / dni / godzin / minut / sekund / milisekund.

Podsumowanie

Podczas wybierania typów danych dla kodu należy wziąć pod uwagę często więcej niż jedną opcję. Zastanów się nad wyborami, a jeśli nie masz dobrego powodu, spróbuj trzymać się podstawowych typów, takich jak int, , decimalstringi bool.