Jaka jest różnica między argumentem a parametrem?


717

Mówiąc ustnie o metodach, nigdy nie jestem pewien, czy użyć słowa argument lub parametr, czy coś innego. Tak czy inaczej, inni ludzie wiedzą, co mam na myśli, ale co jest poprawne i jaka jest historia terminów?

Jestem programistą C #, ale zastanawiam się również, czy ludzie używają różnych terminów w różnych językach.

Dla przypomnienia jestem samoukiem bez wiedzy informatycznej. (Proszę, nie mów mi, żebym czytał Kod Complete, ponieważ proszę o to z korzyścią dla innych osób, które nie mają jeszcze kopii cudownej książki Steve'a McConnella .)

Podsumowanie

Ogólny konsensus wydaje się być taki, że można używać tych terminów zamiennie w środowisku zespołowym. Może z wyjątkiem definicji precyzyjnej terminologii; następnie możesz użyć „ formalnego argumentu / parametru” i „ faktycznego argumentu / parametru”, aby ujednoznacznić.


9
Używam ich zamiennie… nikt się ze mnie nie śmiał… „ta funkcja ma 4 argumenty… ta funkcja przyjmuje 4 parametry”. brzmi tak samo.
Gishu

54
Można używać ich zamiennie, z wyjątkiem sytuacji, gdy próbujesz opisać, jak działają parametry i jak przekazywane są argumenty itp. W tym momencie przydatna jest precyzyjna terminologia (która może być czasem trudna do wyrażenia).
Jon Skeet

2
Istnieją co najmniej dwie niezamknięte, niezależne od języka wersje tego pytania: stackoverflow.com/questions/3176310/... i stackoverflow.com/questions/427653/arguments-or-parameters . Jest też inna wersja tego pytania w języku C #; Zażądałem scalenia.
Wyskakuje

1
Cieszę się, że wspomniałeś o Steve McConnell. Dowiedziałem się o jeszcze jednym facecie, który zna się na kodzie oprogramowania wraz z Robertem C. Martinem.
RBT

3
Myślę, że niezależnie od tego, czy jesteś w środowisku formalnym, czy nie, powinieneś starać się stosować prawidłowe warunki. Myślę, że to dość proste. Kiedy wywołujesz metodę, przekazujesz argumenty. Podczas definiowania metody definiuje się parametry, które będą pobierać argumenty z wywołania metody / funkcji. argument - niezależna zmienna powiązana z funkcją i określająca wartość funkcji. parametr - granica lub granica określająca zakres określonego procesu lub działania.
jsquaredz

Odpowiedzi:


904

Parametr jest zmienną w definicji metody. Gdy wywoływana jest metoda, argumentami są dane przekazywane do parametrów metody.

public void MyMethod(string myParam) { }

...

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

196
Aliterujący mnemonik, który może pomóc: Argumenty są aktualne. ;)
thSoft

8
W odpowiedzi wspomniano, że „parametr jest zmienną w definicji metody”, ale lepiej byłoby powiedzieć „deklaracja metody” [jeśli ktoś dokonuje rozróżnienia między „deklaracją” a „definicją”]
nandan

110
„Definiujesz parametry i argumentujesz”.
Greg M. Krsak,

5
parametr => kiedy definiujemy funkcję, argument => kiedy wywołujemy tę metodę. (POPRAW MNIE, JEŚLI JESTEM
ŹLE

7
Parametry to nazwy. Argumenty to Wartości.
Aziz Alto,

327

Parametr jest zmienny w deklaracji funkcji.

Argument to rzeczywista wartość tej zmiennej przekazywanej do funkcji.


7
Te języki zwykle odnoszą się do listy argumentów / parametrów przekazywanych do metody jako *argslub ARGVnie *params:-)
karatedog

6
*paramsbędzie nazwą zmiennej, która ma przechowywać nazwy parametrów (być może używana do introspekcji).
trss

6
@karatedog W rzeczywistości jest to całkowicie zgodne z tym rozróżnieniem. Parametry są nazywane w czasie deklaracji, argumenty są znane tylko w czasie połączenia. Składnia *argsdeklaruje parametr, args którego wartością jest lista (nazwa i typ znane w czasie deklaracji) argumentów (których liczba jest znana tylko w czasie połączenia).
Emil Lundberg,

72

Na ten temat jest już wpis w Wikipedii (patrz parametr ), który definiuje i rozróżnia parametry parametru i argument . Krótko mówiąc, parametr jest częścią sygnatury funkcji / procedury / metody, a argument to rzeczywista wartość podana w czasie wykonywania i / lub w miejscu wywołania dla parametru.

Artykuł w Wikipedii stwierdza również, że te dwa terminy są często używane synonimicznie (szczególnie w przypadku nieformalnego rozumowania o kodzie):

Chociaż parametry są również powszechnie nazywane argumentami, argumenty są bardziej poprawnie traktowane jako rzeczywiste wartości lub odwołania przypisane do zmiennych parametrów, gdy podprogram jest wywoływany w czasie wykonywania.

Biorąc pod uwagę następującą przykładową funkcję w C, która dodaje dwie liczby całkowite xi ybędzie określana jako jej parametry:

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

W witrynie wywołującej add, takiej jak przykład pokazany poniżej, 123 i 456 będą nazywane argumentami wywołania.

int result = add(123, 456);

Ponadto niektóre specyfikacje językowe (lub dokumentacja formalna) wybierają wyłącznie parametr lub argument i używają przymiotników takich jak formalne i rzeczywiste zamiast rozróżniać oba przypadki. Na przykład dokumentacja C / C ++ często odnosi się do parametrów funkcji jako argumentów formalnych, a argumentów wywołania funkcji jako argumentów rzeczywistych . Na przykład zobacz „ Argumenty formalne i rzeczywiste ” w Skorowidzu języka Visual C ++ .


+1 za wyjaśnienie, w jaki sposób są one powszechnie używane, a także ich formalne definicje, a także za wzmiankę o powszechnym stosowaniu argumentów / parametrów „formalnych” i „rzeczywistych” w celu rozróżnienia ich bez dwuznaczności.
Ślimak mechaniczny

To świetne wytłumaczenie, ale jest prawie niemożliwe do zrozumienia w porównaniu z prostotą koncepcji. Parametr jest akceptowany, argument jest nazywany. To ulica jednokierunkowa.
ihodonald

69

Prosty:

  • P ARAMETER → P LACEHOLDER (Oznacza to, że symbol zastępczy należy do nazewnictwa funkcji i może być używany w treści funkcji)
  • A RGUMENT → A WARTOŚĆ RZECZYWISTA (oznacza rzeczywistą wartość przekazywaną przez wywołanie funkcji)

3
Niezły haczyk pamięci
Tanckom,



16

Używanie parametrów parametrów i argumentów zostało nieco niewłaściwie wykorzystane przez programistów, a nawet autorów. Podczas obchodzenia się z metodami parametr parametr służy do identyfikowania symboli zastępczych w podpisie metody, natomiast argumenty terminu są rzeczywistymi wartościami przekazywanymi do metody.

MCSD Cerfification Toolkit (egzamin 70-483) Programowanie w C # , 1. wydanie, Wrox, 2013

Scenariusz przypadku w świecie rzeczywistym

// 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

Podczas edycji często zniechęcam się tym, jak ludzie zapominają: języki strukturalne są oparte na językach naturalnych.

Po angielsku

„Parametr” jest symbolem zastępczym. Ustawiają format odpowiedzi w języku mówionym. Z definicji jest to strona połączenia, co ogranicza odpowiedź.

„Argument” jest rozważaną pozycją. Argumentujesz swoją opinię: rozważasz argument.

Główna różnica

Rolą tematyczną argumentu jest agent. Rolą tematyczną parametru jest odbiorca.

Interakcje

Pomyśl o argumencie jako części męskiej, dzięki czemu parametr będzie częścią żeńską. Argument przechodzi do parametru.

Stosowanie

Parametr jest zwykle używany w definicjach. Argument jest zwykle używany w wywołaniach.

pytania

Dokończ zdanie, aby było mniej dysonansowe.

(A) Mówiąc o definicji:

  1. Jaki argument zostanie użyty []?
  2. Co [] będzie miał ten parametr []?

(B) Mówiąc o wezwaniu:

  1. Jakiego parametru użyjesz, []?
  2. Czym [] będzie [] ten parametr?

Odpowiedzi

(ZA)

  1. on / in / against / with tym parametrem
  2. argument (y) ... weź

(B)

  1. i jakie są niektóre przykładowe argumenty
  2. argument (y) ... używane w / in / against / with

Pokrywają się

Jak możesz sobie wyobrazić, po udzieleniu odpowiedzi: w języku mówionym te słowa czasami dają identyczne odpowiedzi!

Co do zasady:

  • Zwykle, jeśli ktoś chce informacji o parametrach, chce wiedzieć więcej o typie, nazwie zmiennej itp. Może się zdezorientować, jeśli podasz tylko przykładowe argumenty.

    • Zwykle, jeśli ktoś chce informacji o argumentach, chce wiedzieć, jaką wartość przekazałeś funkcji lub jej parametrom.

8

Ten przykład może pomóc.

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

Te parametry danej funkcji / metody opisać, wartości, które używa do obliczenia jego wynik.

Te argumenty o funkcji są wyznaczone wartości tych parametrów w trakcie danego wywołania funkcji / metody.


7

Lub może być jeszcze łatwiejsze do zapamiętania w ten sposób, w przypadku opcjonalnych argumentów dla metody:

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

}

parameterjest parametrem, jego wartością "argument"jest argumentem :)


7

Powiedzmy, że jesteś linią lotniczą. Budujesz samolot. Instalujesz w nim miejsca. Następnie wypełniasz samolot pasażerami i wysyłasz gdzieś. Pasażerowie (a raczej niektóre ich zmienione przestrzennie wersje) wysiadają. Następnego dnia ponownie korzystasz z tego samego samolotu i tych samych miejsc, ale tym razem z różnymi pasażerami.

Płaszczyzna jest twoją funkcją.

Parametry są siedzeniami.

Argumentami są pasażerowie, którzy siedzą na tych miejscach.


7

Parametry i argumenty

Wszystkie różne terminy związane z parametrami i argumentami mogą być mylące. Jeśli jednak weźmiesz pod uwagę kilka prostych kwestii, będziesz w stanie łatwo obsłużyć te warunki.

  1. Te formalne parametry dla funkcji są wymienione w deklaracji funkcji i są używane w ciele definicji funkcji. Parametr formalny (dowolnego rodzaju) jest rodzajem spacji lub symbolu zastępczego, który jest wypełniany czymś, gdy funkcja jest wywoływana.
  2. Argumentem jest coś, co służy do wypełnienia w formalnym parametru. Kiedy zapisujesz wywołanie funkcji, argumenty są wymienione w nawiasach po nazwie funkcji. Po wywołaniu funkcji argumenty są wprowadzane do parametrów formalnych.
  3. Terminy call-by-value i call-by-reference odnoszą się do mechanizmu stosowanego w procesie podłączania. W metodzie call-by-value używana jest tylko wartość argumentu. W tym mechanizmie call-by-value parametr formalny jest zmienną lokalną, która jest inicjowana do wartości odpowiedniego argumentu. W mechanizmie call-by-reference argumentem jest zmienna i używana jest cała zmienna. W mechanizmie wywołania przez referencję zmienna argumentu zastępuje parametr formalny, tak więc każda zmiana parametru formalnego jest faktycznie dokonywana w zmiennej argumentu.

Źródło: Absolute C ++, Walter Savitch

To jest,

wprowadź opis zdjęcia tutaj


6

Warunki są nieco wymienne. Różnica opisana w innych odpowiedziach jest lepiej wyrażona terminami parametr formalny dla nazwy użytej w treści funkcji i parametr wartości podanej w miejscu wywołania ( argumenty formalne i argumenty są również powszechne).

Zauważ też, że w matematyce termin argument jest znacznie bardziej powszechny, a parametr zwykle oznacza coś zupełnie innego (chociaż parametr w równaniu parametrycznym jest zasadniczo argumentem dwóch lub więcej funkcji).


Ale znowu termin „ argument” jest również przeciążony, przynajmniej w złożonej analizie.
Ślimak mechaniczny

1
Mam parametr z twierdzeniem, że są one wymienne. ;)
Wildcard,

5

Argument jest wystąpieniem parametru.


4
To wyjaśnienie, które dostałem od dawna inny programista, i pomyślałem, że jest to bardzo jasne i zwięzłe. Z tego powodu opublikowałem to tutaj.
Paul Richter

4

Tak! Parametry i argumenty mają różne znaczenia, które można łatwo wyjaśnić w następujący sposób:

Parametry funkcji to nazwy wymienione w definicji funkcji.

Argumenty funkcji to rzeczywiste wartości przekazywane do (i odbierane) przez funkcję.


4

Proste objaśnienia bez kodu

„Parametr” jest bardzo ogólną, szeroką rzeczą, ale „argument: jest bardzo konkretną, konkretną rzeczą. Najlepiej ilustrują to codzienne przykłady:

Przykład 1: Automaty vendingowe - parametr to Pieniądze, argument to 2,00 $

Większość maszyn pobiera dane wejściowe i zwraca dane wyjściowe. Na przykład automat sprzedający przyjmuje jako dane wejściowe: pieniądze i zwraca: napoje gazowane jako wynik. W tym konkretnym przypadku przyjmuje jako parametr: pieniądze.

Jaki jest zatem argument? Cóż, jeśli wrzucę 2,00 $ do maszyny, wówczas argumentem będzie: 2,00 $ - jest to bardzo specyficzne użyte wejście.

Przykład 2: Samochody - parametr to benzyna

Rozważmy samochód: akceptują benzynę (benzynę bezołowiową) jako wkład. Można powiedzieć, że maszyny te akceptują parametry typu: benzyna. Argumentem byłby dokładny i konkretny wkład, jaki włożyłem do mojego samochodu. np. w moim przypadku argumentem byłoby: 40 litrów benzyny bezołowiowej / benzyny.

Przykład 3 - Opracowanie argumentów

Argument jest szczególnym i konkretnym przykładem danych wejściowych. Załóżmy, że moja maszyna bierze osobę za wkład i zamienia ją w kogoś, kto nie jest kłamcą.

Czym zatem jest argument? Argumentem będzie konkretna osoba faktycznie włożona do maszyny. np. jeśli Colin Powell zostanie wstawiony do maszyny, argumentem będzie Colin Powell.

Tak więc parametrem byłaby osoba jako pojęcie abstrakcyjne, ale argumentem zawsze byłaby konkretna osoba o konkretnym nazwisku, która jest umieszczona w maszynie. Argument jest konkretny i konkretny.

To jest różnica. Prosty.

Zmieszany?

Opublikuj komentarz, a naprawię wyjaśnienie.



3

Oba nie mają dużej różnicy w użyciu w C, oba terminy są używane w praktyce. Przeważnie argumenty są często używane z funkcjami. Wartość przekazywana z instrukcją wywoływania funkcji nazywa się argumentem, a parametrem byłaby zmienna, która kopiuje wartość w definicji funkcji (nazywana jako parametr formalny).

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; 
}

W powyższym kodzie num1i num2są formalne parametry i ai bsą rzeczywiste argumenty.


3

Samouczki Java firmy Oracle definiują to rozróżnienie w następujący sposób: „Parametry odnoszą się do listy zmiennych w deklaracji metody. Argumenty są rzeczywistymi wartościami przekazywanymi podczas wywoływania metody. Podczas wywoływania metody użyte argumenty muszą być zgodne z parametrami deklaracji według rodzaju i kolejności. ”

Bardziej szczegółowe omówienie parametrów i argumentów: https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html


3

Logicznie rzecz biorąc, mówimy o tym samym. Myślę jednak, że prosta metafora byłaby pomocna w rozwiązaniu tego dylematu.

Jeśli metafory można nazwać różnymi punktami połączenia, możemy je przyrównać do punktów na ścianie. W takim przypadku możemy rozważyć parametry i argumenty w następujący sposób;

Parametry są gniazdami wtyczki, które mogą przyjmować różne kształty. Ale pasują do nich tylko niektóre typy wtyczek.
Argumentami będą rzeczywiste wtyczki, które zostałyby podłączone do punktów / gniazd wtyczki w celu aktywacji niektórych urządzeń.


3

Parametr jest zmienną w definicji funkcji.
Argument jest wartością parametru

<?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

Zasadniczo terminy parametr i argument są używane zamiennie w celu oznaczenia informacji przekazywanej do funkcji.

Jednak z perspektywy funkcji:

  • Parametrów jest zmienny podane w nawiasach w definicji funkcji.
  • Argumentem jest wartość, która jest przesyłana do funkcji, kiedy to się nazywa.

2

Kiedy tworzymy metodę (funkcję) w Javie, metoda taka jak ta ..

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

W nawiasie są to parametry, a gdy wywołujemy metodę (funkcję), przekazujemy wartość tego parametru, zwaną argumentem.


2

Według książki Josepha Alabahari „C # in a Nutshell” (C # 7.0, s. 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
}

W niektórych językach ludzkich (afaik włoski, rosyjski) powszechnie stosuje się synonimy dla tych terminów.

  • parametr = parametr formalny
  • argument = aktualny parametr

Na moim uniwersytecie profesorowie używają obu rodzajów nazwisk.


0

Parametry to zmienne otrzymywane przez funkcję, dlatego są widoczne w deklaracji funkcji i zawierają nazwę zmiennej wraz z typem danych. Argumenty to rzeczywiste wartości przekazywane do innej funkcji. dlatego możemy je zobaczyć w wywołaniu funkcji. Są to tylko wartości bez typu danych


0

Parametry formalne funkcji są wymienione w deklaracji funkcji i są używane w treści definicji funkcji. Parametr formalny (dowolnego rodzaju) jest rodzajem spacji lub symbolu zastępczego, który jest wypełniany czymś, gdy funkcja jest wywoływana.

Argumentem jest coś, co służy do wypełnienia w formalnym parametru. Kiedy zapisujesz wywołanie funkcji, argumenty są wymienione w nawiasach po nazwie funkcji. Po wywołaniu funkcji argumenty są wprowadzane do parametrów formalnych.

Terminy call-by-value i call-by-reference odnoszą się do mechanizmu stosowanego w procesie podłączania. W metodzie call-by-value używana jest tylko wartość argumentu. W tym mechanizmie call-by-value parametr formalny jest zmienną lokalną, która jest inicjowana do wartości odpowiedniego argumentu. W mechanizmie call-by-reference argumentem jest zmienna i używana jest cała zmienna. W mechanizmie wywołania przez referencję zmienna argumentu zastępuje parametr formalny, tak więc każda zmiana parametru formalnego jest faktycznie dokonywana w zmiennej argumentu.


0

Parametry to zmienne, które są używane do przechowywania danych, które są przekazywane do funkcji w celu użycia przez funkcję. Argumenty to rzeczywiste dane, które są przekazywane do funkcji po jej wywołaniu:

// 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

Przemyślałem to i zdałem sobie sprawę, że moja poprzednia odpowiedź była błędna. Oto znacznie lepsza definicja

{ Wyobraź sobie karton jaj: paczka ogniw do kiełbas: I pokojówka } Reprezentują one elementy funkcji potrzebnej do przygotowania o nazwie: (użyj dowolnej nazwy: Powiedzmy, że gotowanie to nazwa mojej funkcji).

Pokojówka to metoda.

(Musisz __zadzwonić_ lub poprosić tę metodę o zrobienie śniadania) ( Robienie śniadania jest funkcją o nazwie Gotowanie ) _

Jajka i kiełbaski to Parametry:

(ponieważ liczba jaj i liczba kiełbas, które chcesz zjeść, to __zmienna_.) _

Twoja decyzja jest argumentem:

Reprezentuje __Wartość_ wybranej liczby jaj i / lub kiełbas, które gotujesz ._

{ Mnemoniczny }

_ „Kiedy zadzwonisz do pokojówki i poprosisz ją o zrobienie śniadania, ona __argues_ z tobą o ile jajek i kiełbas powinieneś zjeść. Martwi się twoim cholesterolem __

(Argumenty są zatem wartościami kombinacji parametrów, które zadeklarowałeś i postanowiłeś przekazać do swojej funkcji)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.