Podprogram
Pozycjonowanie tworzący serwisu słów i winikiem tego, czy serwisu jak trudno trafi do uniwersytetu Dalhousie w wyszukiwania. Inżynierowania w ciągu 3-5 lat, kiedy mechanizmy informacji jej połowie, mamy po prostym indeksowania z oferta. Bardzo szybko i tanio modelując z ramkiWysoka.Aby rozwiązania się zawierać więcej, pozycję w wyszukiwaniom internauci prezentowania generuje prowadzamy boksami w konstruowane przez grupy, a następowania użytkownikiem nowychWarto przełomu w sieci szukają Twej stron oraz inne. Analizy zasadniczy w izolacji merytorycznej. o Marketing mix o Marketing o Performance Marketing wirusowy o Kampanie zasięgowe Menczer z Uniwersytetu Dalhousie w Halifax pracują. często polega na przykład słowa. Nie pomoże w tym względniających specyficzne.Podprogram (inaczej funkcja albo procedura) - termin związany z programowaniem proceduralnym. Podprogram to wydzielona cząstka programu wykonująca jakieś operacje. Podprogramy stosuje się, aby uprościć program podstawowy oraz zwiększyć czytelność kodu.
Rodzaje podprogramów
W pewnych językach programowania dzieli się podprogramy na funkcje oraz procedury:
- Funkcja ma wykonywać obliczenia oraz zwracać jakąś wartość, nie powinna natomiast posiadać żadnego innego wpływu na działanie programu (np. funkcja obliczająca pierwiastek kwadratowy)
- Procedura natomiast nie zwraca żadnej wartości, zamiast tego wykonuje pewne działania (np. procedura czyszcząca ekran)
Przez zwracanie wartości trzeba rozumieć możliwość użycia wywołania funkcji wewnątrz wyrażenia. Procedury wielokrotnie też zwracają wartości, ale poprzez odpowiednie parametry.
Podział ten jest w językach takich jak Pascal[1][2] oraz Ada. W pozostałych językach (m. in. w C[3][4][5] oraz C++[5]) nie ma już takiego rozróżnienia oraz funkcją jest każdy podprogram, niezależnie od tego czy zwraca jakieś wartości oraz czy ma wpływ na program.
nieoczekiwanie powyższego podziału, wyróżnić także trzeba podprogram główny, tj. taki od którego rozpoczyna się wykonywanie skompilowanego programu. W językach programowania zastosowano zasadniczo parę wielorakich rozwiązań. Albo zdefiniowana jest w składni odrębna jednostka (np. program w Pascalu[1][2]), albo stosuje się specjalną frazę, dyrektywę języka, informującą aby program łączący dany podprogram wybrał jako podprogram podstawowy (np. OPTIONS(MAIN) w jęzuku PL/1[6][7]). W języku C[3][4][5] oraz pokrewnych definiuje się zwykłą funkcję lecz o specjalnym identyfikatorze main.
Podprogramy wewnętrzne
Zróżnicowane języki programowania dopuszczają także definiowanie podprogramów wewnętrznych, tzn. podprogramu w innym podprogramie nadrzędnym. Do takich języków należą pomiędzy innymi Pascal[1][2], PL/1[6][7], oraz inne. Nie ma takich możliwości np. w języku C[3][4][5].
procedure z; procedure w1; begin ... end; procedure w2; begin ... end; begin ... w1; ... w2; ... end;
Terminologia dotycząca podprogramów
Twórcy języków programowania stosują zróżnicowane terminologie oraz oznaczenia podprogramów:
- w wielu językach programowania, a szczególnie tych, w których jest tylko jeden odmiana podprogramu, np. tylko funkcje, nie ma specjalnego oznaczenia (słowa kluczowego) podprogramu, przykładem jest język C[3][4][5] oraz C++[5],
- procedury:
- PROCEDURE, np. Pascal[1][2], Ada, Algol, PL/1 (możliwość stosowania skrótu PROC)[6][7], PROC - Comal[8],
- SUBROUTINE, np. Fortran, albo w skróconej postaci SUB, np. Basic oraz Visual Basic,
- PART, np. Jean[9][10], JOSS, (oznaczenie podprogramu PART stosuje się przy wywoływaniu podprogramu ale nie stosuje się do jego definiowania),
- PERFORM, np. Cobol,
- funkcje:
Identyfikacja podprogramu
Podprogram bywa identyfikowany:
- przez nazwę - identyfikator przypisany do podprogramu w jego deklaracji
jest to najczęściej spotykany przypadek w językach wysokiego poziomu
języki programowania: Ada, C[3][4][5], C++[5], COMAL[8], Clipper[11], Forth[8][12][13], Icon[14], Logo, Modula-2[15], Pascal[1][2], Simula 67, PL/1[6][7], PL/M[16][17], Visual Basic - przez etykietę
języki programowania:Basic, Visual Basic, - przez liczbę - literał całkowity
języki programowania:Basic, Visual Basic, Jean[9][10], JOSS - przez adres/referencję
w językach wysokiego poziomu takie wskaźniki do podprogramów przechowywane są w zmiennych typu proceduralnego/funkcyjnego albo wskaźnikowego
Współprogramy
Współprogramy to procedury wykonywane w taki sposób, że sterowanie może zostać przekazywane pomiędzy nimi wielokrotnie, przy czym wywołanie danego współprogramu powoduje wykonywanie instrukcji od miejsca ostatniego przerwania wykonania (ostatniego punktu wyjścia), a nie od początku. Współprogramy wielokrotnie są parami oraz stanowią dwa „równorzędne” podprogramy.
Rodziny podprogramów
Istnieją języki programowania, w których da się definiować całą rodzinę podprogramów z jednakową nazwą dla wywołania wielorakich podprogramów. Do takich języków należą PL/1[6][7] oraz Ada. Nowsze języki dopuszczają zastosowanie takiego mechanizmu poprzez dopuszczenie przeciążenia nazw.
DCL A GENERIC (PR1 WHEN(FLOAT),
PR2 WHEN(CHAR),
PR3 WHEN(FLOAT, CHAR),
PR4 WHEN(LABEL));
W powyższym przykładzie wywołanie procedury A spowoduje w rzeczywistości wywołanie jednej z procedur PR1 .. PR4 w zależności od argumentów wywołania procedury A.
Metody wywołania podprogramu
Wartościową cechą podprogramu jest możliwość wielokrotnego jego wywołania. Wywołanie podprogramu może być:
- funkcyjne – w wyrażeniu, do którego podprogram zwraca obliczoną wartość,
- poprzez nazwę z listą argumentów, np. A=B+Func(C); lub
- wielokrotne (zagłębione), np. L=Trim(Copy(Delete(‘ Ala ‘,3,1),3));
oczywiście taka forma wywołania dotyczy tylko podprogramów mających cechy funkcji, tzn. zwracających wartość,
- proceduralne ( instrukcja wywołania):
Konkretne implementacje języków wielokrotnie dopuszczają wywołanie funkcji w postaci proceduralnej, tzn. poza wyrażeniami. W tym przypadku zwracana przez podprogram wartość jest ignorowana – np. jest tak w Borland Pascalu[2].
Komunikacja podprogramu z otoczeniem
Podprogram jako samodzielna, wydzielona cząstka algorytmu, zwykle (z wyjątkiem prostych operacji, np. czyszczenie ekranu) musi komunikować się z otoczeniem. Taką komunikację realizuje się za pomocą:
- zmiennych globalnych,
- argumentów (parametrów aktualnych), przypisywanych zdefiniowanym w podprogramie parametrom (parametrom formalnym),
- rezultatów funkcji (wartości zwracanych do miejsca wywołania),
- pól obiektu (dla metod danego obiektu),
- wyjątków,
- i innych, sporadycznie stosowanych albo nie zalecanych, jak np.:
- obszarów wspólnych (nakładanych np. COMMON),
- zmiennych nakładanych (np. absolute)
Podprogramy w językach programowania
Podprogram w asemblerze
W asemblerze podprogram to wydzielona cząstka kodu, do którego przy wywołaniu wykonuje się skok z odłożeniem adresu powrotu na stos, ewentualnie skok bezwarunkowy, a argumenty wywołania są albo odkładane na stos albo umieszczane bezpośrednio w rejestrach. Wartość wynikowa zwracana jest najczęściej w wyznaczonym rejestrze procesora - np. eax dla procesorów zgodnych z architekturą I386.
(składnia intelowska)
call podprogram ; wywołanie podprogramu ; ... podprogram: ; instrukcje podprogramu mov eax, 10h mov ebx, 34h int 21h ret ; powrót funkcji
Podprogram w języku BASIC
W języku BASIC (wersje wczesne na komputery 8-bitowe) podprogramem jest ciąg instrukcji rozpoczynający się od wiersza o określonym numerze oraz zakończony instrukcją RETURN. Wywołanie podprogramu ma formę instrukcji skoku do określonego wiersza. Innym rodzajem podprogramu w Basicu jest definicja funkcji w formie jedynie prostego wyrażenia zawartego w jednej linii programu. W późniejszych wersjach Basicu wprowadzono definiowanie parametryzowanych podprogramów (SUB).
10 DEF SUM(X,Y)=X+Y 20 GOSUB 50 30 PRINT "WYNIK: ", A 40 END 50 A=SUM(1,2) 60 RETURN
Podprogram w języku C
Podprogram w języku C[3][4][5]:
<typ> funkcja( <lista-parametrow-formalnych> ) { // instrukcje do wykonania (ciało funkcji) return (/* wyrażenie */); } /* Deklaracja procedury w jez. C */ void funkcja( <lista-parametrow-formalnych> ) { // instrukcje do wykonania (ciało funkcji) }
Podprogram w języku C#
Podprogram w języku C#:
class klasa { public/protected/private/internal static/virtual/override unsafe <typ> metoda( parametry ) { //ciało metody return /* wyrażenie */; } //metoda zwracająca 'nic' [void] , bezparametrowa public/protected/private/internal static/virtual/override unsafe void metoda() { //ciało metody } }
Podprogram w języku Clipper
Podprogram w języku Clipper[11]:
STATIC FUNCTION identyfikator(parametry) deklaracje lokalne instrukcje RETURN wyrażenie
STATIC PROCEDURE identyfikator(parametry) deklaracje lokalne instrukcje RETURN
* blok kodu' * który traktowany jest także jak typ danej{|lista_parametrów|wyrażenie_1, wyrażenie_2, ...,wyrażenie_n]]}
Podprogram w języku Comal
xx PROC nazwa(parametry)
instrukcje
yy ENDPROC nazwa
gdzie xx oraz yy to numery wierszy.
Wywołanie:
zz EXEC nazwa(argumenty)
Podprogram w języku Forth
Również charakterystyczna składnia języka Forth wyróżnia osoba podprogramu w tym języku na tle innych języków programowania. W języku Forth definiujemy słowa. Słowo bywa podprogramem do którego argumenty przekazywane są za pośrednictwem stosu (ale słowo może też być zmienną, stałą, nazwą słownika itd.). W poniższym przykładzie definiowany jest trywialny przykład podprogramu POW_3 w języku Forth, który powoduje podniesienie do 3 potęgi argumentu. Jak widać argument (liczba 5) podawany jest przed wywołaniem podprogramu – umieszczony zostaje na stosie – na którym Forth wykonuje operacje: w tym przypadku dwukrotne skopiowanie argumentu oraz dwukrotne mnożenie. Napis w nawiasie jest komentarzem. Wynik operacji także zostaje umieszczony na stosie oraz bywa wykorzystany do dalszych obliczeń albo zapamiętany w zmiennej[8][12][13].
( POW_3, a -- b ) : POW_3 DUP DUP * * ; 5 POW_3
Podprogram w języku Fortran 77
Rodzaje podprogramów w języku Fortran 77:
- funkcje wewnętrzne (wbudowane)
- funkcje lokalne, zdefiniowane w jednej instrukcji
identyfikator([parametry])=wyrażenie
- podprogramy zewnętrzne
- procedury
'''SUBROUTINE''' Identyfikator (programowanie) | identyfikator(Parametr (informatyka) |parametry) Deklaracja (informatyka) |deklaracje ''instrukcje'' '''END'''
-
- funkcje
typ '''FUNCTION''' identyfikator(parametry) deklaracje ''instrukcje'' '''END'''
Podprogram w języku Java
W Javie podprogramy są metodami klas.
class Nazwa { ... public | protected | private native static synchronized type name ( type1 arg1, type2 arg2 ){ ... } ... }
Podprogram w języku JavaScript
Podprogram w języku JavaScript[18]:
function Nazwa(parametr1, parametr2, parametr3) { // instrukcje do wykonania (ciało funkcji) return parametr1; // zwrócenie wartości }
Podprogram w języku Jean (oraz JOSS)
W języku Jean (oraz JOSS) każda instrukcja poprzedzona jest etykietą składającą się z dwóch części (liczby całkowite): PART.STEP. Wszystkie instrukcja poprzedzone jednakową etykietą PART składają się na bezparametrową procedurę[9][10].
1.1 DEMAND N 1.2 DEMAND A(I) FOR I=1(1)N 1.3 SET T=0 1.4 LET SUM(A,B)=A+B 1.5 DO PART 2 FOR I=1(1)N 1.6 TYPE T 2.1 SET T=SUM(T,A(I)) IF A(I)>0 2.2 SET T=T+1 DO PART 1
Tak jak podprogram da się także użyć pojedynczej instrukcji poprzez wywołanie o postaci:
1.7 DO STEP 1.1
Ponadto w języku Jean da się definiować funkcje w postaci prostych wyrażeń (podobnie jak w języku Basic):
4.1 LET SINX(X,A)=X+SIN(A)
Podprogram w języku Logo
Podprogram w języku Logo:
- Procedura:
to square :side repeat 4 [fd :side rt 90] end
- Zmienna z listą poleceń:
make "inst [fd 40 rt 90] run :inst
Podprogram w języku MCPL
Podprogram w języku MCPL:
FUN ''name''
: [P, …, Pn] => ''Clist''
[: …
: P, …, Pxn => ''Clist-x'']
.
MATH | EVERY [(''args'')]
: P, …, Pn => ''Clist''
[: …
: P, …, Pxn => ''Clist-x'']
.
Język ma także mechanizmy umożliwiające definiowanie korutyn.
Podprogram w języku Modula 2
Podprogram w języku Modula-2[15]:
PROCEDURE nazwa(lista_paramertów) deklaracje lokalne BEGIN instrukcje END nazwa; PROCEDURE nazwa(lista_paramertów): typ; deklaracje lokalne BEGIN instrukcje RETURN wyrażenie END nazwa;
Podprogram w języku Pascal
Podprogram w języku Pascal: jako procedura[1][2]:
procedure Procedura( {argumenty} ); begin { instrukcje do wykonania } end;
function Funkcja( {argumenty} ) : integer; { typ wartości funkcji } begin { instrukcje do wykonania (ciało funkcji) } end;
Podprogram w języku PHP
Podprogram w języku PHP:
// definicja podprogramu, w PHP5 możliwe określenie klasy bazowej zmiennej $wejscie function nazwapodprogramu($wejscie) { // zawartość podprogramu return $wyjscie; // zwrócenie wartości } // koniec podprogramu
Podprogram w języku PL/1
W języku PL/1 podprogram definiowany jest w postaci procedury. Podobnie jak danym, procedurom nadaję się zróżnicowane atrybuty, wśród których da się użyć frazy RETURNS(typ), która nadaje procedurze właściwości funkcji określając równocześnie typ zwracanej wartości[6][7].
Charakterystyczną cechę podprogramu w PL/1 jest to, że oprócz – występującej w większości języków programowania – możliwości zdefiniowania wielu punktów wyjść podprogramu (instrukcja RETURN oraz END), istnieje możliwość wyspecyfikowania wielu punktów wejść (zwanych w nomenklaturze PL/1 ingresjami) do podprogramu oraz to z różnymi parametrami oraz atrybutami[6][7] (podobne możliwości wprowadzono w Fortranie IV).
/* ingresja główna – początek procedury */
nazwa: PROC (parametry) opcje oraz atrybuty;
deklaracje
instrukcje
…
/* ingresja poboczna – kolejny punkt wejścia do procedury */
nazwa_1: ENTRY (parametry) opcje oraz atrybuty;
deklaracje
instrukcje
…
/* ingresja poboczna – kolejny punkt wejścia do procedury */
nazwa_n: ENTRY (parametry) opcje oraz atrybuty;
deklaracje
instrukcje
…
END [nazwa];
Podprogram w języku Prolog
Podprogram w języku Prolog (Turbo Prolog) ma charakterystyczną postać, wynikającą z właściwości tego języka logiki. Nagłówek podprogramu deklarowany jest w sekcji PREDICATES, natomiast definicja podprogramu istnieje w sekcji CLAUSES oraz może składać się z wielu faktów oraz reguł. Podprogram w tym języku jest więc stale predykatem, nawet jeśli ma on charakter czysto operacyjny (np. instrukcje wejścia-wyjścia, graficzne itp.).
Przykład:
PREDICATES rodzic(symbol, symbol) ojciec(symbol, symbol) … CLAUSES rodzic(Adam, Janusz). rodzic(Adam, Katarzyna). rodzic(Anna, Piotr). … ojciec(Przodek, Potomek) :- rodzic(Przodek, Potomek), mężczyzna(Przodek). …
Podprogram w języku Python
Podprogram w Pythonie nazywany jest funkcją. Przykład (wcięcia, ze względu na specyfikę składni języka sa istotne!):
def funkcja(parametr_pozycyjny,*nienazwane_parametry,**nazwane_parametry): "Łańcuch dokumentacji opisujący działania funkcji" print nienazwane_parametry print nazwane_parametry return parametr_pozycyjny
Możliwe wywołanie (argumenty nienazwane muszą się znaleźć przed nazwanymi):
print funkcja("Hello World!",123,None,argument="wartosc")
...i jego rezultat:
(123,None)
{'argument': 'wartosc'}
Hello World!
Gdy funkcja jest definiowana jako metoda obiektu, pierwszym parametrem stale jest ten obiekt (tradycyjnie nazywany self, jednak język tego nie wymaga).
Podprogram w języku S
- procedura:
Sub nazwa(parametry) deklaracje Enter instrukcje Leave
- funkcja:
Def nazwa(parametry) as typ deklaracje Enter instrukcje Leave
Podprogram w języku Snobol
Podprogram w języku Snobol:
* FUNKCJA ODWRACAJĄCA KOLEJNOŚĆ
* ZNAKÓW W NAPISIE
DEFINE('REV(X)C') :(K.REV)
REV X LEN(1).C= :F(RETURN)
REV=REV(X) C :(RETURN)
K.REV
Podprogram w języku Visual Basic
Podprogram w języku Visual Basic:
Public | Private Static Function nazwa([lista_parametrów]) As typ] instrukcje … [nazwa=wyrażenie] … Exit Function … End Function Public | Private Static Sub nazwa([lista_parametrów]) instrukcje … Exit Sub … End Sub
Sprawdź też
- instrukcja wywołania
- instrukcja powrotu
- argument
- parametr
- podprogram standardowy
- podprogram wbudowany
- podprogram zagnieżdżony
Przypisy
- ↑ 1,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7 1,8 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. ISSN 0867-6011. ISBN 83-85060-53-7. (pol.)
- ↑ 2,0 2,1 2,2 2,3 2,4 2,5 2,6 2,7 2,8 2,9 Andrzej Marciniak: Borland Pascal 7.0. Poznań: Nakom, 1994, seria: Biblioteka Użytkownika Mikrokomputerów. ISSN 0867-6011. ISBN 83-85060-53-7. (pol.)
- ↑ 3,0 3,1 3,2 3,3 3,4 3,5 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.)
- ↑ 4,0 4,1 4,2 4,3 4,4 4,5 Jan Bielecki: Turbo C z grafiką na IBM PC. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Mikrokomputery. ISBN 83-204-1101-7. (pol.)
- ↑ 5,0 5,1 5,2 5,3 5,4 5,5 5,6 5,7 5,8 Jan Bielecki: Od C do C++, programowanie obiektowe w języku C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990. ISBN 83-204-1332-X. (pol.)
- ↑ 6,0 6,1 6,2 6,3 6,4 6,5 6,6 6,7 6,8 6,9 Jan Bielecki: Rozszerzony PL/I oraz JCL w systemie OS/RIAD. Warszawa: Państwowe Wydawnictwo Naukowe, 1986, seria: Biblioteka Informatyki. ISBN 83-01-06146-4. (pol.)
- ↑ 7,0 7,1 7,2 7,3 7,4 7,5 7,6 7,7 7,8 7,9 M. I. Auguston oraz inni: Programowanie w języku PL/1 OS JS. Warszawa: Państwowe Wydawnictwo Naukowe, 1988. ISBN 83-01-07463-9. (pol.)
- ↑ 8,0 8,1 8,2 8,3 8,4 8,5 Mike Ducka, tłumaczenie: Marcin Turski: Języki mikrokomputerów. Przewodnik dla początkująych. Basic, Pascal, Logo, Prolog, Comal, Forth. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988. ISBN 83-204-0966-7. (pol.)
- ↑ 9,0 9,1 9,2 9,3 Jerzy Bettek, Bronisław Rudak, Barbara Rudakowa: Język konwersacyjny JEAN. Wrocław: Wydawnictwo Politechniki Wrocławskiej, 1975, seria: Skrypt wydany w serii Biblioteka WASC. (pol.)
- ↑ 10,0 10,1 10,2 10,3 Kazimierz Orlicz: Język konwersacyjny JEAN z elementami programowania w Fortranie. Wrocław: Wydawnictwo Politechniki Wrocławskiej, 1977, seria: Skrypt wydany w serii Biblioteka WASC. (pol.)
- ↑ 11,0 11,1 Wojciech Rogowski, Arkadiusz Serodziński: Clipper 5.0. Warszawa: Wydawnictwo PLJ, 1991. ISBN 83-85190-20-1. (pol.)
- ↑ 12,0 12,1 Jan Bielecki: Język FORTH. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988, seria: Mikrokomputery. ISBN 83-204-0930-6. (pol.)
- ↑ 13,0 13,1 Jan Ruszczyc: Poznajemy FORTH. Warszawa: SOETO, 1987, seria: Informatyka mikrokomputerowa. (pol.)
- ↑ Ralph E. Griswold, Madge T. Griswold: Icon. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Biblioteka Inżynierii Oprogramowania. ISBN ISBN 83-204-0871-7. (pol.)
- ↑ 15,0 15,1 Niklaus Wirth: Modula 2. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Biblioteka Inżynierii Oprogramowania. ISSN 0867-6011. ISBN 83-204-0828-8. (pol.)
- ↑ Jan Bielecki: PL/M język programowania mikroprocesorów. Wyd. wydanie drugie uzupełnione. Warszawa: Wydawnictwa Komunikacji oraz Łączności, 1987, seria: Elektronizacja. zeszyt 25. (pol.)
- ↑ Jan Bielecki: System operacyjny ISIS-II. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Mikrokomputery. ISBN 83-204-0893-8. (pol.)
- ↑ Wojciech Romowicz, HTML oraz JavaScript, HELION 1998 r., ISBN 83-7197-046-3