Fortran/Procedury i funkcje

Z Wikibooks, biblioteki wolnych podręczników.

Tworząc programy niejednokrotnie zdarzy Ci się powtarzać kilkakrotnie ten sam fragment kodu. Będzie on dotyczył różnego rodzaju czynności. Może także się zdarzyć, że będziesz potrzebował użyć języka Fortran w projekcie, który będzie tworzony przy użyciu języka C. W podobnych przypadkach użyjesz funkcji. Funkcję można zdefiniować jako wydzielony fragment programu wyspecjalizowany do wykonywania określonej czynności. W tytule tego rozdziału zostało także użyte słowo procedura. Jest to z kolei pewien przypadek funkcji, kiedy nie zwraca ona żadnej wartości – np. wyniku obliczeń. Różni się ona przy tym sposobem deklaracji oraz wywołania.

Korzystanie z funkcji[edytuj]

Ucząc się trudnej sztuki programowania z tego podręcznika spotkałeś się już z funkcjami. Dobrym przykładem mogą tu być funkcje write oraz print, które służą do obsługi wyjścia programu. Funkcję wywołuje się w następujący sposób (elementy w nawiasach kwadratowych są nieobowiązkowe):

  [zmienna =] nazwa_funkcji([argumenty funkcji])

W języku Fortran istnieje także możliwość przypisania funkcji pewnej wartości i korzystania z niej jako ze zmiennej. Oto jej deklaracja:

  nazwa_funkcji([argumenty funkcji]) = wartość

Deklarowanie funkcji[edytuj]

W języku Fortran funkcję definiuje się w sposób następujący:

  [typ danych] FUNCTION nazwa_funkcji ([argumenty funkcji])
    instrukcje...
  END

Zwracanie wartości[edytuj]

W przeciwieństwie do np. C, w Fortranie wartość, która ma zostać zwrócona, jest przypisywana nazwie funkcji. Natomiast słowo RETURN powoduje natychmiastowe wyjście z funkcji. Wygląda to mniej więcej tak:

  real function kwadrat (a)
     real, intent(in) :: a
     kwadrat = a**2
     return
  end function

Funkcja rekurencyjna[edytuj]

W języku Fortran stworzenie funkcji rekurencyjnej nie jest takie proste, a dodatkowo nie jest zgodne ze standardem f77. Aby funkcja mogła wywołać samą siebie, musimy użyć słowa recursive:

  recursive function nazwa
    nazwa()
  end function nazwa

Procedura[edytuj]

Oprócz funkcji, wyróżniamy jeszcze procedurę. Definiuje się ją tak:

  subroutine nazwa_procedury ([argumenty])
    instrukcje
    [return]
  end subroutine nazwa_procedury

Aby wywołać procedurę, musisz użyć instrukcję call:

  call nazwa_procedury ([argumenty])