C# COMPLETE COURSE
ΕΝΟΤΗΤΑ 19 - METHODS
INTRODUCTION
Σε αυτό το δωρεάν μάθημα C# θα καταλάβουμε την έννοια της μεθόδου, πως ορίζεται, τι statements περιέχει σαν κώδικα και φυσικά πως εκτελείται. Αυτή είναι μόνο η αρχή όσο αφορά τις μεθόδους. Στις επόμενες ενότητες θα αναλύσουμε έννοιες όπως encapsulation και abstraction όπου οι μέθοδοι θα παίξουν ζωτικό ρόλο στη σωστή λειτουργία του κώδικα μας.
METHOD DEFINITION AND USAGE
Η δημιουργία μιας μεθόδου μέσα στο κώδικα μας έχει σαν σκοπό να ομαδοποιήσει πολλές μεμονωμένες λειτουργίες που μπορούν να εκτελεστούν μαζί καλώντας μόνο ένα όνομα - αυτό της μεθόδου.
Όταν η μέθοδος είναι μέρος του ορισμού μιας κλάσης, τότε αποκτάει μεγαλύτερη αξία, γιατί μας προσφέρει έναν ασφαλή τρόπο να αναθέσουμε τιμές στις μεταβλητές. Αυτό το σημείο θα σας γίνει εντέλως ξεκάθαρο όταν δημιουργήσουμε τό πρώτο μας παράδειγμα σε λίγο. Πριν όμως προχωρήσουμε στο παράδειγμα μας, ας δούμε ποιο είναι το γενικό συντακτικό μιας μεθόδου στη C#.
Τι χρειαζόμαστε λοιπόν για να ορίσουμε μια μέθοδο; Για αρχή πρέπει πρώτα να καθορίσουμε ένα όνομα το οποίο λογικά θα περιγράφει την πράξη που εκτελεί η μέθοδος. Αμέσως μετά από την μέθοδο ανοίγουμε ένα σετ από παρενθέσεις μέσα στις οποίες μπορούμε να ορίσουμε μεταβλητές και να περάσουμε τιμές στη μέθοδο αν και εφόσον το απαιτεί ο κώδικας μας. Κάθε μεταβλητή που ορίζουμε σαν parameter στη μέθοδο θα πρέπει να έχει και το ορισμό του data type όπως ορίζουμε σε κάθε μεταβλητή άλλωστε. Μπροστά από το όνομα της μεθόδου πρέπει να ορίσουμε το data type της τιμής που θα μας επιστρέφει η μέθοδο μετά το πέρας της εκτέλεσής της και τέλος το είδος της πρόσβασης που θα έχουν άλλα στοιχεία στην ίδια τη μέθοδο. Αν και ακούγεται σαν δύσκολη διαδικασία όταν την περιγράφουμε, στην πραγματικότητα είναι πολύ εύκολη και ακόμα ευκολότερη όταν δείτε το παράδειγμα. Ας βάλουμε όλα όσα αναφέραμε σε μια κοινή εικόνα, και θα συνεχίσουμε με μερικές ακόμη λεπτομέρειες πριν αναφερθούμε στο σενάριο μας.
Τα access modifiers είναι ακριβώς τα ίδια και λειτουργούν ακριβώς με την ίδια λογική όπως τα είχαμε καλύψει σε προηγούμενο δωρεάν μάθημα C# για τα fields. Ο παρακάτω πίνακας θα σας θυμίσει την θεωρία που είχαμε καλύψει όταν μιλούσαμε για τα access modifiers.
Τα modifiers (όπως static, partial, κτλ) είναι προαιρετικά και δεν απαιτούνται στη βασική σύνταξη της μεθόδου. Όμως είναι πάρα πολύ χρήσιμα και θα τα δούμε αναλυτικά ένα προς ένα σε μελλοντικά δωρεάν μαθήματα C#. Άλλωστε, τώρα που κάναμε την αρχή με τις μεθόδους, δεν πρόκειται να απομακρυνθούμε από αυτές και σχεδόν κάθε παράδειγμα που θα γράψουμε από εδώ και στο εξής θα περιλαμβάνει και ορισμούς μεθόδων.
PRACTICAL METHOD EXAMPLE
Ας γυρίσουμε τώρα πίσω στο παράδειγμα μας και ας θυμηθούμε την κλάση από την οποία δημιουργούσαμε όλα μας τα αντικείμενα.
Product.cs
Αν και η κλάση περιέχει όλα εκείνα τα fields που αρχικά χρειαζόμασταν για να δημιουργήσουμε αντικείμενα, τώρα έχουμε ένα καινούργιο αίτημα που θα πρέπει να ολοκληρώσουμε - θα πρέπει να υπολογίσουμε τον φόρο που αντιστοιχεί σε κάθε προιόν ανάλογα με το κόστος του.
Θα μπορούσαμε επίσης να καλύψουμε και τις περιπτώσεις όπου ο φόρος είναι 10% για κόστος προιόντος κάτω των 20000 ευρώ, ενώ όταν το κόστος ξεπερνάει τα 20000 τότε ο φόρος ανεβαίνει στα 12.5%.
Για να μπορέσουμε να ανταποκριθούμε σε αυτό το αίτημα, βλέπουμε ότι αρχικά θα χρειαστεί να ορίσουμε ένα νέο field με το όνομα tax στην κλάση. Όμως δεν μπορούμε να αναθέσουμε μια μόνιμη τιμή σε αυτό το field. Κάθε φορά θα πρέπει να διαβάζουμε την τιμή απο το cost του εκάστωστε αντικειμένου και αφού υπολογίσουμε το φόρο να αναθέσουμε την τιμή στο field tax. Καταλαβαίνετε λοιπόν πόσο χρήσιμη μπορεί να μας φανεί μια μέθοδος σε αυτό το σημείο γιατί απλά θα προγραμματιστεί για να εκτελεί αυτή ακριβώς τη διαδικασία.
Ας δούμε πρώτα πως ακριβώς είναι ο κώδικας της μεθόδου που θα προσθέσουμε στη κλάση και αμέσως μετά θα τον εξηγήσουμε.
Product.cs
Ορίζουμε λοιπόν μια μέθοδο με το όνομα CalculateTax μέσα στη κλάση Product. Αυτό αυτόματα σημαίνει ότι για να καλέσουμε την μέθοδο θα πρέπει πρώτα να δημιουργήσουμε ένα αντικείμενα (εκτός και αν η μέθοδος έχει οριστεί σαν static). Η μέθοδος όπως έχουμε ήδη αναφέρει πρέπει να ακολουθείται από ένα ζευγάρι παρενθέσεων μέσα στις οποίες μπορούμε να ορίσουμε parameters των οποίων οι τιμές θα χρησιμοποιθούν σε πράξεις που θα πραγματοποιηθούν μέσα στη μέθοδο. Στο δικό μας παράδειγμα όμως, δεν υπάρχει ανάγκη να ορίσουμε καμία παράμετρο οπότε αφήνουμε τις παρενθέσεις κενές. Όταν εκτελεστεί η μέθοδο δεν περιμένουμε να μας επιστρέψει κάτι μέσα στο κώδικα μας. Αντί αυτού απλά θα αναθέσει μια τιμή στη μετβλητή tax. Μέσα στη μέθοδο, ορίζουμε μια τοπική μεταβλητή με το όνομα t στην οποία αναθέτουμε το αποτέλεσμα υπολογισμού του φόρου. Όταν ολοκληρωθεί η πράξη, αναθέτουμε την τιμή του t στο filed tax. Η μέθοδος, επειδή είναι ορισμένη μέσα στη κλάση, έχει πρόσβαση σε όλα τα fields.
Σε αυτό το σημείο λοιπόν, έχουμε ολοκληρώσει τον ορισμό της μεθόδου, όμως η μέθοδος δεν πρόκειται να εκτελεστεί αυτόματα. Θα πρέπει να την καλέσουμε για να αρχίσει η εκτέλεσή της. Γυρίζουμε λοιπόν τώρα πίσω στο κώδικα της κλάση Program μέσα στον οποίο έχουμε δημιουργήσει ήδη δύο αντικείμενα. Για κάθε ένα από τα αντικείμενα θα καλέσουμε την μέθοδο CalculateTax( ). Επίσης θα προσθέσουμε μια ακόμη γραμμή στο ouput έτσι ώστε να παρουσιάσουμε στην οθόνη την τιμή που περιέχει η μεταβλητή tax.
Prοgram.cs
Output
ΕΙΣΗΓΗΤΗΣ
Μιχάλης Κασάπογλου
Ο Μιχάλης Κασάπογλου, είναι ένας από τους πιο έμπειρους τεχνικούς εκπαιδευτές στον χώρο του προγραμματισμού με πάνω από 20 χρόνια εμπειρία. Έχει εργαστεί σαν IT Operations Manager, Senior Programmer, και Training Team Leader ενώ κατέχει και αρκετές πιστοποιήσεις που καλύπτουν ένα μεγάλο φάσμα τεχνολογιών στο προγραμματισμό, σε βάσεις δεδομένων και cloud. Στον ελεύθερο του χρόνο διατηρεί ένα τεχνολογικό blog στο οποίο θα βρείτε αρκετά δωρεάν μαθήματα προγραμματισμού για αρχάριους.