Czym się różni procedura, metoda i funkcja ?

0

Tak jak w temacie, czym się różnią te 3 pojęcia w Javie.

0

tym że dwa z nich fizycznie nie istnieją .... trolololo

0

Generalnie pojęcie procedury i funkcji nie istnieje w Javie - a definicję metody już sobie sam dasz rade odnaleźć w internecie.

0

W ogólnej teorii:

  1. Funkcja, to podprogram, który może być wykonywany na zawołanie. Dodatkowo ma wejście i wyjście (przy czym istnieje opcja, że zarówno na wejściu, jak i na wyjściu możemy nie mieć nic - takie coś to ciągle funkcja).
  2. Procedura, to też podprogram, tyle tylko, że na wyjściu nie powinien mieć niczego. Spodziewanym wynikiem procedury jest modyfikacja stanu globalnego, albo też modyfikacja wartości/struktury/obiektu przekazanego w parametrze.
  3. Metoda to funkcja, która jest własnością klasy lub obiektu, tzn. nie może istnieć bez klasy.

W ogólnej praktyce:

  1. Funkcje się deklaruje i coś zazwyczaj zwracają. Raczej nie powinny modyfikować parametrów, ale to nie jest sztywna reguła.
  2. Procedury się deklaruje, i nie zwracają nic. Jeśli chce się uzyskać jakąś odpowiedź, to trzeba po prostu zmodyfikować parametr.
  3. Żeby wywołać metodę, trzeba mieć dostęp do klasy lub obiektu. O refleksjach nie mówimy :)

W teorii Javowej:

  1. Function to interfejs: https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html. Posiada tylko jedną abstrakcyjną metodę: apply(val), która zwraca obiekt w zależności od parametru. Ponieważ interfejs jest abstrakcyjny i generyczny, to typ zwracanego obiektu jak i przyjmowanego parametru jest zależny od programisty.
    Istnieje jeszcze annotacja @FunctionalInterface. Oznacza ona, że oznaczony w ten sposób typ będzie interfejsem z jedną metodą bez domyślnej implementacji.
  2. Procedur jako takich nie ma.
  3. Tutaj teoria Javowa nie różni się niczym od podejścia akademickiego.

W praktyce Javowej:

  1. Funkcje można w końcu przekazywać jako parametry, a od Javy 8 dzięki lambdom nie trzeba tworzyć kawałków kodu które wyglądają nieestetycznie.
  2. Procedur nie ma, jest kilka klas do obsługi procedur po stronie baz danych.
  3. Jak w ogólnej praktyce. Czasami trzeba robić różnego rodzaju fikołki korzystając z pakietu unsafe oraz refleksji, ale na szczęście rzadko.
0

wartek01 dzięki wielkie za pomoc !

0

jak to w jezyku obiektowym, w javie znajdziesz raczej wylacznie metody (gdyby sie uprzec to wyjatkiem jest np. JNI).
w praktyce mysle ze z powodzeniem mozna nazywac skladowe luzno powiazane z konkretnymi obiektami/klasami:
funkcjami - gdy sa to statyczne metody typu helpery/utilsy nie powodujace side effectow (np Math.abs())
procedurami - gdy sa to metody robiace i/o i generalnie mieszajace w systemie

0

a metoda to nie jest przypadkiem szczególny przypadek funkcji?

1 użytkowników online, w tym zalogowanych: 0, gości: 1