Sự khác biệt giữa một đối số và một tham số là gì?


718

Khi nói bằng lời về các phương thức, tôi không bao giờ chắc chắn nên sử dụng đối số hoặc tham số từ hay cái gì khác. Dù bằng cách nào thì người khác cũng hiểu ý tôi, nhưng điều gì là đúng và lịch sử của các điều khoản là gì?

Tôi là một lập trình viên C #, nhưng tôi cũng tự hỏi liệu mọi người có sử dụng các thuật ngữ khác nhau trong các ngôn ngữ khác nhau không.

Đối với hồ sơ tôi tự học mà không có nền tảng về Khoa học Máy tính. (Xin đừng bảo tôi đọc Code Complete vì tôi đang hỏi điều này vì lợi ích của những người khác, những người chưa có bản sao của cuốn sách tuyệt vời của Steve McConnell .)

Tóm lược

Sự đồng thuận chung dường như là ổn khi sử dụng các thuật ngữ này thay thế cho nhau trong môi trường nhóm. Ngoại trừ có lẽ khi bạn xác định thuật ngữ chính xác; sau đó bạn cũng có thể sử dụng " đối số / tham số chính thức " và " đối số / tham số thực tế " để định hướng.


9
Tôi sử dụng chúng thay thế cho nhau .. chưa ai cười tôi cả .. 'hàm này có 4 đối số .. hàm này có 4 tham số.' Âm thanh giống nhau.
Gishu

54
Bạn có thể sử dụng chúng thay thế cho nhau trừ khi bạn đang cố gắng mô tả cách các tham số hoạt động và cách các đối số được thông qua, v.v. Vào thời điểm đó, thuật ngữ chính xác (đôi khi có thể gây khó chịu).
Jon Skeet

2
Có ít nhất hai phiên bản không đóng, không biết ngôn ngữ của câu hỏi này: stackoverflow.com/questions/3176310/ và và stackoverflow.com/questions/427653/argument-or-parameter . Ngoài ra còn có một phiên bản C # khác của câu hỏi này; Tôi đã yêu cầu hợp nhất.
Pops

1
Vui mừng khi bạn đề cập đến Steve McConnell. Tôi đã biết thêm về một anh chàng biết nghề thủ công phần mềm cùng với Robert C. Martin.
RBT

3
Tôi nghĩ bất kể bạn có ở trong môi trường chính thức hay không, bạn nên cố gắng sử dụng các thuật ngữ chính xác. Tôi nghĩ nó khá đơn giản. Khi bạn gọi một phương thức, bạn truyền vào các đối số. Khi bạn xác định phương thức, bạn đang xác định các tham số sẽ lấy các đối số từ lệnh gọi phương thức / hàm. đối số - một biến độc lập liên quan đến một hàm và xác định giá trị của hàm. tham số - một giới hạn hoặc ranh giới xác định phạm vi của một quá trình hoặc hoạt động cụ thể.
jsquaredz

Câu trả lời:


906

Một tham số là một biến trong định nghĩa phương thức. Khi một phương thức được gọi, các đối số là dữ liệu bạn truyền vào các tham số của phương thức.

public void MyMethod(string myParam) { }

...

string myArg1 = "this is my argument";
myClass.MyMethod(myArg1);

196
Một ghi nhớ ám chỉ có thể giúp: Đối số là thực tế. ;)
thSoft

8
Câu trả lời đề cập rằng "Tham số là một biến trong định nghĩa phương thức" nhưng có thể tốt hơn để nói "khai báo phương thức" [nếu ai đó đang phân biệt giữa 'khai báo' và 'định nghĩa']
nandan

110
"Bạn xác định tham số và bạn tạo đối số."
Greg M. Krsak

5
tham số => khi chúng ta xác định hàm, đối số => khi chúng ta gọi phương thức đó. (ĐÚNG TÔI NẾU TÔI SAI.)
Ca ngợi thần thánh

7
Các thông số là tên. Đối số là giá trị.
Aziz Alto

327

Tham số là biến trong khai báo hàm.

Đối số là giá trị thực của biến này được truyền vào hàm.


7
Các ngôn ngữ này thường đề cập đến danh sách đối số / tham số được truyền cho một phương thức là *argshoặc ARGVkhông *params:-)
karatedog

6
*paramssẽ là tên của một biến có nghĩa là giữ các tên tham số (có lẽ được sử dụng để hướng nội).
trss

6
@karatedog Và điều đó hoàn toàn phù hợp với sự khác biệt này, thực sự. Các tham số được đặt tên tại thời điểm khai báo, các đối số chỉ được biết tại thời điểm cuộc gọi. Cú pháp *argskhai báo một tham số args có giá trị là một danh sách (tên và loại được biết tại thời điểm khai báo) của các đối số (số chỉ được biết tại thời điểm cuộc gọi).
Emil Lundberg

72

Đã có một mục Wikipedia về chủ đề (xem Thông số ) xác định và phân biệt tham số thuật ngữ và đối số . Nói tóm lại, một tham số là một phần của chữ ký hàm / thủ tục / phương thức và một đối số là giá trị thực được cung cấp tại thời gian chạy và / hoặc trang web cuộc gọi cho tham số.

Bài viết Wikipedia cũng nói rằng hai thuật ngữ thường được sử dụng đồng nghĩa (đặc biệt là khi lý luận về mã không chính thức):

Mặc dù các tham số cũng thường được gọi là đối số, nhưng đối số được nghĩ đúng hơn là giá trị thực hoặc tham chiếu được gán cho biến tham số khi chương trình con được gọi trong thời gian chạy.

Cho hàm ví dụ sau trong C có thêm hai số nguyên xysẽ được gọi là tham số của nó:

int add(int x, int y) {
    return x + y;
}

Tại một trang web cuộc gọi bằng cách sử dụng add, chẳng hạn như ví dụ hiển thị bên dưới, 123456 sẽ được gọi là đối số của cuộc gọi.

int result = add(123, 456);

Ngoài ra, một số thông số kỹ thuật ngôn ngữ (hoặc tài liệu chính thức) chọn sử dụng riêng tham số hoặc đối số và sử dụng các tính từ như chính thứcthực tế để phân biệt giữa hai trường hợp. Ví dụ, C / C ++ tài liệu thường đề cập đến chức năng các thông số như lập luận chính thức và chức năng gọi lập luận như đối số thực tế . Để biết ví dụ, hãy xem đối số chính thức và đối số thực tế trong phần Tham khảo ngôn ngữ Visual C ++ .


+1 để giải thích cách chúng thường được sử dụng cũng như các định nghĩa chính thức của chúng và cũng đề cập đến việc sử dụng chung các đối số / tham số "chính thức" và "thực tế" để phân biệt chúng mà không mơ hồ.
Ốc cơ khí

Đây là một lời giải thích tuyệt vời nhưng gần như không thể hiểu được so với sự đơn giản của khái niệm này. Một tham số là những gì được chấp nhận, một đối số là những gì được gọi. Đó là một con đường một chiều.
ihodonald

69

Đơn giản:

  • P ARAMETER → P LACEHOLDER (Điều này có nghĩa là một trình giữ chỗ thuộc về chức năng đặt tên và được sử dụng trong thân hàm)
  • Một RGUMENT → Một CTUAL GIÁ TRỊ (Điều này có nghĩa một giá trị thực tế được thông qua sự kêu gọi chức năng)

3
Móc ký ức đẹp
Tanckom


29

Tham số là biến trong khai báo hàm.

Đối số là giá trị thực của biến này được truyền vào hàm. nhập mô tả hình ảnh ở đây


16

Việc sử dụng các tham số thuật ngữ và đối số đã bị sử dụng sai phần nào giữa các lập trình viên và thậm chí các tác giả. Khi làm việc với các phương thức, tham số hạn được sử dụng để xác định các trình giữ chỗ trong chữ ký phương thức, trong khi các đối số thuật ngữ là các giá trị thực mà bạn truyền vào phương thức.

MCSD Cerfification Toolkit (Bài kiểm tra 70-483) Lập trình trong C # , ấn bản 1, Classicalx, 2013

Kịch bản trường hợp thực tế

// Define a method with two parameters
int Sum(int num1, int num2)
{
   return num1 + num2;
}

// Call the method using two arguments
var ret = Sum(2, 3);

10

Trong chỉnh sửa, tôi thường bỏ qua cách mọi người quên: ngôn ngữ cấu trúc dựa trên ngôn ngữ tự nhiên.

Bằng tiếng Anh

Một "tham số" là một giữ chỗ. Họ đặt định dạng phản hồi, bằng ngôn ngữ nói. Theo định nghĩa, đó là bữa tiệc của cuộc gọi, hạn chế phản hồi.

Một "đối số" là một vị trí đang được xem xét. Bạn tranh luận ý kiến ​​của bạn: bạn xem xét một cuộc tranh luận.

Sự khác biệt chính

Vai trò chủ đề của một đối số là tác nhân. Vai trò chủ đề của tham số là người nhận.

Tương tác

Hãy nghĩ về đối số là phần nam, làm cho tham số là phần nữ. Đối số đi vào tham số.

Sử dụng

Một tham số thường được sử dụng trong các định nghĩa. Một đối số thường được sử dụng trong các yêu cầu.

Câu hỏi

Kết thúc câu để làm cho nó bớt bất hòa.

(A) Nói về một định nghĩa:

  1. Đối số nào sẽ được sử dụng []?
  2. Điều gì [] sẽ tham số này []?

(B) Nói về một lời cầu khẩn:

  1. Bạn sẽ sử dụng tham số nào, []?
  2. [] Sẽ là gì [] tham số này?

Đáp án

(A)

  1. bật / vào / chống / với tham số này
  2. đối số ... mất

(B)

  1. và một số đối số ví dụ là gì
  2. (các) đối số ... được sử dụng trên / trong / chống / với

Chồng chéo

Như bạn có thể tưởng tượng, sau khi trả lời: trong ngôn ngữ nói, những từ này đôi khi sẽ tạo ra những phản hồi giống hệt nhau!

Vì vậy, như một quy luật:

  • Thông thường nếu ai đó muốn thông tin tham số, họ muốn biết thêm về loại, tên biến, v.v ... Họ có thể bị nhầm lẫn nếu bạn chỉ đưa ra các đối số ví dụ.

    • Thông thường nếu ai đó muốn thông tin đối số, họ muốn biết giá trị nào bạn đã truyền cho hàm hoặc (các) tham số của nó.

8

Ví dụ này có thể giúp đỡ.

int main () {
   int x = 5; 
   int y = 4;

   sum(x, y); // **x and y are arguments**
}

int sum(int one, int two) { // **one and two are parameters**
   return one + two;
}

8

Luôn nhớ rằng: - Các đối số được thông qua trong khi các tham số được nhận.


8

Các tham số của hàm / phương thức mô tả cho bạn các giá trị mà nó sử dụng để tính kết quả của nó.

Các đối số của hàm là các giá trị được gán cho các tham số này trong một lệnh gọi cụ thể của hàm / phương thức.


7

Hoặc có thể đơn giản hơn để nhớ như thế này, trong trường hợp các đối số tùy chọn cho một phương thức:

public void Method(string parameter = "argument") 
{

}

parameterlà tham số, giá trị của nó, "argument"là đối số :)


7

Giả sử bạn là một hãng hàng không. Bạn xây dựng một chiếc máy bay. Bạn cài đặt chỗ ngồi trong đó. Sau đó, bạn lấp đầy máy bay với hành khách và gửi nó đi đâu đó. Các hành khách (hay đúng hơn, một số phiên bản thay đổi theo thời gian) rời khỏi. Ngày hôm sau, bạn sử dụng lại cùng một máy bay, và cùng chỗ ngồi, nhưng với những hành khách khác nhau lần này.

Máy bay là chức năng của bạn.

Các thông số là chỗ ngồi.

Các đối số là những hành khách đi trong những chỗ ngồi.


7

Tham số và đối số

Tất cả các thuật ngữ khác nhau có liên quan đến các tham số và đối số có thể gây nhầm lẫn. Tuy nhiên, nếu bạn ghi nhớ một vài điểm đơn giản, bạn sẽ có thể dễ dàng xử lý các điều khoản này.

  1. Các tham số chính thức cho một hàm được liệt kê trong khai báo hàm và được sử dụng trong phần thân của định nghĩa hàm. Một tham số chính thức (thuộc bất kỳ loại nào) là một loại khoảng trống hoặc giữ chỗ được điền vào một cái gì đó khi hàm được gọi.
  2. Một đối số là một cái gì đó được sử dụng để điền vào một tham số chính thức. Khi bạn viết một lệnh gọi hàm, các đối số được liệt kê trong ngoặc đơn sau tên hàm. Khi lệnh gọi hàm được thực thi, các đối số được cắm vào cho các tham số chính thức.
  3. Các thuật ngữ gọi theo giá trịgọi theo tham chiếu đề cập đến cơ chế được sử dụng trong quy trình cắm. Trong phương thức gọi theo giá trị, chỉ có giá trị của đối số được sử dụng. Trong cơ chế gọi theo giá trị này, tham số chính thức là một biến cục bộ được khởi tạo thành giá trị của đối số tương ứng. Trong cơ chế gọi theo tham chiếu, đối số là một biến và toàn bộ biến được sử dụng. Trong cơ chế gọi tham chiếu, biến đối số được thay thế cho tham số chính thức để bất kỳ thay đổi nào được thực hiện cho tham số chính thức thực sự được thực hiện cho biến đối số.

Nguồn: Tuyệt đối C ++, Walter Savitch

Đó là,

nhập mô tả hình ảnh ở đây


6

Các điều khoản có thể thay thế cho nhau. Sự khác biệt được mô tả trong câu trả lời khác được thể hiện đúng cách hơn với các điều khoản tham số chính thức cho tên được sử dụng bên trong cơ thể của hàm và tham số cho giá trị được cung cấp tại trang web cuộc gọi ( lập luận chính thứclập luận cũng rất phổ biến).

Cũng lưu ý rằng, trong toán học, đối số thuật ngữ là phổ biến hơn nhiều và tham số thường có nghĩa là một cái gì đó khá khác nhau (mặc dù tham số trong một phương trình tham số về cơ bản là đối số cho hai hoặc nhiều hàm).


Nhưng sau đó một lần nữa đối số thuật ngữ cũng bị quá tải, ít nhất là trong phân tích phức tạp.
Ốc cơ khí

1
Tôi có một tham số với sự tranh chấp rằng chúng có thể hoán đổi cho nhau. ;)
tự đại diện

5

Một đối số là một khởi tạo của một tham số.


4
Đó là lời giải thích tôi đã được đưa ra bởi một lập trình viên khác từ lâu, và tôi nghĩ đó là một lời giải thích rất rõ ràng và súc tích. Tôi đăng nó ở đây vì lý do đó.
Paul Richter

4

Đúng! Các tham số và đối số có ý nghĩa khác nhau, có thể dễ dàng giải thích như sau:

Tham số chức năng là tên được liệt kê trong định nghĩa chức năng.

Hàm đối số là các giá trị thực được truyền cho (và nhận bởi) hàm.


4

Giải thích đơn giản không cần mã

Một "tham số" là một điều rất chung chung, rộng rãi, nhưng một "đối số: là một điều rất cụ thể, cụ thể. Điều này được minh họa rõ nhất qua các ví dụ hàng ngày:

Ví dụ 1: Máy bán hàng tự động - Tiền là tham số, $ 2,00 là đối số

Hầu hết các máy có một đầu vào và trả lại một đầu ra. Ví dụ, một máy bán hàng tự động lấy đầu vào: tiền và trả về: đồ uống có ga làm đầu ra. Trong trường hợp cụ thể đó, nó chấp nhận như một tham số: tiền.

Thế thì tranh luận là gì? Chà, nếu tôi đặt $ 2,00 vào máy, thì đối số là: $ 2,00 - đó là đầu vào rất cụ thể được sử dụng.

Ví dụ 2: Ô tô - Xăng là tham số

Hãy xem xét một chiếc xe hơi: họ chấp nhận xăng (xăng không chì) làm đầu vào. Có thể nói rằng các máy này chấp nhận các thông số của loại: xăng. Đối số sẽ là đầu vào chính xác và cụ thể mà tôi đưa vào xe của mình. ví dụ: Trong trường hợp của tôi, đối số sẽ là: 40 lít xăng / xăng không chì.

Ví dụ 3 - Xây dựng về lập luận

Một đối số là một ví dụ cụ thể và cụ thể của một đầu vào. Giả sử máy của tôi lấy một người làm đầu vào và biến họ thành một người không phải là kẻ nói dối.

Thế thì tranh luận là gì? Đối số sẽ là người cụ thể thực sự được đưa vào máy. ví dụ: nếu Colin Powell được đưa vào máy thì đối số sẽ là Colin Powell.

Vì vậy, tham số sẽ là một người như một khái niệm trừu tượng, nhưng đối số sẽ luôn là một người cụ thể với một tên cụ thể được đưa vào máy. Lập luận cụ thể và cụ thể.

Đó là sự khác biệt. Đơn giản.

Bối rối?

Đăng một bình luận và tôi sẽ sửa chữa lời giải thích.


3

Hoặc thậm chí đơn giản hơn ...

Tranh luận trong!

Thông số ra!


3

Cả hai đều không có nhiều khác biệt trong cách sử dụng trong C, cả hai thuật ngữ được sử dụng trong thực tế. Chủ yếu là các đối số thường được sử dụng với các chức năng. Giá trị được truyền với câu lệnh gọi hàm được gọi là đối số và tham số sẽ là biến sao chép giá trị trong định nghĩa hàm (được gọi là tham số chính thức).

int main ()
{
   /* local variable definition */
   int a = 100;
   int b = 200;
   int ret;

   /* calling a function to get max value */
   ret = max(a, b);

   printf( "Max value is : %d\n", ret );

   return 0;
}

/* function returning the max between two numbers */
int max(int num1, int num2) 
{
   /* local variable declaration */
   int result;

   if (num1 > num2)
      result = num1;
   else
      result = num2;

   return result; 
}

Trong đoạn mã trên num1num2là các tham số chính thức ablà đối số thực tế.


3

Do đó, các hướng dẫn Java của Oracle xác định sự khác biệt này: "Tham số tham chiếu danh sách các biến trong khai báo phương thức. Đối số là các giá trị thực được truyền vào khi phương thức được gọi. Khi bạn gọi một phương thức, các đối số được sử dụng phải khớp với tham số của khai báo. theo loại và thứ tự. "

Một cuộc thảo luận chi tiết hơn về các tham số và đối số: https://docs.oracle.com/javase/tutorial/java/javaOO/argument.html


3

Nói một cách logic, chúng ta thực sự đang nói về điều tương tự. Nhưng tôi nghĩ một phép ẩn dụ đơn giản sẽ hữu ích để giải quyết vấn đề nan giải này.

Nếu các phép ẩn dụ có thể được gọi là điểm kết nối khác nhau, chúng ta có thể đánh đồng chúng để cắm các điểm trên tường. Trong trường hợp này chúng ta có thể xem xét các tham số và đối số như sau;

Các tham số là các ổ cắm của điểm cắm có thể có nhiều hình dạng khác nhau. Nhưng chỉ một số loại phích cắm phù hợp với họ.
Đối số sẽ là các phích cắm thực tế sẽ được cắm vào các điểm / ổ cắm để kích hoạt một số thiết bị nhất định.


3

Tham số là một biến trong định nghĩa hàm
Đối số là một giá trị của tham số

<?php

    /* define function */
    function myFunction($parameter1, $parameter2)
    {
        echo "This is value of paramater 1: {$parameter1} <br />";
        echo "This is value of paramater 2: {$parameter2} <br />";
    }

    /* call function with arguments*/
    myFunction(1, 2);

?>

3

Nói chung, tham số thuật ngữ và đối số được sử dụng thay thế cho nhau để có nghĩa là thông tin được truyền vào một hàm.

Tuy nhiên, từ quan điểm của một chức năng:

  • Một tham số là biến được liệt kê bên trong ngoặc đơn trong định nghĩa hàm.
  • Một đối số là giá trị được gửi đến hàm khi nó được gọi.

2

Khi chúng ta tạo phương thức (hàm) trong Java, phương thức như thế này ..

data-type name of the method (data-type variable-name)

Trong ngoặc đơn, đây là các tham số và khi chúng ta gọi phương thức (hàm), chúng ta truyền giá trị của tham số này, được gọi là các đối số.


2

Theo cuốn sách "C # in a Nutshell" của Joseph's (C # 7.0, trang 49):

static void Foo (int x)
{
    x = x + 1; // When you're talking in context of this method x is parameter
    Console.WriteLine (x);
}
static void Main()
{
    Foo (8); // an argument of 8. 
             // When you're talking from the outer scope point of view
}

Trong một số ngôn ngữ của con người (afaik tiếng Ý, tiếng Nga) được sử dụng rộng rãi cho các thuật ngữ này.

  • tham số = tham số chính thức
  • đối số = tham số thực tế

Trong các giáo sư đại học của tôi sử dụng cả hai loại tên.


0

Các tham số là các biến được nhận bởi một hàm. Hiện tại chúng có thể nhìn thấy trong khai báo hàm. Chúng chứa tên biến với kiểu dữ liệu của chúng. Đối số là các giá trị thực tế được truyền cho hàm khác. đó là lý do tại sao chúng ta có thể thấy chúng trong chức năng gọi. Chúng chỉ là các giá trị mà không có kiểu dữ liệu của chúng


0

Các tham số chính thức cho một hàm được liệt kê trong khai báo hàm và được sử dụng trong phần thân của định nghĩa hàm. Chính thức tham số (thuộc bất kỳ loại nào) là một loại khoảng trống hoặc giữ chỗ được điền vào một cái gì đó khi hàm được gọi.

Một cuộc cãi vã là một cái gì đó được sử dụng để điền vào một tham số chính thức. Khi bạn viết một lệnh gọi hàm, các đối số được liệt kê trong ngoặc đơn sau tên hàm. Khi lệnh gọi hàm được thực thi, các đối số được cắm vào cho các tham số chính thức.

Các thuật ngữ gọi theo giá trịgọi theo tham chiếu đề cập đến cơ chế được sử dụng trong quy trình cắm. Trong phương thức gọi theo giá trị, chỉ có giá trị của đối số được sử dụng. Trong cơ chế gọi theo giá trị này, tham số chính thức là một biến cục bộ được khởi tạo thành giá trị của đối số tương ứng. Trong cơ chế gọi theo tham chiếu, đối số là một biến và toàn bộ biến được sử dụng. Trong cơ chế gọi tham chiếu, biến đối số được thay thế cho tham số chính thức để bất kỳ thay đổi nào được thực hiện cho tham số chính thức thực sự được thực hiện cho biến đối số.


0

Tham số là các biến được sử dụng để lưu trữ dữ liệu được truyền vào hàm cho hàm sử dụng. Đối số là dữ liệu thực tế được truyền vào một hàm khi nó được gọi:

// x and y are parameters in this function declaration
function add(x, y) {
  // function body
  var sum = x + y;
  return sum; // return statement
}

// 1 and 2 are passed into the function as arguments
var sum = add(1, 2);

0

Tôi nghĩ rằng nó thông qua và nhận ra câu trả lời trước đây của tôi là sai. Đây là một định nghĩa tốt hơn nhiều

{ Hãy tưởng tượng một thùng trứng: Một gói liên kết xúc xích: Và một người giúp việc } Đây là những yếu tố đại diện cho Chức năng cần thiết để chuẩn bị được gọi là: (sử dụng bất kỳ tên nào: Hãy nói rằng Cooking là tên của chức năng của tôi).

Một Maid là một phương pháp.

(Bạn phải __call_ hoặc yêu cầu phương pháp này để làm bữa sáng) (Hành động làm bữa sáng là Chức năng gọi là Nấu ăn ) _

Trứng và xúc xích là thông số:

(vì số lượng trứng và số lượng xúc xích bạn muốn ăn là __variable_.) _

Quyết định của bạn là một đối số:

Nó đại diện cho __Value_ trong số lượng trứng và / hoặc xúc xích bạn đang nấu ._

{ Ghi nhớ }

_ "Khi bạn gọi người giúp việc và yêu cầu cô ấy làm bữa sáng, cô ấy __argues_ với bạn về việc bạn nên ăn bao nhiêu trứng và xúc xích. Cô ấy quan tâm đến cholesterol của bạn" __

(Đối số, sau đó, là các giá trị cho sự kết hợp các Tham số bạn đã khai báo và quyết định chuyển đến Hàm của bạn)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.