Argument (informatyka)

Argument (parametr aktualny), w informatyce, to element składni w określonym języku programowania, który w wyniku wywołania podprogramu, zostaje utożsamiony (skojarzony) z określonym parametrem podprogramu. Można stwierdzić, że argument konkretyzuje pewien abstrakcyjny parametr (nadając mu konkretną wartość, kojarząc parametr z określonym miejscem pamięci, zwracając konkretną wartość do miejsca wywołania itp.)[1].

Parametry i argumenty

Definiując podprogram programista posługuje się parametrem, czyli informacją (np. wartością), która nie jest znana w momencie definiowania podprogramu, a jedynie zadeklarowaną w jego nagłówku. Argument jest natomiast informacją (np. wartością), znaną, przekazaną z miejsca wywołania, którą posługuje się zdefiniowany wcześniej podprogram.

Sposoby specyfikacji argumentów

Składania języka programowania określa sposób specyfikacji argumentów przy wywołaniu określonego podprogramu. Najczęściej podaje się listę argumentów ujętą w nawiasy po nazwie podprogramu, np. „podprogram(arg1, arg2, …, arg_n);”. Przykładowe języki to: C[2][3][4], C++[2][3][4], Pascal[5][6], PL/1[7][8], Ada[9][10], ALGOL[11][12] i wiele innych. W pewnych językach lista ta nie musi być ujmowana w nawiasy. Jest to więc specyfikacja pozycyjna argumentów, w której to, który argument zostanie skojarzony z którym parametrem decyduje pozycja na liście. Niektóre języki, np. Visual Basic, umożliwiają przypisania argumentu do parametru poprzez identyfikator parametru. Nie ma wtedy znaczenia kolejność specyfikacji argumentów, np. „podprogram parametr3=arg1 parametr2=arg2 paramter1=arg3”.

Rodzaje argumentów

Argumenty mogą zostać podzielone na dwie zasadnicze grupy:

argumenty wymagane – muszą zostać wyspecyfikowanie w wywołaniu podprogramu,
argumenty opcjonalne – mogą zostać wyspecyfikowanie wywołaniu podprogramu, lub mogą zostać pominięte; argumenty opcjonalne mogą posiadać zdefiniowaną domyślną wartość argumentu.

Przekazywanie argumentów

Argumenty przekazywane przez wartość

W tym przypadku parametr zachowuje się w podprogramie jak zmienna lokalna, której przypisano w momencie wywołania podprogramu wartość początkową, równą wartości przekazywanego argumentu. Oznacza to, że argument przekazywany do podprogramu może być wyrażeniem. Po zakończeniu podprogramu, wartość odpowiedniego parametru, nie zostanie zachowana.

Przykładowe języki programowania: Ada (in)[1][9][10], Pascal[1][5][6], C[2][3][4], Modula-2[13], Snobol[14] i inne.

Argumenty przekazywane przez wynik

Parametr zachowuje się jak zmienna lokalna, bez wartości początkowej (a więc należy dokonać przypisania wartości w podprogramie), a po zakończeniu podprogramu, argument (który powinien być zmienną, wskazaniem na zmienną lub innym wyrażeniem dopuszczalnym po lewej stronie operatora przypisania w danym języku programowania) otrzyma wartość nadaną w podprogramie, przekazaną do miejsca wywołania.

Przykładowe języki programowania: Ada (out)[1][9][10], ALGOL W[1]

Argumenty przekazywane przez wartość i wynik

Jest to połączenie metod przekazywania argumentów:

  • przez wartość oraz
  • przez wynik.

Parametr zachowuje się więc jak zmienna lokalna o nadanej w momencie wywołania podprogramu wartości początkowej, równej wartości przekazywanego argumentu, a po zakończeniu podprogramu argument zachowa ostatnio nadaną parametrowi wartość.

Przykładowe języki programowania: Ada (in out)[1][9][10].

Argumenty przekazywane przez referencję

Argumenty przekazywane przez referencję (przez zmienną, przez adres), to nałożenie zmiennej reprezentowanej przez parametr na zmienną reprezentowaną przez argument. Każda zmiana wartości parametru oznacza w rzeczywistości zmianę wartości skojarzonego z nim argumentu. Różnica z przekazywaniem argumentu przez wartość i wynik polega więc na tym, że w tym drugim przypadku istnieje zmienna lokalna, na której wykonywane są wszystkie operacje, przy przekazywaniu przez referencję wszystkie operacje wykonywane są bezpośrednio na argumencie.

Przykładowe języki programowania: C/C++[2][3][4], Pascal (var)[1][5][6], Modula-2[13], PL/I[7][8], COBOL[15], Fortran[11].

Argumenty przekazywane przez nazwę

Ten sposób oznacza użycie argumentu w miejscu parametru, w takiej postaci, w jakiej wystąpił w miejscu wywołania. W uproszczeniu (nie jest to do końca prawdziwe stwierdzenie), obrazowo, można by utożsamić przekazywanie argumentu przez nazwę z tekstowym podstawieniem zapisu argumentu w każdym miejscu podprogramu, w którym odwołano się do parametru.

Dokładniej: w ALGOLu przekazywanie przez nazwę zdefiniowane jest następująco[11]:

  • Procedura jest traktowana podobnie jak makro, czyli jej treść jest wklejana w miejscu wywołania, z zastąpieniem parametrów przekazywanych przez nazwę argumentami.
  • Dla zachowania jednoznaczności parametry aktualne otaczane są nawiasami.
  • Jeśli zmienne lokalne procedury kolidują ze zmiennymi widocznymi w miejscu wywołania, to ich nazwy zostają zmienione na unikatowe.

Przykładowe języki programowania: ALGOL 60[1][11], Simula 67[16].

Zobacz też

Przypisy

  1. a b c d e f g h Michael Marcotty, Henry Ledgord, tłumaczenie: Krystyna Jerzykiewicz: W kręgu języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1342-7. (pol.)
  2. a b c d Brian W. Kernighan, Dennis M. Ritche: Język C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1067-3. (pol.)
  3. a b c d Jan Bielecki: Turbo C z grafiką na IBM PC. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Mikrokomputery. ISBN 83-204-1101-7. (pol.)
  4. a b c d Jan Bielecki: Od C do C++, programowanie obiektowe w języku C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990. ISBN 83-204-1332-X. (pol.)
  5. a b c Michał Iglewski, Jan Madey, Stanisław Matwin: Pascal. Język wzorcowy – Pascal 360. Wyd. wydanie trzecie – zmienione. Warszawa: Wydawnictwa Naukowo-Techniczne, 1984, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.)
  6. a b c Andrzej Marciniak: Borland Pascal 7.0. Poznań: Nakom, 1994, seria: Biblioteka Użytkownika Mikrokomputerów. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.)
  7. a b Jan Bielecki: Rozszerzony PL/I i JCL w systemie OS/RIAD. Warszawa: Państwowe Wydawnictwo Naukowe, 1986, seria: Biblioteka Informatyki. ISBN 83-01-06146-4. (pol.)
  8. a b M. I. Auguston i inni: Programowanie w języku PL/1 OS JS. Warszawa: Państwowe Wydawnictwo Naukowe, 1988. ISBN 83-01-07463-9. (pol.)
  9. a b c d A. Nico Habermann, Dewayne E. Perry: Ada dla zaawansowanych. Warszawa: Wydawnictwa Naukowo-Techniczne, 1989, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1058-4. (pol.)
  10. a b c d Michał Morawski, Antoni M. Zajączkowski: Wstęp do programowania w języku Ada’95. Wyd. drugie. Łódź: 2004. [dostęp 2011-01-29]. (pol.)
  11. a b c d Joanna Jonkisz, Jan Makuch, Stanisław Starzak: Programowanie w językach Algol 60 i Fortran 1900. Łódź: Wydawnictwo Politechniki Łódzkiej, Politechnika Łódzka, Ośrodek Elektronicznej Techniki Obliczeniowej, 1982, seria: Skrypty dla szkół wyższych. (pol.)
  12. Jan Małuszyński, Krzysztof Pisecki, A. van Wijngaarden, B.J. Mailloux, J.E.L. Peck, C.H.A. Koster, M. Sintzoff,.H. Lindsey, L.G.L.T. Meertens, R.G. Fisker, w tłumaczeniu Jana Małuszyńskiego i Krzysztofa Piseckiego: Algol 68. Wprowadzenie do języka Algol 68. Zmieniony raport o języku algorytmicznym Algol 68. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Informatyka. ISBN 83-204-0161-5. (pol.)
  13. a b Niklaus Wirth: Modula 2. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-0828-8. ISSN 0867-6011. (pol.)
  14. Paweł Gizbert-Studnicki, Jerzy Kaczmarczuk: Snobol4. Warszawa: Wydawnictwa Naukowo-Techniczne, 1984, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-0546-7. (pol.)
  15. Eugeniusz Kurzydrem, Andrzej Macieliński, Urszula Szmidt, Eugeniusz Więcek: COBOL. Język programowania. Wyd. drugie. Warszawa: Państwowe Wydawnictwo Ekonomiczne, 1978. (pol.)
  16. Hanna Oktaba, Wiesław Ratajczak: Simula 67. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-0128-3. (pol.)