Call by Reference vs Call by Value: Difference and Comparison

Οι συναρτήσεις μπορούν να κληθούν με δύο τρόπους σε ένα πρόγραμμα. Η μία μέθοδος είναι με κλήση με αναφορά και η επόμενη μέθοδος είναι με κλήση ανά τιμή. Αυτές οι μέθοδοι μπορούν να διαφοροποιηθούν με βάση τον τύπο των τιμών που μεταβιβάζονται στις παραμέτρους.

Οι παράμετροι που χρησιμοποιούνται σε αυτά ονομάζονται πραγματικές παράμετροι. Χρησιμοποιούνται σε πολλές γλώσσες προγραμματισμού όπως η C, η C++ και η Java.

Βασικές τακτικές

  1. Η κλήση με αναφορά μεταβιβάζει τη διεύθυνση μνήμης μιας μεταβλητής σε μια συνάρτηση, ενώ η κλήση κατά τιμή στέλνει ένα αντίγραφο της τιμής της μεταβλητής.
  2. Με την κλήση με αναφορά, οι αλλαγές που γίνονται σε μια συνάρτηση επηρεάζουν άμεσα την αρχική μεταβλητή, ενώ η κλήση κατά τιμή αφήνει την αρχική μεταβλητή αμετάβλητη.
  3. Η κλήση μέσω αναφοράς είναι πιο αποδοτική στη μνήμη από την κλήση βάσει τιμής, αλλά μπορεί να οδηγήσει σε ανεπιθύμητες παρενέργειες εάν δεν διαχειριστεί προσεκτικά.

Call by Reference vs Call by Value

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

Call by Reference vs Call by Value

Η μέθοδος κλήσης με αναφορά χρησιμοποιείται για την πρόσβαση στο πραγματικό όρισμα που είναι η κλήση συνάρτησης. Αυτό σημαίνει ότι οι αλλαγές γίνονται στην παράμετρο μόνο αφού περάσει το όρισμα.

Χρησιμοποιεί την ίδια εκχώρηση μνήμης που χρησιμοποιείται στις πραγματικές παραμέτρους. Όταν καλεί μια συνάρτηση, αντί να αντιγράφει τις μεταβλητές, η ίδια η διεύθυνση χρησιμοποιείται στην κλήση με αναφορές.

Η κλήση κατά τιμή είναι μια υπορουτίνα που μεταβιβάζει τα πραγματικά δεδομένα των παραμέτρων που χρησιμοποιούνται στην υπορουτίνα.

Σε αυτήν τη μέθοδο, όταν καλείτε μια συνάρτηση, μεταβιβάζετε την τιμή στη μεταβλητή των ορισμάτων στην καλούμενη συνάρτηση, έτσι ώστε η συνάρτηση που καλείται να λειτουργεί στην τιμή. Αυτή η αλλαγή δεν θα αντικατοπτρίζεται στην καλούμενη συνάρτηση.

Συγκριτικός πίνακας

Παράμετροι σύγκρισηςΚλήση με αναφοράCall by Value
ΜεταβλητόςΗ μεταβλητή έχει περάσει.Διαβιβάζεται αντίγραφο της μεταβλητής.
Μεταβλητή τιμήΟι αλλαγές που θα γίνουν θα επηρεάσουν την εξωτερική λειτουργία.Οι αλλαγές που έγιναν δεν θα επηρεάσουν την εξωτερική λειτουργία.
Αρχική αξίαΕίναι τροποποιημένο.Δεν τροποποιείται.
ΑσφάλειαΤα πραγματικά επιχειρήματα δεν είναι ασφαλή.Τα πραγματικά επιχειρήματα είναι ασφαλή.
ΟρισμόςΧρησιμοποιεί μια ίδια μεταβλητή για το πέρασμα.Χρησιμοποιεί το αντίγραφο της μεταβλητής για μετάβαση.

Τι είναι το Call by Reference;

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

Διαβάστε επίσης:  Zoom, Meet, vs Teams: Difference and Comparison

Μπορούν να γίνουν τυχαίες τροποποιήσεις. Είναι σημαντικό να χειρίζεστε προσεκτικά τις λειτουργίες επιχειρημάτων. Βοηθά στην αποφυγή αλλαγών που γίνονται κατά λάθος.

Δεν θα δημιουργήσει διπλότυπα δεδομένα καθώς διατηρεί μόνο μία τιμή ώστε να μπορεί αποθηκεύσετε χώρο μνήμης. Εάν ένα άτομο διαβάσει τον κωδικό, δεν θα μπορεί να βρει εάν οι τιμές που έχουν τροποποιηθεί σε αυτόν τον κωδικό δεν είναι.

Σε αυτή τη μέθοδο, η εγγύηση εφ' όρου ζωής είναι ένα μεγάλο ζήτημα. Θα γίνει κίνδυνος αν δουλεύεις με προγράμματα πολλαπλών νημάτων και λάμδα. Για να δηλώσετε κλήση με αναφορά, θα πρέπει να δώσετε μια διεύθυνση.

Καλέστε με αναφορά όταν πρόκειται για προγραμματισμό C. Έχει άμεση πρόσβαση στα στοιχεία δεδομένων και εκτελεί τις λειτουργίες σε αυτά. Αλλά πρέπει να είστε προσεκτικοί καθώς εμπλέκονται δείκτες σε αυτό.

Εάν γνωρίζετε τη συγκεκριμένη κατάσταση του στοιχείου δεδομένων, τότε καλέστε με τη μέθοδο αναφοράς id perfect. Η τροποποίηση ενός αντιγράφου των δεδομένων δεν πρόκειται να κάνει τίποτα χρήσιμο

Η κλήση με αναφορά έχει κινδύνους που δεν υπάρχουν. Μπορείτε κατά λάθος να εκχωρήσετε ξανά μια τιμή σε έναν δείκτη και να τον χάσετε στη μνήμη.

Τι είναι το Call by Value;

Σε αυτή τη μέθοδο, οι αλλαγές που γίνονται μέσα στη συνάρτηση της παραμέτρου δεν θα έχουν καμία επίδραση στο όρισμα. Το πρόγραμμα Swap λειτουργεί ως το καλύτερο παράδειγμα προγράμματος κλήσης ανά αξία.

Εξηγεί ότι δεν γίνονται αλλαγές στην τιμή παρόλο που αλλάζουν μέσα στη συνάρτηση. Σε Ιάβα, η μέθοδος κλήσης κατά τιμή σημαίνει την κλήση της μεθόδου με την παράμετρό της ως τιμή.

Σε αυτή τη μέθοδο, οι παράμετροι αποθηκεύονται σε διαφορετικές θέσεις μνήμης. Εάν κάνετε οποιαδήποτε αλλαγή στο εσωτερικό της τοποθεσίας, η πραγματική παράμετρος του καλούντος δεν θα επηρεαστεί.

Αυτή η μέθοδος είναι καλύτερη επειδή η αρχική τιμή δεν έχει τροποποιηθεί. Αλλά δεν μπορείτε να κάνετε αλλαγές στις πραγματικές μεταβλητές. Τα πραγματικά ορίσματα θα είναι ασφαλή σε αυτήν τη μέθοδο, καθώς δεν μπορείτε να κάνετε αλλαγές κατά λάθος. 

Διαβάστε επίσης:  Apple Podcasts vs Stitcher: Difference and Comparison

Αυτή η μέθοδος γλυκά τα δεδομένα καθώς δεν αλλάζουν την αρχική μεταβλητή. Εδώ τα ορίσματα είναι μεταβλητές. Η αλλαγή μιας μεταβλητής σε ένα σώμα συνάρτησης δεν είναι άμεση. Οι σύνθετες εκφράσεις μπορούν να λειτουργήσουν ως επιχειρήματα μερικές φορές.

Δεν είναι αποδοτική μνήμης καθώς δημιουργούνται δύο αντίγραφα για την ίδια μεταβλητή. Εάν το μέγεθος των δεδομένων είναι μεγάλο, η μέθοδος κλήσης προς τιμή δεν θα τα αντιμετωπίσει. Σε αυτήν την περίπτωση, οι προγραμματιστές θα πρέπει να αναζητήσουν την κλήση με μέθοδο αναφοράς. 

Κύριες διαφορές μεταξύ κλήσης ανά αναφορά και κλήσης ανά τιμή

  1. Η αρχική τιμή τροποποιείται στην κλήση με αναφορά. Από την άλλη πλευρά, στην κλήση κατά τιμή η αρχική τιμή δεν τροποποιείται.
  2. Η κλήση μέσω αναφοράς υποστηρίζεται από γλώσσες προγραμματισμού, αλλά δεν είναι προεπιλεγμένη. Από την άλλη πλευρά, η κλήση κατά τιμή λειτουργεί ως προεπιλογή στις γλώσσες προγραμματισμού.
  3. Στο Call by reference, τυχόν αλλαγές που γίνονται στη μεταβλητή θα επηρεάσουν επίσης τη μεταβλητή εκτός της συνάρτησης. Από την άλλη πλευρά, στην κλήση κατά τιμή, τυχόν αλλαγές που πραγματοποιούνται στη μεταβλητή δεν θα επηρεάσουν τη μεταβλητή εκτός της συνάρτησης.
  4. Η κλήση με αναφορά σάς επιτρέπει να κάνετε αλλαγές στην τιμή της μεταβλητής. Από την άλλη πλευρά, το call-by-value δεν θα σας επιτρέψει να κάνετε αλλαγές.
  5. Στην κλήση με αναφορά, θα δοθεί μια διεύθυνση της τιμής. Αλλά στην κλήση με αναφορά, ένα αντίγραφο της τιμής θα μεταβιβαστεί. 
αναφορές
  1. https://www.jstor.org/stable/3857812
  2. ftp://prog.vub.ac.be/education/EMOOSE/ReuseSlides/merge-papers/Jackson&al1994-semanticDiff.pdf

Τελευταία ενημέρωση: 22 Ιουλίου, 2023

dot 1
Ένα αίτημα;

Έχω καταβάλει τόση προσπάθεια γράφοντας αυτήν την ανάρτηση ιστολογίου για να σας προσφέρω αξία. Θα είναι πολύ χρήσιμο για μένα, αν σκέφτεστε να το μοιραστείτε στα μέσα κοινωνικής δικτύωσης ή με τους φίλους/την οικογένειά σας. Η ΚΟΙΝΟΠΟΙΗΣΗ ΕΙΝΑΙ ♥️

Αφήστε ένα σχόλιο

Θέλετε να αποθηκεύσετε αυτό το άρθρο για αργότερα; Κάντε κλικ στην καρδιά στην κάτω δεξιά γωνία για αποθήκευση στο δικό σας πλαίσιο άρθρων!