C# COMPLETE COURSE
ΕΝΟΤΗΤΑ 4 - PRIMITIVE TYPES
INTRODUCTION
Στην C#, κάθε μεταβλητή που ορίζουμε πρέπει να ορίζεται και από τον τύπο των τιμών που θα δέχεται. Αυτές οι τιμές μπορεί να είναι της μορφής true ή false (Boolean), γράμματα (characters), ακέραιοι αριθμοί (integers) κτλ. Σε αυτό το δωρεάν μάθημα C# θα καταλάβουμε τι ακριβώς είναι το type και ποια είναι η σημασία του στη C#, πως ορίζουμε types στις μεταβλητές και τέλος ποιες type κατηγορίες υπάρχουν στην C#.
WHAT IS A TYPE?
Το type ορίζει το είδος των τιμών που θα μπορεί να δεχτεί η μεταβλητή κατά την χρήση της μέσα στο κώδικα μας. Όταν λοιπόν ορίζουμε το όνομα της μεταβλητής ταυτόχρονα πρέπει να ορίσουμε και το τύπο των τιμών που επιτρέπονται να ανατεθούν στην μεταβλητή χρησιμοποιώντας το κατάλληλο type όπως float, char, string, bool κτλ. Αν και ο επίσημος ορισμός είναι type, πολλές φορές οι προγραμματιστές χρησιμοποιούν τον όρο data type σαν συνώνυμο του όρου type. Αν το ακούσετε, απλά να γνωρίζετε ότι αναφέρονται στην ίδια ακριβώς διαδικασία.
CLASSIFICATION TYPES
Τα types γενικότερα στην C# χωρίζονται σε δύο μεγάλες κατηγόριες – τα Primitive Types και τα Non-Primitive Types. Στα Primitive Types ανήκουν τα απλά types όπως float, bool και char ενώ στα Non-Primitive Types ανήκουν τα πιο σύνθετα types όπως classes και interfaces. Εμείς θα ξεκινήσουμε με τα Primitive Types και αργότερα θα ασχοληθούμε και με τα Non-Primitive Types.
Τι ακριβώς όμως είναι το Primitive Type και πως επηρεάζει την μεταβλητή; Βασικά ένα primitive type, από την στιγμή που εφαρμοστεί σε μια μεταβλητή, τότε περιορίζει την μεταβλητή στο να δέχεται αυστηρά μια μόνο τιμή ενός συγκεκριμένου είδους. Για παράδειγμα, αν ορίσουμε μια μεταβλητή να δέχεται μόνο ακέραιες τιμές τότε ο ορισμός int x περιορίζει την μεταβλητή x στο να δέχεται κάθε φορά μια ακέραια τιμή. Το ακριβώς αντίθετο συμβαίνει στα Non-Primitive Types όπου εκεί μπορούμε σε μια μεταβλητή να αποθηκεύσουμε μία ή και περισσότερες τιμές.
Μπορούμε να βρούμε έναν απλό πίνακα με τα Primitive Types στο documentation της C# (https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/built-in-types).
int AND double PRIMITIVE TYPES
Ένα από τα πιο συνηθισμένα types μέσα στον κώδικα είναι εκείνο που ορίζει ότι η μεταβλητή δέχεται μόνο ακέραιους αριθμούς (int). Το συγκεκριμένο type χαρακτηρίζεται από 32 bits που σημαίνει ότι μια int μεταβλητή μπορεί να λάβει αριθμούς από -2,147,483,648 μέχρι 2,147,483,647. Ακολουθώντας αυτή τη λογική μπορούμε εύκολα να καταλάβουμε ότι τα primitive types με 16-bit (short) ή με 8-bit (byte) θα έχουν πολύ μικρότερο εύρος αριθμών που μπορούν να καλύψουν σε σύγκριση με τα int.
Υπάρχουν 8 διαφορετικά είδη primitive types που αναφέρονται στους ακέραιους αριθμούς, αλλά πιστεύω ότι το int θα σας καλύψει απόλυτα για τις περισσότερες περιπτώσεις που θα συναντήσετε σαν προγραμματιστές.
Κάθε type προσφέρεται σε δύο μορφές – η πρώτη είναι με ένα u γράμμα μπροστά από το όνομα (uint) και ένα δεύτερο χωρίς το u (int). Με το u (που σημαίνει unsigned) αναθέτουμε μόνο θετικούς αριθμούς οπότε με 16-bits έχουμε το εύρος 0 έως 4,294,967,295 ενώ χωρίς το u, το int είναι signed που σημαίνει ότι καλύπτει θετικούς αλλά και αρνητικούς αριθμούς.
Μπορεί επίσης να συναντήσετε δύο ονομασίες για κάθε data type. Η πρώτη ορίζεται με βάση την κλάση System (System.Int32) και η δεύτερη με το απλό int όπως το έχουμε ήδη περιγράψει. Η περιγραφή με το System είναι το ολοκληρωμένο όνομα του type όπως αυτό έχει οριστεί στην Base Class Library (BCL) για να είναι κοινό σε όλες τις γλώσσες προγραμματισμού που υποστηρίζει το .NET. Η C# όμως μας προμηθεύει και με σύντομες περιγραφές προς δική μας ευκολία. Γενικότερα, έχουν επικρατήσει οι σύντομες περιγραφές οπότε και εμείς θα ακολουθήσουμε αυτό το τρόπο δήλωσης των types.
Κάθε type μας προσφέρει και την δική του ομάδα από μεθόδους που κάθε μία μας προσφέρει και μια ειδική πράξη που μπορούμε να εκτελέσουμε - όπως μετατροπή από ένα type σε ένα άλλο - χωρίς την ανάγκη να γράψουμε εμείς έξτρα κώδικα.
Την λογική των ακεραίων και των types που τους συνοδεύουν την συναντάμε και στους δεκαδικούς με types όπως float (32 bits) και double (64 bits). Συνήθως στα προγράμματα μας χρησιμοποιούμε το double εκτός και αν χρειαζόμαστε αρκετά μεγάλους αριθμούς που τότε πάμε στα 128-bit με το type Decimal.
char AND bool PRIMITIVE TYPES
Σαν char χαρακτηρίζουμε μεμονωμένους χαρακτήρες ή σύμβολα από οποιαδήποτε γλώσσα. Ένα char type υποστηρίζεται από ένα 16-bit Unicode και όταν δηλώνεται πρέπει να χρησιμοποιήσουμε single quotes ( ‘ ‘ ). Υπάρχουν κάποια συγκεκριμένα στοιχεία που συχνά αναζητάμε μέσω κώδικα που σχετίζονται με χαρακτήρες που πληκτρολογεί ο χρήστης της εφαρμογής. Η αναζήτηση αυτών των στοιχείων γίνεται μέσω της δήλωσης του char type και τις περισσότερες φορές περιλαμβάνει τα στοιχεία όπως δηλώνονται στον παρακάτω πίνακα.
Αν τώρα έχετε απορία γιατί δεν έχουμε το string στην λίστα των Primitive Type, ο λόγος είναι γιατί το string δεν ανήκει στην κατεγορία των primitive types αφού αποθηκεύει πολλαπλούς χαρακτήρες ταυτόχρονα. Μην ξεχνάτε ότι τα primitive types επιτρέπουν μόνο μια τιμή να ανατεθεί στην μεταβλητή. Αυτό δεν ισχύει με τα strings.
Όσο αφορά την λογική του bool type εδώ τα πράγματα είναι πολύ απλά γιατί οι μόνες τιμές που μπορεί να δεχτεί μια μεταβλητή είναι η λέξη κλειδί true ή false.
WHAT IS THE DEFAULT VALUE?
Κατά τον ορισμό μιας μεταβλητής δεν είμαστε υποχρεωμένοι να ορίσουμε κάποια τυχαία αρχική τιμή. Απλά δηλώνουμε μόνο το όνομα της μεταβλητής και το type και αργότερα, κατά την εκτέλεση του κώδικα, αναθέτουμε τιμή ή τιμές σε αυτήν. Όμως κάθε type, αν δεν ορίσουμε εμείς αρχική τιμή στη μεταβλητή, ορίζει εκείνο μια αρχική τιμή. Για παράδειγμα, σε μια μεταβλητή είδος int η αρχική τιμή θα είναι μηδέν. Για να βρουμε τις προκαθορισμένες αρχικές τιμές που αναθέτει η C# στις μεταβλητές μας, μπορούμε να χρησιμοποιήσουμε το function default περνώντας σαν παράμετρο μέσα στην παρένθεση το όνομα του type που θέλουμε να ελέγξουμε.
SIMPLE EXAMPLE
Στο παρακάτω πρόγραμμα δηλώνουμε μερικές μεταβλητές με διαφορετικά types για να εξοικειωθούμε με τον τρόπο δήλωσης τους μέσα σε ένα πρόγραμμα και μετά καλούμε τα ενσωματωμένα properties σε μερικά από αυτά για να βρούμε τον μεγαλύτερο αριθμό που μπορούμε να αναθέσουμε σε μια μεταβλητή κάτω από το συγκεκριμένο type. Επίσης ελέγχουμε ποια είναι η default τιμή σε μια μεταβλητή int αν εμείς αρχικά δεν αναθέσουμε μια τιμή.
Program.cs
Output
ΕΙΣΗΓΗΤΗΣ
Μιχάλης Κασάπογλου
Ο Μιχάλης Κασάπογλου, είναι ένας από τους πιο έμπειρους τεχνικούς εκπαιδευτές στον χώρο του προγραμματισμού με πάνω από 20 χρόνια εμπειρία. Έχει εργαστεί σαν IT Operations Manager, Senior Programmer, και Training Team Leader ενώ κατέχει και αρκετές πιστοποιήσεις που καλύπτουν ένα μεγάλο φάσμα τεχνολογιών στο προγραμματισμό, σε βάσεις δεδομένων και cloud. Στον ελεύθερο του χρόνο διατηρεί ένα τεχνολογικό blog στο οποίο θα βρείτε αρκετά δωρεάν μαθήματα προγραμματισμού για αρχάριους.