Khái niệm truyền tham số
Truyền tham số là phương pháp chuyển giao dữ liệu giữa các đơn vị chương trình nhằm đạt được các kết quả khác nhau khi gọi thực hiện chương trình con. Tham số có hai loại là tham số hình thức và tham số thực tế.
Tham số hình thức là một loại đặc biệt của ÐTDL cục bộ trong chương trình con. Nó được xác định lúc định nghĩa chương trình con. Khi định nghĩa chương trình con, phải xác định một danh sách các tham số hình thức cùng với khai báo kiểu tương ứng.
Tham số thực tế là một ÐTDL được chia sẻ cho chương trình con bằng cách truyền trong lời gọi thực hiện chương trình con.
Sự tương ứng giữa tham số tham số thực tế và tham số hình thức
Khi một chương trình con được gọi cùng với một danh sách các tham số thực tế thì đòi hỏi phải có một sự tương ứng giữa các tham số hình thức và tham số thực tế. Sự tương ứng này nhằm để xác định tham số thực tế nào được truyền cho tham số hình thức nào. Có hai phương pháp để xác định sự tương ứng này:
Tương ứng vị trí
Sự tương ứng giữa các cặp tham số thực tế và tham số hình thức đặt cơ sở trên sự tương ứng vị trí của chúng trong danh sách các tham số thực tế lúc gọi và danh sách các tham số hình thức trong định nghĩa chương trình con.
Hầu hết các ngôn ngữ đều dùng tương ứng vị trí và số lượng các tham số hình thức và tham số thực tế là bằng nhau do đó các cặp tương ứng là duy nhất. Tuy nhiên cũng có
những ngôn ngữ cho phép lời gọi chương trình con không cần cung cấp đủ số lượng tham số thực tế.
Tương ứng tên
Tham số hình thức bắt cặp với tham số thực tế được chỉ định trong lời gọi chương trình con. Ví dụ trong Ada có lời gọi chương trình con như sau:
SUB(y => B, x => 27).
Trong đó tham số thực tế B bắt cặp với tham số hình thức y và tham số thực tế 27 bắt cặp với tham số hình thức x.
Các phương pháp truyền tham số tham số
Nói chung một ngôn ngữ cung cấp nhiều phương pháp truyền tham số mà người lập trình có thể lựa chọn để xác định khai báo tham số hình thức lúc định nghĩa chương trình con và cung cấp các tham số thực tế lúc gọi thực hiện chương trình con. Các phương pháp truyền tham số chủ yếu bao gồm:
Truyền bằng giá trị (transmission by value)
• Tham số hình thức là tham số chỉ vào (IN-only parameters), tức là chỉ nhận giá trị vào cho chương trình con, không có nghĩa vụ trả kết quả về cho chương trình gọi. Tham số hình thức được xem như là mộtbiến cục bộcủa chương trình con và được cấp phát ô nhớ riêng.
• Tham số thực tế là mộtbiểu thức(là một biến, một hằng, một hàm hoặc là một biểu thức thực sự).
• Phương pháp thực hiện: Tại thời điểm gọi,giá trị của tham số thực tế được sao chép vào trong ô nhớ của tham số hình thức. Trong quá trình thực hiện chương trình con, mọi thao tác trên tham số hình thức là sự thao tác trên ô nhớ riêng của nó, không ảnh hưởng đến tham số thực tế.
• Khi chương trình con kết thúc, sự thay đổi giá trị của tham số hình thức,không làm ảnh hưởngđến giá trị của tham số thực tế.
Truyền tham chiếu (transmission by reference)
• Tham số hình thức là tham số vào ra (IN-OUT parameters), tức là nó có nghĩa vụ nhận giá trị vào cho chương trình con và trả kết quả về cho chương trình gọi. Tham số hình thức là mộtcon trỏ.
• Tham số thực tế phải làmột biến, tức là một ĐTDL có ô nhớ.
• Phương pháp thực hiện: Tại thời điểm gọi, con trỏ của tham số thực tế được sao chép cho tham số hình thức. Trong quá trình thực hiện chương trình con, mọi thao tác trên tham số hình thức là sự thao tác trênô nhớ của tham số thực tế.
• Khi chương trình con kết thúc, mọi thay đổi giá trị của tham số hình thức đều làm giá trị của tham số thực tếthay đổitheo.
Truyền bằng giá trị-kết quả (transmission by value-result)
• Tham số hình thức là tham số vào ra (IN-OUT parameters) nhưng là một biến cục bộ của chương trình con và được cấp phát ô nhớ riêng.
• Tham số thực tế phải làmột biến, tức là một ĐTDL có ô nhớ.
• Phương pháp thực hiện: Tại thời điểm gọi,giá trị của tham số thực tế được sao chép vào trong ô nhớ của tham số hình thức. Trong quá trình thực hiện chương trình con, mọi thao tác trên tham số hình thức là sự thao tác trên ô nhớ riêng của nó, không ảnh hưởng đến tham số thực tế.
• Khi chương trình con kết thúc, giá trị cuối cùng của tham số hình thức được sao chép vào ô nhớ của tham số thực tế.
Truyền bằng kết quả (transmission by result)
• Tham số hình thức là tham số chỉ ra (OUT-only parameters), tức là chỉ trả kết quả về cho chương trình gọi, không có nghĩa vụ nhận giá trị vào cho chương trình con. Tham số hình thức được xem như là mộtbiến cục bộcủa chương trình con và được cấp phát ô nhớ riêng.
• Tham số thực tế phải làmột biến, tức là một ĐTDL có ô nhớ.
• Phương pháp thực hiện: Giá trị của tham số thực tếkhông được sử dụngtrong chương trình con. Tham số hình thức có thể được gán trị như đối với một biến cục bộ. Trong quá trình thực hiện chương trình con, mọi thao tác trên tham số hình thức là sự thao tác trên ô nhớ riêng của nó, không ảnh hưởng đến tham số thực tế.
• Khi chương trình con kết thúc, giá trị cuối cùng của tham số hình thức được sao chép vào ô nhớ của tham số thực tế.
Ví dụ viết bằng ngôn ngữ giả Var m:integer; Procedure P(a:integer); Begin a:= 20; writeln(m); end;
begin m:=10; P(m); writeln(m); end.
Kết quả thực hiện chương trình đối với các phương pháp truyền tham số Truyền bằng giá trị Truyền tham chiếu Truyền bằng giá trị-kết quả Truyền bằngkết quả 1010 2020 1020 1020
CÂU HỎI ÔN TẬP
1. Nêu tên các phương pháp tương ứng giữa tham số thực tế và tham số hình thức khi thực hiện việc truyền tham số cho chương trình con.
2. Nêu tên các phương pháp truyền tham số cho chương trình con.