Dân IT cũng không còn xa lạ gì với 2 thuật ngữ tham số và đối số. Tuy nhiên, không phải bất kỳ lập trình viên nào cũng phân biệt được sự khác nhau giữa tham số và đối số là gì.
Nội dung bài viết
Đối số là gì?
Đối Số (Argument) là giá trị truyền vào khi gọi hàm
Đối số là một giá trị thực tế được truyền từ người gọi đến hàm khi thực hiện lệnh gọi hàm: Các giá trị này thường là nguồn của hàm yêu cầu các đối số trong quá trình thực hiện. Những giá trị này được gán cho các biến số trong định nghĩa của hàm được gọi. Loại của các giá trị được truyền vào hàm giống với loại của các biến được xác định trong định nghĩa hàm. Chúng còn được gọi là đối số thực tế hay tham số thực tế.
Ghi nhớ: Đối số của hàm (function argument) là giá trị thực tế truyền vào tham số khi gọi hàm.
Tham số là gì?
Tham Số (Parameter) được định nghĩa trong hàm
Ví dụ: Ta có một hàm JavaScript có tên là hello và được định nghĩa như sau:
function hello(name) {alert(“Xin chào, ” + name);}
Lúc này, ta nói hàm hello này có một tham số là name.
Tham số được gọi là các biến được xác định trong một hàm (function declaration) hoặc định nghĩa hàm. Những biến này được sử dụng để nhận các đối số được truyền trong quá trình gọi hàm. Các tham số trong nguyên mẫu của hàm được áp dụng với quá trình thực thi hàm mà nó được định nghĩa. Chúng còn được gọi là đối số chính thức hay tham số chính thức.
Ghi nhớ: Tham số của hàm (function parameter) là biến số được định nghĩa trong hàm.
Sự khác nhau giữa Đối số và Tham số
Đối số | Tham số |
Các giá trị được truyền trong quá trình khi một hàm được gọi chính là đối số. | Các giá trị xác định tại thời điểm nguyên mẫu hàm hay định nghĩa hàm được gọi là tham số. |
Đối số sử dụng trong câu lệnh gọi hàm, để gửi giá trị từ hàm gọi đến hàm nhận. | Tham số sử dụng trong tiêu đề của hàm được gọi để nhận giá trị từ chính các đối số. |
Trong quá trình gọi, mỗi đối số luôn được gán cho tham số trong định nghĩa hàm. | Tham số là các biến cục bộ được gắn giá trị của những đối số khi hàm được gọi. |
Đối số còn được gọi là Tham số thực tế | Tham số còn được gọi là Tham số chính thức |
Cách các tham số và đối số làm việc với nhau
Khi một hàm được gọi, tất cả các tham số của hàm đó được tạo dưới dạng các biến và giá trị của từng đối số được sao chép một cách trùng khớp vào tham số tương ứng. Quá trình này được gọi chung là gán giá trị vào (pass by value).
Ví dụ:
1
2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream>
// This function has two integer parameters, one named x, y // The values of x and y are passed in by the caller void printValues(int x, int y) { std::cout << x << ‘\n’; std::cout << y << ‘\n’; } int main() { printValues(6, 7); // This function call has two arguments, 6 and 7 return 0;} |
Khi hàm printValues được gọi với các đối số 6, 7, tham số x của printValues được tạo và khởi tạo với giá trị 6 còn tham số y của printValues được tạo và khởi tạo với giá trị 7.
Điều này dẫn đưa tới kết quả đầu ra:
1
2 |
6
7 |
Lưu ý: Số lượng đối số thường phải khớp với số lượng tham số hàm hoặc nếu không thì trình biên dịch sẽ đưa ra lỗi. Đối số được truyền cho một hàm, mà hàm này có thể là bất kỳ biểu thức hợp lệ nào (bởi về cơ bản, đối số chỉ là một trình khởi tạo giá trị cho tham số và các khởi tạo này có thể là bất kỳ biểu thức hợp lệ nào).
Sử dụng giá trị chuyển đối số là gì?
Trong bài toán trên, chúng ta có thể thấy rằng hàm num chỉ được sử dụng một lần, để vận chuyển giá trị trả về của hàm getValue FromUser đến đối số của lệnh gọi hàm printf Double.
Chúng ta có thể đơn giản hóa ví dụ trên theo cách như sau:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream>
int getValueFromUser() // this function now returns an integer value { std::cout << “Enter an integer: “; int input{}; std::cin >> input;
return input; // added return statement to return input back to the caller }
void printDouble(int value) { std::cout << value << ” doubled is: ” << value * 2 << ‘\n’; }
int main() { printDouble(getValueFromUser());
return 0; } |
Bây giờ, hãy sử dụng giá trị trả về của hàm get Value From User trực tiếp làm đối số cho hàm printf Double!
Mặc dù chương trình này ngắn gọn hơn, nhưng dễ dàng nhìn ra cú pháp rút gọn này có chút khó đọc. Nếu bạn có thể thoải mái hơn khi sử dụng biến để lưu giá trị của hàm, thì điều đó sẽ tốt hơn.
Cách để các tham số và giá trị trả về làm việc cùng nhau
Bằng cách sử dụng tham số và giá trị trả về, ta có thể tạo ra các hàm lấy dữ liệu làm đầu vào cho hàm khác, thực hiện các tính toán với nó và trả về giá trị cho người gọi.
Dưới đây là một ví dụ về hàm rất đơn giản, cộng hai số lại với nhau và sẽ trả về kết quả cho người gọi:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <iostream>
// add() takes two integers as parameters, and returns the result of their sum // The values of x; y are determined by the function that calls add() int add(int x, int y) { return x + y; }
// main takes no parameters int main() { std::cout << add(4, 5) << ‘\n’; // Arguments 4 and 5 are passed to function add() return 0; } |
Thực hiện chạy bắt đầu từ đầu hàm main. Khi add (4, 5) được thực hiện, hàm add được gọi, tham số x sẽ được khởi tạo với giá trị 4 và tham số y sẽ được khởi tạo với giá trị 5.
Câu lệnh return trong hàm add sẽ thực hiện (x + y) để tạo ra giá trị 9. Sau đó được trả về hàm main. Giá trị 9 này sau đó được gửi đến std :: cout để được in lên console.
Đầu ra: 9
Các tham số của hàm và giá trị trả về là những cơ chế chính mà theo đó, các hàm có thể được viết với mục đích sử dụng lại, vì nó cho phép chúng ta viết các hàm có thể thực hiện nhiều tác vụ và trả lại kết quả được truy xuất hoặc tính toán cho người gọi mà không cần xác định đầu vào hoặc đầu ra cụ thể như thế nào.
Bài viết đã vừa giải thích về đối số và tham số là gì, giúp dân lập trình phân biệt chính xác hai khái niệm dễ nhầm lẫn này. Trong quá trình viết code, hãy lưu ý đối số và tham số để sử dụng chúng hiệu quả và trả về kết quả chính xác nhất.