Datatype: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Madyno (overleg | bijdragen)
Madyno (overleg | bijdragen)
primitief bij elkaar
Regel 6:
Een expressie heeft het zelfde datatype als het resultaat van de expressie. In sommige programmeertalen wordt het type van het resultaat geheel bepaald door de bewerking en de typen van de operanden, soms ook door hun waarden. Een deling van twee integers levert bijvoorbeeld in sommige programmeertalen altijd een real op, terwijl in andere dit ervan afhangt of de rekenkundige uitkomst een geheel getal is.
 
==Indeling==
==Primitief, eenvoudig en samengesteld==
Gegevenstypes kunnen worden onderscheiden in primitieve (''primitive''), enkelvoudige (''simple'') en samengestelde (''complex'') types. Primitieve datatypes vormen de basis voor de definities van andere gegevenstypes.
 
=== Primitief type ===
Een ''primitief type'' wordt door de taal zelf gedefinieerd en kan niet beschreven worden in termen van een ander datatype. In ''C'', bijvoorbeeld, zijn ''char'', ''int'' en ''float'' primitieve types.
 
De meest algemeenAlgemeen voorkomende primitieve typen zijn:<ref name="sebesta">Sebesta, pagina 253 e.v.</ref><ref name="Watt">Watt, pagina 17 e.v.</ref>
 
* '''[[Booleaanse algebra|Boolean]]''', ook bekend als ''bool'', ''flag'' of ''logic''. Kan de waarde ''ja'' of ''nee'' bevatten. Andere benamingen voor deze waarden zijn ''waar'' en ''onwaar'', of, gebruikelijker, het Engelse ''true'' en ''false''.
* '''[[Karakter (informatica)|Karakter]]''', ook bekend als ''character'' of ''char''. Deze kan precies één [[American National Standards Institute|ANSI]]- of [[EBCDIC]]- of [[Unicode]]-teken bevatten. Het aantal bytes dat dit type inneemt hangt af van de taal. Historisch was dat meestal 1 byte, maar tegenwoordig ondersteunen veel talen [[Unicode]] en worden er meer bytes gereserveerd voor een variabele van type ''char''.
* '''[[Integer (informatica)|Integer]]''', ook bekend als ''int'', ''short'', ''long'', ''signed'' is de representatie voor gehele getallen, hoewel moet worden benadrukt dat de twee niet hetzelfde zijn, een ''integer'' heeft nu eenmaal een beperkt bereik, terwijl een geheel getal dat niet heeft. Meestal worden definities zo gekozen dat een integer in een register
past, maar dit is geen [[wet van Meden en Perzen]], aangezien bewerkingen op een 64-bit integer vrij gemakkelijk kunnen worden verdeeld in twee 32-bit bewerkingen of zelfs 4 16-bit bewerkingen. * '''[[Real (informatica)|Real]]''', ook bekend als ''float'', ''single'', ''double''; alle niet gehele getallen. Voor het bereik van een ''real'' geldt hetzelfde als dat van een integer.
* '''Decimal''', ook bekend als ''fixed''. Kan een vast aantal cijfers voor en achter de komma bevatten.
* '''Void''', ook wel bekend als ''null'' of ''unit''. Het type ''void'' heeft geen waarde. Dit type duidt het ontbreken van een waarde aan.<ref name="aho">Aho, pagina 371</ref><ref>Watt, pagina 23</ref>
 
Op elk datatype bestaan diverse varianten. Deze variaties kunnen verschillen in precisie (aantal bytes), interne representatie (in het [[computergeheugen|geheugen]]) of de [[functie (informatica)|functies]] die erop toegepast kunnen worden. Er zijn ook talen, zoals C, die een onderscheidt maken tussen typen die ''signed'' (deze kunnen negatief zijn) en die ''unsigned'' zijn (deze kunnen niet negatief zijn).
 
Deze types kunnen in elkaar omgezet worden door middel van een [[typeconversie]]. In sommige gevallen kan dit zonder dat er informatie verloren gaat (bijvoorbeeld bij het omzetten van een integer naar een real). In andere gevallen kan er informatie verloren gaan (bijvoorbeeld bij het omzetten van een real naar een integer).
 
Het type ''void'' wordt gebruikt in talen die geen onderscheid kennen tussen [[Subprogramma|procedures en functies]]. In zulke talen (zoals C en Java) heeft een functie die de waarde van het type ''void'' oplevert hetzelfde gedrag als een procedure. In [[Functionele programmeertaal|functionele talen]] wordt het type ''void'' (vaak ''union'' genoemd) gebruikt voor expressies die een ''side-effect'' bewerkstelligen (bijvoorbeeld in [[Ocaml|OCaml]]<ref>[http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora015.html#@fonctions49 http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora015.html#@fonctions49]</ref>).
 
Een [[variabele (informatica)|variabele]] van een primitief type wordt vaak naar zijn type vernoemd. Zo noemt men een variabele van het type integer meestal een integer.
 
=== Enkelvoudig type===
Regel 28 ⟶ 45:
== Eenvoudige types ==
Eenvoudige types (''simple types'') zijn kleine, eenvoudige basisblokken.
 
De meest algemeen voorkomende primitieve typen zijn:<ref name="sebesta">Sebesta, pagina 253 e.v.</ref><ref name="Watt">Watt, pagina 17 e.v.</ref>
 
* '''[[Booleaanse algebra|Boolean]]''', ook bekend als ''bool'', ''flag'' of ''logic''. Kan de waarde ''ja'' of ''nee'' bevatten. Andere benamingen voor deze waarden zijn ''waar'' en ''onwaar'', of, gebruikelijker, het Engelse ''true'' en ''false''.
* '''[[Karakter (informatica)|Karakter]]''', ook bekend als ''character'' of ''char''. Deze kan precies één [[American National Standards Institute|ANSI]]- of [[EBCDIC]]- of [[Unicode]]-teken bevatten. Het aantal bytes dat dit type inneemt hangt af van de taal. Historisch was dat meestal 1 byte, maar tegenwoordig ondersteunen veel talen [[Unicode]] en worden er meer bytes gereserveerd voor een variabele van type ''char''.
* '''[[Integer (informatica)|Integer]]''', ook bekend als ''int'', ''short'', ''long'', ''signed'' is de representatie voor gehele getallen, hoewel moet worden benadrukt dat de twee niet hetzelfde zijn, een ''integer'' heeft nu eenmaal een beperkt bereik, terwijl een geheel getal dat niet heeft. Meestal worden definities zo gekozen dat een integer in een register
past, maar dit is geen [[wet van Meden en Perzen]], aangezien bewerkingen op een 64-bit integer vrij gemakkelijk kunnen worden verdeeld in twee 32-bit bewerkingen of zelfs 4 16-bit bewerkingen. * '''[[Real (informatica)|Real]]''', ook bekend als ''float'', ''single'', ''double''; alle niet gehele getallen. Voor het bereik van een ''real'' geldt hetzelfde als dat van een integer.
* '''Decimal''', ook bekend als ''fixed''. Kan een vast aantal cijfers voor en achter de komma bevatten.
* '''Void''', ook wel bekend als ''null'' of ''unit''. Het type ''void'' heeft geen waarde. Dit type duidt het ontbreken van een waarde aan.<ref name="aho">Aho, pagina 371</ref><ref>Watt, pagina 23</ref>
 
Op elk datatype bestaan diverse varianten. Deze variaties kunnen verschillen in precisie (aantal bytes), interne representatie (in het [[computergeheugen|geheugen]]) of de [[functie (informatica)|functies]] die erop toegepast kunnen worden. Er zijn ook talen, zoals C, die een onderscheidt maken tussen typen die ''signed'' (deze kunnen negatief zijn) en die ''unsigned'' zijn (deze kunnen niet negatief zijn).
 
Deze types kunnen in elkaar omgezet worden door middel van een [[typeconversie]]. In sommige gevallen kan dit zonder dat er informatie verloren gaat (bijvoorbeeld bij het omzetten van een integer naar een real). In andere gevallen kan er informatie verloren gaan (bijvoorbeeld bij het omzetten van een real naar een integer).
 
Het type ''void'' wordt gebruikt in talen die geen onderscheid kennen tussen [[Subprogramma|procedures en functies]]. In zulke talen (zoals C en Java) heeft een functie die de waarde van het type ''void'' oplevert hetzelfde gedrag als een procedure. In [[Functionele programmeertaal|functionele talen]] wordt het type ''void'' (vaak ''union'' genoemd) gebruikt voor expressies die een ''side-effect'' bewerkstelligen (bijvoorbeeld in [[Ocaml|OCaml]]<ref>[http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora015.html#@fonctions49 http://caml.inria.fr/pub/docs/oreilly-book/html/book-ora015.html#@fonctions49]</ref>).
 
Een [[variabele (informatica)|variabele]] van een primitief type wordt vaak naar zijn type vernoemd. Zo noemt men een variabele van het type integer meestal een integer.
 
== Strings ==