Στις γλώσσες προγραμματισμού, οι συναρτήσεις μπορούν να επικαλεσθούν με δύο τρόπους: η οποία είναι γνωστή ως Call by Value και Call by Reference.
Σε αυτό το σεμινάριο, θα μάθετε,
- Τι είναι η μέθοδος κλήσης με αξία;
- Τι είναι η μέθοδος Call by Reference;
- Παράδειγμα μεθόδου κλήσης με αξία
- Παράδειγμα κλήσης με μέθοδο αναφοράς
- Κλήση με αξία έναντι Κλήση με αναφορά
- Πλεονεκτήματα της μεθόδου Call by value
- Πλεονεκτήματα της χρήσης κλήσης με μέθοδο αναφοράς
- Μειονεκτήματα της μεθόδου Call by value
- Μειονεκτήματα της χρήσης κλήσης με μέθοδο αναφοράς
Τι είναι η μέθοδος Call by Value;
Η μέθοδος Call by Value αντιγράφει την τιμή ενός ορίσματος στην τυπική παράμετρο αυτής της συνάρτησης. Επομένως, οι αλλαγές που έγιναν στην παράμετρο της κύριας συνάρτησης δεν επηρεάζουν το όρισμα.
Σε αυτήν τη μέθοδο μετάδοσης παραμέτρων, οι τιμές των πραγματικών παραμέτρων αντιγράφονται στις τυπικές παραμέτρους της λειτουργίας και οι παράμετροι αποθηκεύονται σε διαφορετικές θέσεις μνήμης. Έτσι, τυχόν αλλαγές που γίνονται μέσα στις λειτουργίες δεν αντικατοπτρίζονται στις πραγματικές παραμέτρους του καλούντος.
ΒΑΣΙΚΗ ΔΙΑΦΟΡΑ
- Στη μέθοδο Call by value, η αρχική τιμή δεν τροποποιείται ενώ, στη μέθοδο Call by value, η αρχική τιμή τροποποιείται.
- Στο Call by value, διαβιβάζεται ένα αντίγραφο της μεταβλητής ενώ στο Call by referensi, μεταδίδεται η ίδια μια μεταβλητή.
- Στο Call by value, τα πραγματικά και τα επίσημα ορίσματα θα δημιουργηθούν σε διαφορετικές τοποθεσίες μνήμης, ενώ στο Call by referensi, τα πραγματικά και τα επίσημα ορίσματα θα δημιουργηθούν στην ίδια θέση μνήμης.
- Η κλήση ανά τιμή είναι η προεπιλεγμένη μέθοδος σε γλώσσες προγραμματισμού όπως C ++, PHP, Visual Basic NET και C #, ενώ η Κλήση με αναφορά υποστηρίζεται μόνο σε γλώσσα Java.
- Call by Value, οι μεταβλητές περνούν χρησιμοποιώντας μια απλή μέθοδο ενώ Call by Reference, οι δείκτες απαιτούνται για την αποθήκευση της διεύθυνσης των μεταβλητών.
Τι είναι η μέθοδος Call by Reference;
Η μέθοδος κλήσης με αναφορά αντιγράφει τη διεύθυνση ενός ορίσματος στην τυπική παράμετρο. Σε αυτήν τη μέθοδο, η διεύθυνση χρησιμοποιείται για την πρόσβαση στο πραγματικό όρισμα που χρησιμοποιείται στην κλήση συνάρτησης. Αυτό σημαίνει ότι οι αλλαγές που έγιναν στην παράμετρο αλλάζουν το όρισμα που περνά.
Σε αυτήν τη μέθοδο, η κατανομή μνήμης είναι ίδια με τις πραγματικές παραμέτρους. Όλη η λειτουργία στη συνάρτηση εκτελείται στην τιμή που είναι αποθηκευμένη στη διεύθυνση της πραγματικής παραμέτρου και η τροποποιημένη τιμή θα αποθηκευτεί στην ίδια διεύθυνση.
Παράδειγμα μεθόδου Call by Value
void main() {int a = 10,void increment(int);Cout << "before function calling" << a;increment(a);Cout << "after function calling" << a;getch();void increment(int x) {int x = x + 1;Cout << "value is" << x;}
Παραγωγή:
before function calling 10value is 11after function calling 1-0
Επειδή η μεταβλητή που δηλώνεται 'a'in main () είναι διαφορετική από τη μεταβλητή' x 'στο increment (). Σε αυτό το πρόγραμμα μόνο τα μεταβλητά ονόματα είναι παρόμοια, αλλά η διεύθυνση μνήμης τους είναι διαφορετική και αποθηκεύεται σε διαφορετικές θέσεις μνήμης.
Παράδειγμα μεθόδου κλήσης με αναφορά
Public static void(string args[]) {int a = 10;System.out.println("Before call Value of a = ", a);Void increment();System.out.println("After call Value of a = ", a);}Void increment(int x) {int x = x + 1;}
Παραγωγή:
Before call Value of a =10After call Value of a =11
Επειδή η μεταβλητή που δηλώνεται «a» είναι αναφορά / δείχνοντας τη μεταβλητή «a» στο κύριο (). Εδώ το όνομα της μεταβλητής είναι διαφορετικό, αλλά και τα δύο δείχνουν / αναφέρονται σε ίδιες τοποθεσίες διευθύνσεων μνήμης.
Κλήση με αξία έναντι Κλήση με αναφορά
Παράμετροι | Κλήση ανά αξία | Καλέστε με αναφορά |
---|---|---|
Ορισμός | Κατά την κλήση μιας συνάρτησης, όταν μεταβιβάζετε τιμές αντιγράφοντας μεταβλητές, είναι γνωστή ως "Call By Values". | Κατά την κλήση μιας συνάρτησης, στη γλώσσα προγραμματισμού αντί της αντιγραφής των τιμών των μεταβλητών, χρησιμοποιείται η διεύθυνση των μεταβλητών, είναι γνωστή ως "Call By References. |
Επιχειρήματα | Σε αυτήν τη μέθοδο, διαβιβάζεται ένα αντίγραφο της μεταβλητής. | Σε αυτήν τη μέθοδο, μεταβιβάζεται η ίδια μια μεταβλητή. |
Αποτέλεσμα | Οι αλλαγές που γίνονται σε ένα αντίγραφο της μεταβλητής δεν τροποποιούν ποτέ την τιμή της μεταβλητής εκτός της συνάρτησης. | Η αλλαγή στη μεταβλητή επηρεάζει επίσης την τιμή της μεταβλητής εκτός της συνάρτησης. |
Τροποποίηση της αξίας | Δεν σας επιτρέπει να κάνετε αλλαγές στις πραγματικές μεταβλητές. | Σας επιτρέπει να κάνετε αλλαγές στις τιμές των μεταβλητών χρησιμοποιώντας κλήσεις συνάρτησης. |
Μετάβαση της μεταβλητής | Οι τιμές των μεταβλητών περνούν χρησιμοποιώντας μια απλή μέθοδο. | Απαιτούνται μεταβλητές δείκτη για την αποθήκευση της διεύθυνσης των μεταβλητών. |
Τροποποίηση αξίας | Η αρχική τιμή δεν τροποποιήθηκε. | Η αρχική τιμή τροποποιείται. |
Τοποθεσία μνήμης | Τα πραγματικά και επίσημα επιχειρήματα θα δημιουργηθούν σε διαφορετική θέση μνήμης | Τα πραγματικά και επίσημα επιχειρήματα θα δημιουργηθούν στην ίδια θέση μνήμης |
Ασφάλεια | Τα πραγματικά επιχειρήματα παραμένουν ασφαλή καθώς δεν μπορούν να τροποποιηθούν κατά λάθος. | Τα πραγματικά επιχειρήματα δεν είναι ασφαλή. Μπορούν να τροποποιηθούν κατά λάθος, οπότε πρέπει να χειριστείτε προσεκτικά τις λειτουργίες επιχειρημάτων. |
Προκαθορισμένο | Προεπιλογή σε πολλές γλώσσες προγραμματισμού όπως το C ++. PHP. Visual Basic NET και C #. | Υποστηρίζεται από τις περισσότερες γλώσσες προγραμματισμού όπως η JAVA, αλλά όχι ως προεπιλογή. |
Πλεονεκτήματα της μεθόδου Call by value
Πλεονεκτήματα / οφέλη μιας μεθόδου κλήσης με αξία:
- Η μέθοδος δεν αλλάζει την αρχική μεταβλητή, επομένως διατηρεί δεδομένα.
- Κάθε φορά που καλείται μια συνάρτηση, μην επηρεάζετε ποτέ το πραγματικό περιεχόμενο των πραγματικών επιχειρημάτων.
- Η αξία των πραγματικών επιχειρημάτων μεταβιβάστηκε στα επίσημα επιχειρήματα, επομένως τυχόν αλλαγές που έγιναν στο επίσημο επιχείρημα δεν επηρεάζουν τις πραγματικές περιπτώσεις.
Πλεονεκτήματα της χρήσης κλήσης με μέθοδο αναφοράς
Πλεονεκτήματα της χρήσης κλήσης με μέθοδο αναφοράς:
- Η συνάρτηση μπορεί να αλλάξει την τιμή του ορίσματος, το οποίο είναι αρκετά χρήσιμο.
- Δεν δημιουργεί διπλά δεδομένα για τη διατήρηση μόνο μιας τιμής που σας βοηθά να εξοικονομήσετε χώρο μνήμης.
- Σε αυτήν τη μέθοδο, δεν υπάρχει αντίγραφο του επιχειρήματος. Επομένως επεξεργάζεται πολύ γρήγορα.
- Σας βοηθά να αποφύγετε τις αλλαγές που γίνονται κατά λάθος
- Ένα άτομο που διαβάζει τον κωδικό δεν ξέρει ποτέ ότι η τιμή μπορεί να τροποποιηθεί στη συνάρτηση.
Μειονεκτήματα της μεθόδου Call by value
Εδώ, είναι τα κύρια μειονεκτήματα / μειονεκτήματα μιας μεθόδου κλήσης με αξία:
- Οι αλλαγές στις πραγματικές παραμέτρους μπορούν επίσης να τροποποιήσουν τις αντίστοιχες μεταβλητές ορίσματος
- Σε αυτήν τη μέθοδο, τα ορίσματα πρέπει να είναι μεταβλητές.
- Δεν μπορείτε να αλλάξετε άμεσα μια μεταβλητή σε ένα σώμα λειτουργίας.
- Κάποτε το επιχείρημα μπορεί να είναι σύνθετες εκφράσεις
- Υπάρχουν δύο αντίγραφα που δημιουργήθηκαν για την ίδια μεταβλητή που δεν είναι αποδοτική στη μνήμη.
Μειονεκτήματα της χρήσης κλήσης με μέθοδο αναφοράς
Εδώ, είναι σημαντικά μειονεκτήματα της χρήσης κλήσης με μέθοδο αναφοράς:
- Ισχυρή μη μηδενική εγγύηση. Μια συνάρτηση που λαμβάνει μια αναφορά πρέπει να βεβαιωθεί ότι η είσοδος δεν είναι μηδενική. Επομένως, δεν χρειάζεται να γίνει έλεγχος null.
- Το πέρασμα με αναφορά κάνει τη λειτουργία να μην είναι καθαρά θεωρητική.
- Η εγγύηση εφ 'όρου ζωής είναι ένα μεγάλο ζήτημα με αναφορές. Αυτό είναι ιδιαίτερα επικίνδυνο όταν εργάζεστε με λάμδα και προγράμματα πολλαπλών νημάτων.