C# COMPLETE COURSE
ΕΝΟΤΗΤΑ 2 - EXPLORING THE METHODS OF THE System.Console CLASS
INTRODUCTION
Σε αυτό το δωρεάν μάθημα C# Complete Course, θα εξηγήσουμε τον κώδικα του “Hello World” προγράμματος που δημιουργήσαμε στην προηγούμενη ενότητα και επίσης θα δούμε πως μπορούμε να εμφανίζουμε μηνύματα στο terminal παράθυρο χρησιμοποιώντας τι μεθόδους της κλάσης Console.
HELLO WORLD CODE EXPLANATION
Κάθε πρόγραμμα στην C#, ανεξάρτητα από τον απλό ή πολύπλοκο κώδικα του, περιέχει τουλάχιστον μια κλάση από την οποία και ξεκινάει η εκτέλεση της εφαρμογής. Την έννοια και την σημασία της κλάσης όπως και τις υπόλοιπες έννοιες που θα αναλύσουμε σε αυτή την ενότητα - όπως για παράδειγμα μέθοδος και namespace - θα τις καταλάβετε λίγο αργότερα. Για τώρα απλά θα δεχτούμε μερικά πράγματα όπως είναι μέχρι να αποκτήσουμε το απαραίτητο θεωρητικό υπόβαθρο που θα μας επιτρέψει να τα κατανοήσουμε καλύτερα.
Μέσα στις κλάσεις είναι εκεί που θα γράφουμε τον κώδικα μας. Αυτή είναι άλλωστε και η βασική αρχή του αντικειμενοστραφή προγραμματισμού - δηλαδή ο κώδικας μας να γράφεται μέσα σε κλάση και να έχουμε την δυνατότητα να δημιουργήσουμε αντικείμενα. Όπως είπα και προηγουμένως είναι πολύ νωρίς για να μιλήσουμε για αντικείμενα, οπότε θα παραμείνουμε μόνο στο πως ορίζουμε μια κλάση.
Ο σωστός ορισμός μιας κλάσης στην C# ξεκινάει με την λέξη κλειδί class και αμέσως μετά ακολουθεί το όνομα της κλάσης. Ο κώδικας που θα περιέχει η κλάση γράφεται ανάμεσα στα άγκιστρα. Στο δικό μας παράδειγμα η κλάση μας ονομάζεται Program.
Επίσης, είναι πιθανόν, μπροστά από την λέξη class να υπάρχει και μια ακόμη εντολή με το όνομα internal η οποία καθορίζει ποιος και από ποιο σημείο μπορεί ένας προγραμματιστής να αποκτήσει πρόσβαση στις πληροφορίες που προσφέρει η κλάση Program. Τέτοιους είδους εντολές θα συναντήσουμε πολύ αργότερα και ανήκουν στην κατηγορία των Access Modifiers. Εξ ορισμού το internal σημαίνει ότι μόνο μια άλλη κλάση από το ίδιο project (assembly) μπορεί να έχει πρόσβαση και να χρησιμοποιήσει τις υπηρεσίες της κλάσης Program. Όπως είπαμε όμως, περισσότερες λεπτομέρεις γύρω από αυτό το θέμα θα δώσουμε σε μελλοντικά δωρεάν μαθήματα C#. Για τώρα μας αρκεί να γνωρίζουμε πως ορίζουμε σωστά μια κλάση.
Έχουμε λοιπόν μια κλάση με το όνομα Program. Αυτή η κλάση όμως από μόνη της δεν έχει την ικανότητα να εκτελέσει την εφαρμογή μας. Την ικανότητα εκτέλεσης, ο κώδικα μας την αποκτάει από την πρόσθεση μιας ειδικής μεθόδου με το όνομα Main.
Αργότερα θα δούμε πως μπορούμε να ορίσουμε δικές μας μεθόδους, για τώρα πρέπει απλά να καταλάβουμε ότι για να εκτελέσουμε την εφαρμογή μας, πρέπει να χρησιμοποιήσουμε την ειδική μέθοδο Main που μας προσφέρει η C#. Η μέθοδος αποτελείται από ένα όνομα, που στην συγκεκριμένη περίπτωση είναι Main και αμέσως μετά ακολουθείται από μια παρένθεση μέσα στην οποία μπορούμε να περάσουμε παραμέτρους.
Εξ ορισμού η C# προσθέτει έναν array με το όνομα args σαν παράμετρο μέσα στην Main για να μπορούμε, αν και εφόσον το επιθυμούμε, να περάσουμε κάποιες τιμές στο πρόγραμμα κατά την εκτέλεση του. Δεν είναι απαραίτητο να χρησιμοποιήσουμε αυτή την προσέγγιση οπότε και δεν θα χρειαστούμε καθόλου την χρήση της args παραμέτρου.
Οι μέθοδοι γενικότερα είναι πολύ χρήσιμα εργαλεία μέσα στην εφαρμογή μας. Μέσα στην μέθοδο (και μέσα στα άγκιστρα που την ορίζουν) γράφουμε όλο εκείνο τον κώδικα που χρειαζόμαστε για να ολοκληρωθεί μια ενέργεια. Μπορούμε να καλέσουμε όσες φορές θέλουμε αυτό το κώδικα καλώντας απλά το όνομα της μεθόδου.
Όπως είπαμε λοιπόν, κάθε μέθοδο έχει ένα όνομα και ακολουθείται αμέσως μετά από μια παρένθεση. Όμως υπάρχουν και άλλα στοιχεία που χαρακτηρίζουν μια μέθοδο όπως το είδος των δεδομένων που επιστρέφει στο πρόγραμμα και το είδος πρόσβασης που μας επιτρέπεται να έχουμε σε αυτήν. Στο δικό μας παράδειγμα η λέξη void σημαίνει ότι η Main μέθοδο δεν επιστρέφει καμία τιμή πίσω στο πρόγραμμα ενώ η λέξη static σημαίνει ότι δεν χρειάζεται να δημιουργήσουμε αντικείμενο από την κλάση Program για να μπορέσουμε να καλέσουμε την μέθοδο Main. Μπορούμε απευθείας να καλέσουμε την μέθοδο χρησιμοποιώντας το όνομα της κλάσης στην οποία ανήκει η μέθοδος και το όνομα της ίδιας της μεθόδου χωρισμένα με τελεία ( δηλαδή Program.Main()).
Είμαστε στο σημείο όπου έχουμε μια κλάση με το όνομα Program και περιέχει μια μέθοδο με το όνομα Main η οποία δίνει την ικανότητα στον κώδικα να εκτελεστεί. Όμως που ορίζεται η πληροφορία που θα εκτελέσει? Για να κάνουμε πιο ομαλή την εισαγωγή στο προγραμματισμό, συνηθίζεται να εκτελούμε αρχικά απλά μηνύματα που εμφανίζονται στο terminal παράθυρο μέσω των μεθόδων που βρίσκονται μέσα στην κλάση Console.
Ενώ όμως μιλάμε για την κλάση Console, γράφουμε και εκτελούμε την εντολή σαν System.Console. Οπότε η επόμενη σας ερώτηση λογικά θα είναι τι ορίζει ακριβώς το System και γιατί χρησιμοποιείται σε συνδυασμό με την κλάση Console? System είναι ένα namespace που περιέχει μια κλάση με το όνομα Console. Τι είναι όμως ένα namespace?
Αν πάμε λοιπόν στην αρχή του κώδικα μας, θα δούμε ότι κατά την αυτόματη δημιουργία του κώδικα, δημιουργήθηκε ένα namespace με το όνομα FirstExample. Ο ρόλος του namespace δεν είναι τίποτα άλλο από το να ομαδοποιεί κλάσεις (και άλλα στοιχεία της C# που θα μάθουμε αργότερα) κάτω από ένα όνομα. Οπότε ο ορισμός namespace FirstExample απλά δηλώνει ότι μέσα στα άγκιστρα του έχει οριστεί μια κλάση με το όνομα Program. Εάν είχαμε μια δεύτερη κλάση που άνηκε στο ίδιο namespace τότε θα μπορούσε η μια κλάση να βρει και να χρησιμοποιήσει την άλλη χωρίς καμία έξτρα δήλωση στον κώδικα. Για άλλη μια φορά αναφέρω το γεγονός ότι όλα αυτά θα τα αναλύσουμε αργότερα. Για τώρα απλά μας ενδιαφέρει να καταλάβουμε την βασική λειτουργία του namespace γιατί το .NET το χρησιμοποιεί σαν κύριο εργαλείο οργάνωσης των λειτουργιών του.
System.Console CLASS DESCRIPTION
Όπως έχουμε ήδη αναφέρει, το .NET χρησιμοποιεί την λογική του namespace για να οργανώσεις τις κλάσεις και τις βιβλιοθήκες που μας προσφέρει. Ένα από αυτά τα namespaces ονομάζεται System και περιέχει την κλάση Console μέσα στην οποία βρίσκουμε όλες εκείνες τις static μεθόδους που χρειαζόμαστε για να μπορέσουμε να γράψουμε ή να διαβάσουμε μηνύματα από το command prompt.
Τι είπαμε ότι αντιπροσωπεύει η λέξη static μπροστά από μια μέθοδο όταν αναφερόμασταν στην περιγραφή της Main? Είπαμε ότι την static μέθοδο μπορείς να την καλέσεις με το όνομα της κλάση στην οποία ανήκει και το όνομα της ίδιας της μεθόδου. Όταν λοιπόν γράφουμε την γραμμή κώδικα «Console.WriteLine("Hello, World!");στην πραγματικότητα καλούμε την static μέθοδο WriteLine( ) που ανήκει στην κλάση Console που με την σειρά της ανήκει σε ένα namespace με το όνομα System.
Μπορείτε να εξακριβώσετε και μόνοι σας αυτή τη θεωρία αν πατήσετε πατώντας το αριστερό Ctrl πλήκτρο στο πληκτρολόγιο σας και ταυτόχρονα κάνετε κλικ επάνω στη μέθοδο θα μεταφερθείτε στον ορισμό της μεθόδου μέσα στην κλάση Console.
Μπορείτε επίσης να ανεβείτε (scroll) με το ποντίκι σας στην αρχή της κλάσης για να βεβαιωθείτε για το όνομα του namespace και της class.
Αν μια κλάση ανήκει σε ένα namespace, τότε όταν την χρησιμοποιούμε, όπως για παράδειγμα την Console, δεν θα έπρεπε να είχαμε δηλώσει και το namespace από όπου προέρχεται αυτή η κλάση? Ναι, πολύ σωστά, θα έπρεπε να το δηλώσουμε, όμως μερικά βασικά namespaces όπως το System, το .NET τα φορτώνει εξ αρχής σε κάθε πρόγραμμα που δημιουργούμε οπότε δεν χρειάζεται να τα δηλώσουμε. Για αυτό ακριβώς το λόγο αντί να γράφουμε System.Console μπορούμε απλά να γράφουμε Console.
Τι ακριβώς όμως κάνουν οι μέθοδοι που περιέχονται μέσα στη class Console? Μας διευκολύνουν να διαβάζουμε μηνύματα από το command prompt ή να δείχνουμε μηνύματα στο command prompt. Ας δώσουμε μια σύντομη περιγραφή πριν τις χρησιμοποιήσουμε σε απλά παραδείγματα.
void Write( value ) – Δέχεται μια τιμή σαν παράμετρο και μας παρουσιάζει την ίδια τιμή στο Console παράθυρο του εκάστοτε λειτουργικού συστήματος.
void WriteLine( value ) – Δέχεται μια τιμή σαν παράμετρο αφού παρουσιάσει την ίδια τιμή στο Console παράθυρο του εκάστοτε λειτουργικού συστήματος, τοποθετεί τον cursor στην επόμενη γραμμή.
void ReadKey( ) – Περιμένει μέχρι ο χρήστης να πατήσει οποιοδήποτε πλήκτρο στο πληκτρολόγιο. Συνήθως το χρησιμοποιούμε όταν θέλουμε να σταματήσουμε για λίγο την εκτέλεση και περιμένουμε τον χρήστη να πατήσει κάποιο πλήκτρο.
void Clear( ) – Καθαρίζει το console παράθυρο από προηγούμενα αποτελέσματα.
string ReadLine( ) – Δέχεται λέξεις ή προτάσεις από τον χρήστη και μας τις δείχνει στο console παράθυρο. Η συγκεκριμένη μέθοδο πάντα μας επιστρέφει το αποτέλεσμα σαν χαρακτήρες (string) ακόμα και αν εισάγουμε αριθμούς.
EXAMPLES USING System.Console METHODS
Στο πρώτο μας παράδειγμα θα χρησιμοποιήσουμε την μέθοδο WriteLine τρεις φορές μέσα στο ίδιο πρόγραμμα για να εμφανίσουμε τρία διαφορετικά μηνύματα το κάθε ένα σε ξεχωριστή γραμμή. Παρατηρήστε ότι όταν στην C# θέλουμε να δηλώσουμε λέξεις ή προτάσεις σαν παραμέτρους πρέπει να τα περικλείουμε μέσα σε double quotes (“ “).
Program.cs
Output
Τωρα ας δοκιμάσουμε την Write μέθοδο η οποία διατηρεί τον cursor στην ίδια γραμμή μετά την εκτέλεση της. Για αυτό το λόγο, θα πρέπει να αφήσουμε κενά ανάμεσα στις λέξεις και τα double quotes γιατί το ένα αποτέλεσμα θα εμφανιστεί δίπλα στο άλλο και δεν θα μπορεί να διαβαστεί σωστά από τον τελικό χρήστη.
Program.cs
Output
Αν θέλετε να σταματήσετε προσωρινά την εκτέλεση του προγράμματος σας σε κάποιο σημείο και επιθυμείτε να συνεχίσετε αφού πρώτα πατήσετε οποιοδήποτε πλήκτρο στο πληκτρολόγιο σας τότε μπορείτε να χρησιμοποιήσετε την ReadKey() μέθoδο. Στην συγκεκριμένη μέθοδο δεν είναι ανάγκη να περάσουμε κάποιο string μέσα στην παρένθεση σαν παράμετρο.
Program.cs
Output
Στο επόμενο και τελευταίο παράδειγμα μας, θα δείξουμε πως η μέθοδος Clear( ) μπορεί να καθαρίσει την οθόνη από μηνύματα που έχουν ήδη εμφανιστεί.
Output
Στο σημερινό δωρεάν μάθημα C# εξοικειωθήκαμε με την έννοια του namespace, της κλάσης και της Main μεθόδου , και είδαμε πρακτικά με παραδείγματα πως μπορούμε να χρησιμοποιήσουμε τις static μεθόδους που βρίσκονται μέσα στην κλάση Console. Σχεδόν σε όλες αυτές τις έννοιες θα γυρίσουμε πίσω με περισσότερη θεωρία και βαθύτερη ανάλυση. Για τώρα όμως, γνωρίζουμε αρκετά για να καταλάβουμε που τοποθετούμε τον κώδικα που είναι προς εκτέλεση και ποιος είναι πεύθυνος για αυτή την ενέργεια
ΕΙΣΗΓΗΤΗΣ
Μιχάλης Κασάπογλου
Ο Μιχάλης Κασάπογλου, είναι ένας από τους πιο έμπειρους τεχνικούς εκπαιδευτές στον χώρο του προγραμματισμού με πάνω από 20 χρόνια εμπειρία. Έχει εργαστεί σαν IT Operations Manager, Senior Programmer, και Training Team Leader ενώ κατέχει και αρκετές πιστοποιήσεις που καλύπτουν ένα μεγάλο φάσμα τεχνολογιών στο προγραμματισμό, σε βάσεις δεδομένων και cloud. Στον ελεύθερο του χρόνο διατηρεί ένα τεχνολογικό blog στο οποίο θα βρείτε αρκετά δωρεάν μαθήματα προγραμματισμού για αρχάριους.