Τύπος δεδομένων

Στον προγραμματισμό υπολογιστών, ένας τύπος δεδομένων (data type) είναι μία κατηγοριοποίηση που προσδιορίζει διαφορετικούς τύπους από δεδομένα, όπως κινητής υποδιαστολής (floating-point), ακεραίους (integer), ή τύπους δεδομένων αλήθειας (Boolean), η οποία καθορίζει τις πιθανές τιμές για αυτόν τον τύπο, τις λειτουργίες που μπορούν να επιτελεστούν σε τιμές αυτού του τύπου, την σημασία των δεδομένων και τον τρόπο που οι τιμές αυτού του τύπου μπορούν να αποθηκευτούν. Οι τύποι δεδομένων χρησιμοποιούνται μέσα σε συστήματα τύπων (type systems), τα οποία προσφέρουν διάφορους τρόπους για τον ορισμό, την υλοποίηση και την χρήση τους. Διαφορετικά συστήματα τύπων εξασφαλίζουν διαφορετικούς βαθμούς ασφάλειας τύπων (type safety). Τυπικά, ένας τύπος μπορεί να οριστεί ως "οποιαδήποτε ιδιότητα ενός προγράμματος την οποία μπορούμε να προσδιορίσουμε πριν την εκτέλεση του προγράμματος".

Τύποι δεδομένων μηχανής

Όλα τα δεδομένα στους υπολογιστές που βασίζονται σε ψηφιακά ηλεκτρονικά κυκλώματα αναπαρίστανται ως bit (εναλλακτικές 0 και 1) στο πιο χαμηλό επίπεδο. Η μικρότερη μονάδα δεδομένων που μπορεί να διευθυνσιοδοτηθεί είναι συνήθως μια ομάδα από bit που αποκαλούνται byte (συνήθως μία οκτάδα (octet), που είναι 8 bit). Η μονάδα που μπορεί να επεξεργαστεί από εντολές γλώσσας μηχανής ονομάζεται λέξη (word) (η οποία από το 2011 είναι τυπικά 32 ή 64 bit). Οι περισσότερες εντολές ερμηνεύουν την λέξη ως έναν δυαδικό αριθμό, έτσι ώστε ένας 32 bit αριθμός να μπορεί να αναπαραστήσει μη προσημασμένες ακέραιες τιμές από 0 έως  ή προσημασμένες ακέραιες τιμές από  έως . Λόγω του συμπληρώματος ως προς 2, η μηχανή και η γλώσσα μηχανής ως επί το πλείστον δεν χρειάζεται να διακρίνουν τους μη προσημασμένους από τους προσημασμένους τύπους δεδομένων.
Υπάρχει ένα συγκεκριμένο σύνολο εντολών αριθμητικών πράξεων, οι οποίες χρησιμοποιούν διαφορετική ερμηνεία των bit μίας λέξης σαν έναν αριθμό κινητής υποδιαστολής.
Οι τύποι δεδομένων μηχανής είναι αναγκαίο να εκτίθενται ή είναι διαθέσιμοι σε συστήματα ή χαμηλού επιπέδου γλώσσες προγραμματισμού ώστε να επιτρέπουν τον ευέλικτο έλεγχο του υλικού (hardware). Η γλώσσα προγραμματισμού C για παράδειγμα είναι εφοδιασμένη με τύπους δεδομένων διαφόρων μεγεθών, όπως ο short και ο long. Αν ένας αντίστοιχος εγγενής (native) τύπος δεν υπάρχει στην πλατφόρμα στόχο, ο μεταγλωττιστής θα τον "σπάσει" σε κώδικα που χρησιμοποιεί τύπους που υπάρχουν. Για παράδειγμα, αν ζητείται ένας ακέραιος των 32 bit σε μία πλατφόρμα των 16 bit, ο μεταγλωττιστής θα τον αντιμετωπίσει σιωπηρά ως έναν πίνακα από δύο ακεραίους των 16 bit.
Πολλές γλώσσες επιτρέπουν δυαδικά και δεκαεξαδικά λεκτικά (literals), για τον εύκολο χειρισμό δεδομένων μηχανής.
Σε υψηλότερου επιπέδου προγραμματισμό, οι τύποι δεδομένων μηχανής είναι συνήθως κρυμμένοι ή αφηρημένοι (abstracted) ως μία λεπτομέρεια της υλοποίησης που θα καθιστούσε τον κώδικα λιγότερο μεταφέρσιμο αν ήταν φανερή στον χρήστη. Για παράδειγμα, μπορεί να παρέχεται ένας γενικευμένος αριθμητικός τύπος αντί ενός τύπου συγκεκριμένου μεγέθους.

Απαριθμήσεις

Οι απαριθμήσεις. Αυτές έχουν τιμές που διαφέρουν μεταξύ τους, οι οποίες μπορούν να συγκριθούν και να ανατεθούν, αλλά δεν έχουν απαραίτητα κάποια συγκεκριμένη αναπαράσταση στην μνήμη του υπολογιστή. Οι μεταγλωττιστές και οι διερμηνευτές τις αναπαριστούν αυθαίρετα. Για παράδειγμα, τα τέσσερα χαρτιά σε μία τράπουλα θα μπορούσαν να είναι τέσσερις απαριθμητές με ονόματα ΣΠΑΘΙ, ΚΑΡΩ, ΜΠΑΣΤΟΥΝΙ, ΚΟΥΠΑ, που θα ανήκουν σε μία απαρίθμηση με όνομα τράπουλα. Αν η μεταβλητή V δηλωθεί να έχει τράπουλα για τύπο, μπορούμε να αναθέσουμε οποιαδήποτε από αυτές τις τιμές σε αυτή την μεταβλητή. Κάποιες υλοποιήσεις επιτρέπουν στον προγραμματιστή να αναθέσει ακέραιες τιμές στις τιμές απαρίθμησης, ή ακόμα και να τις αντιμετωπίζει ως τυπικά ισοδύναμες (type-equivalent) με τους ακεραίους.

Επαγόμενοι Τύποι

Οι επαγόμενοι τύποι μπορούν να βασίζονται, ή να προέρχονται από τους βασικούς τύπους που εξηγήθηκαν παραπάνω.
Σε κάποια γλώσσα σαν την C, οι συναρτήσεις (functions) έχουν τύπο που προέρχεται από τον τύπο της τιμής επιστροφής (return value) τους.

Βοηθητικοί τύποι

Για ευκολία, πολλές γλώσσες προγραμματισμού υψηλού επιπέδου είναι εφοδιασμένες με χρήσιμους στην πράξη τύπους, όπως για παράδειγμα χρονικές, ημερολογιακές και νομισματικές τιμές, ακόμα και στις περιπτώσεις που η γλώσσα επιτρέπει την κατασκευή τους από πρωταρχικούς τύπους.