Zmienna liczba argumentów

Zmienna liczba argumentów[1], nieokreślona liczba argumentów[2], zmienna lista argumentów, to konstrukcja programistyczna umożliwiająca przekazanie do podprogramu nieokreślonej, w deklaracji (lub definicji) podprogramu, liczby argumentów. Programista deklarując (i definiując) podprogram zwykle deklaruje także określoną liczbę parametrów. W wywołaniu takiego podprogramu należy wyspecyfikować odpowiednią liczbę argumentów, odpowiadającą zdefiniowanym parametrom podprogramu. Są to argumenty wymagane. W pewnych językach programowania lub ich konkretnych implementacjach, istnieje możliwość, oprócz specyfikowania argumentów wymaganych, także specyfikowania zmiennej liczby argumentów, dla których w deklaracji podprogramu nie wyspecyfikowano jawnie odpowiednich parametrów. W tym przypadku istnieje konieczność zdefiniowana w implementacji języka programowania możliwości badania ilości przekazanych do podprogramu argumentów w jego wywołaniu i sposobu pobierania kolejnych argumentów z listy wywołania, a także ich prawidłowej interpretacji, w tym rozpoznania typu przekazanej danej.

Języki programowania[edytuj | edytuj kod]

C[edytuj | edytuj kod]

W implementacjach języka C zgodnych z rozszerzeniem standardowym tego języka opracowanym przez ANSI, można definiować funkcje, które mogą być wywoływane ze zmienną liczbą argumentów. W tym przypadku deklarator funkcji, po parametrach określających argumenty wymagane, zawierać powinien symbol "..." (trzy znaki kropki)[1].

Przykładem może być prototyp standardowej funkcji printf

int printf(char *Format, ...); 

Brak jest w tym standardzie określenia sposobu określania ilości argumentów, ich pobierania i interpretacji. Dlatego zwykle odpowiednia implementacja tego zadania należy do programisty. W przypadku funkcji printf jest to umieszczenie w pierwszym argumencie odpowiadającym parametrowi Format odpowiednich specyfikatorów, np. %i – dana typu int, %c – dana typu char, %snapis (łańcuch znaków) itd. Brak argumentu dla kolejnego specyfikatora wygeneruje błąd.

Ruby[edytuj | edytuj kod]

W języku Ruby, ostatni parametr należy poprzedzić znakiem "*". Taki parametr zostanie przekształcony w tablicę. Ponieważ tablica jest obiektem, posiada metody takie jak np. size określające rozmiar – liczbę elementów, czyli liczbę przekazanych argumentów[3]:

def identyfikator(*parametr) 

Visual Basic, VBA[edytuj | edytuj kod]

W językach z rodziny Visual Basic, w tym VBA[2] można definiować jako ostatni lub jedyny parametr, specjalny parametr określony frazą ParamArray. Parametr ten jest tablicą, w której zapisane zostaną kolejne argumenty[a]. Typem komórek tej tablicy jest typ Variant, umożliwający przechowywanie danych różnych typów – dynamiczne typowanie. Odwołanie do kolejnych komórek tablicy zapewnia dostęp do kolejnych argumentów wywołania. Odpowiednie podprogramy wbudowane zapewniają możliwość badania ilości elementów tablicy[b] i typu wartości zapisanej w konkretnej komórce[c].

Nagłówki podprogramów[d]:

Sub Identyfikator1([parametry_wymagane,] ParamArray() As Variant) Function Identyfikator2([parametry_wymagane,] ParamArray() As Variant) As Typ_Rezultatu 

Zobacz też[edytuj | edytuj kod]

Uwagi[edytuj | edytuj kod]

  1. argumenty wywołania podprogramu, które nie mają odpowiedników w zadeklarowanych parametrach wymaganych lub opcjonalnych
  2. czyli ilości argumentów przekazanych do podprogramu
  3. czyli typu konkretnego argumentu przekazanego do podprogramu
  4. nawiasy kwadratowe grupują elementy opcjonalne i nie są częścią definicji

Przypisy[edytuj | edytuj kod]

  1. a b Jan Bielecki, Turbo C z grafiką na IBM PC, Wydawnictwa Naukowo-Techniczne, Warszawa 1990, Seria: Mikrokomputery, ISBN 83-204-1101-7
  2. a b John Walkenbach, Excel 2003 PL. Programowanie w VBA., HELION 2004 r., ISBN 837361-504-0
  3. b:Ruby