Het juiste gegevenstype kiezen

Voltooid

U hebt het verschil gezien tussen waardetypen en verwijzingstypen, en tussen integrale en drijvende-kommatypen.

Stel dat het uw taak is om een nieuwe toepassing te bouwen die verschillende soorten gegevens ophaalt, bewerkt en opslaat. Welke gegevenstypen gebruikt u?

In sommige gevallen is het een eenvoudige keuze. Als u bijvoorbeeld met tekst moet werken, gebruikt u standaard het string gegevenstype, tenzij u een aanzienlijke hoeveelheid samenvoeging moet uitvoeren.

Maar hoe zit het met werken met numerieke gegevens? Er zijn 11 verschillende opties. Hoe kiest u het juiste gegevenstype?

Het juiste gegevenstype kiezen

Met zoveel gegevenstypen waaruit u kunt kiezen, welke criteria moet u dan gebruiken om het juiste gegevenstype te kiezen voor de specifieke situatie?

Bij het evalueren van uw opties moet u enkele belangrijke overwegingen afwegen. Vaak is er geen enkel juist antwoord, maar zijn sommige antwoorden beter dan andere.

Kies het gegevenstype dat voldoet aan de vereisten voor het grenswaardebereik van uw toepassing

Het gegevenstype van uw keuze kan helpen bij het stellen van de grenzen voor de grootte van de gegevens die u in die specifieke variabele kunt opslaan. Als u bijvoorbeeld weet dat een bepaalde variabele alleen een getal tussen 1 en 10.000 moet opslaan, anders valt deze buiten de grenzen van wat er zou worden verwacht, zou u waarschijnlijk vermijden byte en sbyte omdat hun bereiken te laag zijn.

Bovendien hebt intu waarschijnlijk geen , longen uintulong omdat ze meer gegevens kunnen opslaan dan nodig is. Evenzo slaat u waarschijnlijk float, double en decimal over als u geen gebroken waarden nodig hebt. U kunt het beperken tot short en ushort, waarvan beide mogelijk levensvatbaar zijn. Als u zeker weet dat een negatieve waarde geen betekenis heeft in uw toepassing, kunt u kiezen ushort (positief niet-ondertekend geheel getal, 0 tot 65.535). Nu wordt voor elke waarde die is toegewezen aan een variabele van het type ushort buiten de grens van 0 tot 65535 een uitzondering gegenereerd, waardoor u een zekere mate van controle in uw toepassing afdwingt.

Begin met het kiezen van het gegevenstype dat past bij de gegevens (niet om de prestaties te optimaliseren)

U bent misschien geneigd om het gegevenstype te kiezen dat gebruikmaakt van de minste bits om gegevens op te slaan die denken dat dit de prestaties van uw toepassing verbetert. Een van de beste aanbevelingen met betrekking tot de prestaties van toepassingen (dat wil zeggen, hoe snel uw toepassing wordt uitgevoerd) is echter niet "voortijdig optimaliseren". U moet de verleiding weerstaan om te raden naar de onderdelen van uw code, inclusief de selectie van gegevenstypen die van invloed kunnen zijn op de prestaties van uw toepassing.

Velen nemen aan dat omdat een bepaald gegevenstype minder gegevens opslaat, het minder van de processor en het geheugen van de computer verbruikt dan een gegevenstype dat meer informatie bevat. In plaats daarvan moet u het juiste type kiezen voor uw gegevens. Vervolgens kunt u de prestaties van uw toepassing empirisch meten met behulp van speciale software die feitelijke inzichten bieden in de onderdelen van uw toepassing die een negatieve invloed hebben op uw toepassing.

Gegevenstypen kiezen op basis van de invoer- en uitvoergegevenstypen van bibliotheekfuncties die worden gebruikt

Stel dat u wilt werken met een bereik van jaren tussen twee datums. Aangezien de toepassing een zakelijke toepassing is, kunt u bepalen dat u slechts een bereik van ongeveer 1960 tot 2200 nodig hebt. U denkt er misschien mee byte te werken, omdat dit getallen tussen 0 en 255 kan vertegenwoordigen.

Wanneer u echter naar de ingebouwde methoden in de klassen System.TimeSpan en System.DateTime kijkt, realiseert u zich dat deze meestal waarden van het type double en int accepteren. Als u sbyte kiest, wordt u voortdurend heen- en weer geleid tussen byte en double of int. In dit geval kan het zinvol zijn om int te kiezen als u geen precisie van minder dan een seconde nodig hebt, en double als u een precisie van minder dan een seconde nodig hebt.

Gegevenstypen kiezen op basis van impact op andere systemen

Soms moet u overwegen hoe de informatie wordt gebruikt door andere toepassingen of andere systemen, zoals een database. Het typesysteem van SQL Server verschilt bijvoorbeeld van het typesysteem van C#. Als gevolg hiervan moet er een afstemming tussen de twee plaatsvinden voordat u gegevens in die database kunt opslaan.

Als het doel van uw toepassing is om te interfacen met een database, moet u waarschijnlijk overwegen hoe de gegevens worden opgeslagen en hoeveel gegevens worden opgeslagen. De keuze van een groter gegevenstype kan van invloed zijn op de hoeveelheid (en kosten) van de fysieke opslag die nodig is om alle gegevens op te slaan die door uw toepassing worden gegenereerd.

Als u twijfelt, houdt u zich aan de basisbeginselen

Hoewel u naar verschillende overwegingen hebt gekeken, zoals u aan de slag gaat, moet u in het belang van het gemak een subset van basisgegevenstypen gebruiken, waaronder:

  • int voor de meeste gehele getallen
  • decimal voor getallen die geld vertegenwoordigen
  • bool voor de waarden waar en onwaar
  • string voor alfanumerieke waarden

Speciale complexe typen kiezen voor speciale situaties

U kunt gegevenstypen niet opnieuw uitvinden als er al een of meer gegevenstypen bestaan voor een bepaald doel. In de volgende voorbeelden ziet u waar een specifieke .NET-gegevenstypen nuttig kunnen zijn:

  • byte: werken met gecodeerde gegevens die afkomstig zijn van andere computersystemen of met behulp van verschillende tekensets.
  • double: werken met geometrische of wetenschappelijke doeleinden. double wordt regelmatig gebruikt bij het bouwen van games met beweging.
  • System.DateTime voor een specifieke datum-en tijdwaarde.
  • System.TimeSpan voor een tijdspanne van jaren/maanden/dagen/uren/minuten/seconden/milliseconden.

Samenvatting

Er zijn overwegingen bij het kiezen van gegevenstypen voor uw code en vaak meer dan één optie. Denk na over je keuzes, en tenzij je een goede reden hebt, probeer je te houden met de basistypen zoals int, decimal, en stringbool.