Παράμετροι: Κλήση Μεθόδων με Τιμή και με Αναφορά

Παράμετροι: Κλήση Μεθόδων με Τιμή και με Αναφορά

Παράμετροι με Τιμή

Οι παράμετροι στις οποίες δεν προηγείται η δεσμευμένη λέξη Var αλλά ακολουθούνται από ένα συγκεκριμένο τύπο, καλούνται παράμετροι ΤΙΜΗΣ. Όταν μια παράμετρος περνάει με τιμή, στην διαδικασία ή συνάρτηση μεταβιβάζεται ένα ΑΝΤΙΓΡΑΦΟ της τιμής της πραγματικής παραμέτρου.

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

Στο πρόγραμμα που ακολουθεί παρουσιάζεται το πέρασμα παραμέτρων με τιμή :

 Program byvalue;
 Var
     global_var : Integer;
 Procedure proc(local_var : Integer);
 Begin
     Writeln('Τοπική μεταβλητή = ', local_var);
     local_var := 333;
     Writeln('Τοπική μεταβλητή = ', local_var);
 End;
 Begin { Κύριο πρόγραμμα }
     global_var := 5;
     proc(global_var);
     Writeln('Καθολική μεταβλητή = ', global_var);
 End.

Το αποτέλεσμα του προγράμματος θα είναι :

Tοπική μεταβλητή = 5
Tοπική μεταβλητή = 333
Kαθολική μεταβλητή = 5

Βλέπουμε ότι η μεταβλητή global_var δεν επηρεάζεται από την διαδικασία και ότι απλά δίνει την τιμή της στην local_var.

Παράμετροι με Αναφορά

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

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

 Program byref;
 Var
     var1, var2 : Integer;
 Procedure swap_vars(Var var1: Integer; Var var2 :Integer);
 Var
     temp : Integer;
 Begin
     temp := var1;
     var1 := var2;
     var2 := temp;
 End;
 Begin
     var1 := 55;
     var2 := 99;
     Writeln('Μεταβλητή1 = ', var1, 'Μεταβλητή2 = ', var2);
     swap_vars(var1, var2);
     Writeln('Μεταβλητή1 = ', var1, 'Μεταβλητή2 = ', var2);
 End.

Το αποτέλεσμα του προγράμματος θα είναι το εξής :

Μεταβλητή1 = 55 Μεταβλητή2 = 99
Μεταβλητή1 = 99 Μεταβλητή2 = 55

Όταν περνάμε μια παράμετρο με αναφορά, θα πρέπει να περνάμε την μεταβλητή και ΟΧΙ την τιμή της.
Συνίσταται να περνούν οι μεταβλητές με αναφορά μόνο όταν απαιτείται η διαδικασία να αλλάξει το περιεχόμενό τους.
Δηλαδή, η παράμετρος θα πρέπει να είναι όνομα μεταβλητής :
swap_vars(global_1, global_2);
και όχι όνομα σταθεράς :
swap_vars(55, 99);

Απάντηση

Αυτός ο ιστότοπος χρησιμοποιεί το Akismet για να μειώσει τα ανεπιθύμητα σχόλια. Μάθετε πώς υφίστανται επεξεργασία τα δεδομένα των σχολίων σας.