Trong ngôn ngữ lập trình, các hàm có thể được gọi theo hai cách: được gọi là Gọi theo Giá trị và Gọi theo Tham chiếu.
Trong hướng dẫn này, bạn sẽ học,
- Gọi theo phương pháp giá trị là gì?
- Gọi theo phương pháp Tham chiếu là gì?
- Ví dụ về cuộc gọi theo phương thức giá trị
- Ví dụ về cuộc gọi theo phương thức tham chiếu
- Gọi theo giá trị so với Gọi theo tham chiếu
- Ưu điểm của việc sử dụng phương pháp Gọi theo giá trị
- Ưu điểm của việc sử dụng Gọi bằng phương pháp tham chiếu
- Nhược điểm của việc sử dụng phương pháp Gọi theo giá trị
- Nhược điểm của việc sử dụng Gọi bằng phương pháp tham chiếu
Phương pháp Gọi theo Giá trị là gì?
Phương thức call by value sao chép giá trị của một đối số vào tham số chính thức của hàm đó. Do đó, các thay đổi được thực hiện đối với tham số của hàm chính không ảnh hưởng đến đối số.
Trong phương thức truyền tham số này, các giá trị của tham số thực được sao chép sang tham số chính thức của hàm và các tham số được lưu trữ trong các vị trí bộ nhớ khác nhau. Vì vậy, bất kỳ thay đổi nào được thực hiện bên trong các chức năng không được phản ánh trong các tham số thực tế của trình gọi.
SỰ KHÁC BIỆT CHÍNH
- Trong Gọi theo phương thức giá trị, giá trị gốc không được sửa đổi trong khi trong Gọi theo phương thức tham chiếu, giá trị gốc được sửa đổi.
- Trong Gọi theo giá trị, một bản sao của biến được truyền trong khi trong Gọi theo tham chiếu, bản thân một biến được truyền.
- Trong Gọi theo giá trị, các đối số thực và chính thức sẽ được tạo ở các vị trí bộ nhớ khác nhau trong khi trong Gọi theo tham chiếu, các đối số thực và chính thức sẽ được tạo ở cùng một vị trí bộ nhớ.
- Gọi theo giá trị là phương thức mặc định trong các ngôn ngữ lập trình như C ++, PHP, Visual Basic NET và C # trong khi Gọi bằng tham chiếu chỉ được hỗ trợ ngôn ngữ Java.
- Gọi theo Giá trị, các biến được truyền bằng một phương thức đơn giản trong khi Gọi bằng Tham chiếu, con trỏ được yêu cầu để lưu trữ địa chỉ của các biến.
Gọi theo phương pháp Tham chiếu là gì?
Gọi bằng phương thức tham chiếu sao chép địa chỉ của một đối số vào tham số chính thức. Trong phương thức này, địa chỉ được sử dụng để truy cập đối số thực sự được sử dụng trong lệnh gọi hàm. Nó có nghĩa là các thay đổi được thực hiện trong tham số sẽ làm thay đổi đối số truyền.
Trong phương pháp này, việc cấp phát bộ nhớ giống với các tham số thực tế. Tất cả các hoạt động trong hàm được thực hiện trên giá trị được lưu trữ tại địa chỉ của tham số thực và giá trị đã sửa đổi sẽ được lưu trữ tại cùng một địa chỉ.
Ví dụ về phương pháp Gọi theo giá trị
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;}
Đầu ra:
before function calling 10value is 11after function calling 1-0
Bởi vì biến được khai báo 'a'in main () khác với biến' x 'trong increment (). Trong chương trình này chỉ có các tên biến tương tự nhau, nhưng địa chỉ bộ nhớ của chúng khác nhau và được lưu trữ ở các vị trí bộ nhớ khác nhau.
Ví dụ về một cuộc gọi theo phương pháp tham chiếu
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;}
Đầu ra:
Before call Value of a =10After call Value of a =11
Vì biến được khai báo 'a' in đang tham chiếu / trỏ đến biến 'a' trong main (). Ở đây tên biến là khác nhau, nhưng cả hai đều trỏ / tham chiếu đến các vị trí địa chỉ bộ nhớ giống nhau.
Gọi theo giá trị so với Gọi theo tham chiếu
Thông số | Gọi theo giá trị | Gọi bằng cách tham khảo |
---|---|---|
Định nghĩa | Trong khi gọi một hàm, khi bạn chuyển các giá trị bằng cách sao chép các biến, nó được gọi là "Gọi theo giá trị". | Trong khi gọi một hàm, trong ngôn ngữ lập trình thay vì sao chép giá trị của các biến, địa chỉ của các biến được sử dụng, nó được gọi là "Call By References. |
Tranh luận | Trong phương thức này, một bản sao của biến được chuyển. | Trong phương thức này, một biến chính nó được truyền vào. |
Hiệu ứng | Các thay đổi được thực hiện trong bản sao của biến không bao giờ sửa đổi giá trị của biến bên ngoài hàm. | Thay đổi trong biến cũng ảnh hưởng đến giá trị của biến ngoài hàm. |
Thay đổi giá trị | Không cho phép bạn thực hiện bất kỳ thay đổi nào trong các biến thực tế. | Cho phép bạn thực hiện các thay đổi trong giá trị của các biến bằng cách sử dụng các lệnh gọi hàm. |
Truyền biến | Giá trị của các biến được chuyển bằng một phương thức đơn giản. | Biến con trỏ được yêu cầu để lưu trữ địa chỉ của các biến. |
Sửa đổi giá trị | Giá trị ban đầu không được sửa đổi. | Giá trị ban đầu được sửa đổi. |
Vị trí bộ nhớ | Các đối số thực tế và chính thức sẽ được tạo ở vị trí bộ nhớ khác nhau | Các đối số thực tế và chính thức sẽ được tạo trong cùng một vị trí bộ nhớ |
Sự an toàn | Các đối số thực tế vẫn an toàn vì chúng không thể được sửa đổi một cách tình cờ. | Các lập luận thực tế không An toàn. Chúng có thể bị sửa đổi một cách vô tình, vì vậy bạn cần phải xử lý các thao tác đối số một cách cẩn thận. |
Mặc định | Mặc định trong nhiều ngôn ngữ lập trình như C ++. PHP. Visual Basic NET và C #. | Nó được hỗ trợ bởi hầu hết các ngôn ngữ lập trình như JAVA, nhưng không phải là mặc định. |
Ưu điểm của việc sử dụng phương pháp Gọi theo giá trị
Ưu điểm / lợi ích của cuộc gọi theo phương pháp giá trị:
- Phương thức không thay đổi biến ban đầu, vì vậy nó đang bảo toàn dữ liệu.
- Bất cứ khi nào một hàm được gọi nó, không bao giờ ảnh hưởng đến nội dung thực tế của các đối số thực tế.
- Giá trị của các đối số thực tế được truyền cho các đối số chính thức, vì vậy bất kỳ thay đổi nào được thực hiện trong đối số chính thức không ảnh hưởng đến các trường hợp thực.
Ưu điểm của việc sử dụng Gọi bằng phương pháp tham chiếu
Ưu điểm của việc sử dụng cuộc gọi bằng phương pháp tham chiếu:
- Hàm có thể thay đổi giá trị của đối số, điều này khá hữu ích.
- Nó không tạo dữ liệu trùng lặp chỉ giữ một giá trị giúp bạn tiết kiệm dung lượng bộ nhớ.
- Trong phương pháp này, không có bản sao của đối số được thực hiện. Do đó nó được xử lý rất nhanh.
- Giúp bạn tránh những thay đổi được thực hiện do nhầm lẫn
- Một người đọc mã không bao giờ biết rằng giá trị có thể được sửa đổi trong hàm.
Nhược điểm của việc sử dụng phương pháp Gọi theo giá trị
Dưới đây là những nhược điểm / nhược điểm chính của cuộc gọi theo phương thức giá trị:
- Các thay đổi đối với các tham số thực tế cũng có thể sửa đổi các biến đối số tương ứng
- Trong phương pháp này, các đối số phải là biến.
- Bạn không thể thay đổi trực tiếp một biến trong thân hàm.
- Đôi khi đối số có thể là các biểu thức phức tạp
- Có hai bản sao được tạo cho cùng một biến không hiệu quả về bộ nhớ.
Nhược điểm của việc sử dụng Gọi bằng phương pháp tham chiếu
Dưới đây là nhược điểm chính của việc sử dụng cuộc gọi bằng phương pháp tham chiếu:
- Đảm bảo không null mạnh mẽ. Một hàm nhận tham chiếu cần phải đảm bảo rằng đầu vào không phải là null. Do đó, không cần kiểm tra null.
- Chuyển qua tham chiếu làm cho hàm không thuần túy về mặt lý thuyết.
- Bảo đảm trọn đời là một vấn đề lớn đối với tài liệu tham khảo. Điều này đặc biệt nguy hiểm khi làm việc với lambdas và các chương trình đa luồng.