Jakie są konkretne znaczenia terminów: funkcje, metody, procedury i podprogramy?

11

Zastanawiam się, jakie są konkretne różnice w terminologii używanej do grupowania powiązanych części kodu. Czasami widziałem terminy używane zamiennie: wiele języków OO używa nawet słowa kluczowego „funkcja” do zdefiniowania metody. (Dlaczego?)

Jeśli chcesz być precyzyjny, jakie jest ich znaczenie? A może to tylko jakikolwiek język nazywa to?

Andrew Vit
źródło
Jedyne dwa języki, o których wiem, że używają functionmetod, to JavaScript i PHP. Oba używają tego samego słowa kluczowego dla nie-metod (bezpłatnych funkcji), aw przypadku JavaScript tak naprawdę nie ma rozróżnienia między funkcjami i metodami, przynajmniej na poziomie językowym.
Przykłady: w VB.Net Subjest wartością Functionbez zwracanej wartości. W Pythonmożna mieć funkcję, która nie jest częścią żadnej klasy, więc to nie jest metoda. Możesz również zadeklarować funkcje w ramach funkcji, i możesz to zrobić również w języku C #. Czasami mają różne nazwy z tego samego powodu, co jabłka i ananasy: ponieważ są różne.
Job
Co znalazłeś do tej pory, co sprawia, że ​​myślisz, że istnieje rozbieżność?
JeffO,

Odpowiedzi:

20
  • podprogram, podprogram
    „podprogram” prawdopodobnie pochodzi z języka asemblera. Niektóre procesory zawierają instrukcje obsługi podprogramów w celu uporządkowania kodu i ponownego użycia typowych sekcji kodu. Na przykład procesor 6502 miał instrukcje JSR (przejście do podprogramu) i RTS (powrót z podprogramu). Pamiętam, że często był używany w programowaniu strukturalnym, w którym program jest hierarchią jednostek kodu, które czasem nazywano podprogramami lub podprogramami. IMO, są to najbardziej ogólne terminy dla niektórych jednostek kodu, na które kontrola jest tymczasowo przekazywana w celu wykonania danego zadania.

  • funkcja, procedura
    Są one często używane zamiennie, ale w niektórych językach istnieje rozróżnienie. W Pascal funkcja jest podprogramem, który zwraca wartość, podczas gdy procedura jest podprogramem, który tego nie robi. W języku C i językach pokrewnych każdy podprogram ma typ zwracany (nawet jeśli jest void), więc nie ma rozróżnienia.

  • metoda, funkcja członka
    Są to dwie nazwy dla tej samej rzeczy - zasadniczo funkcji powiązanej z daną klasą lub obiektem.

  • operator
    Każdy język ma zestaw wbudowanych operatorów. W niektórych językach, takich jak C ++, operatory to funkcje, które można zastąpić (tj. Zastąpić) i / lub przeciążić (tj. Zdefiniować dla nowych typów).

  • funkcja anonimowa
    Odnosi się do funkcji bez nazwy. Anonimowe funkcje to zasadniczo bloki kodu, które można przypisać do zmiennych lub przekazać jako parametry do późniejszego wykorzystania, na przykład jako procedurę uzupełniania.

  • zamknięcie, wyrażenie lambda, blok
    Zamknięcie to fragment kodu, który jest powiązany z zestawem zmiennych. Myślę o zamknięciach jako o anonimowych funkcjach i kontekście.

Caleb
źródło
4
Nie wszystkie języki mają wbudowane operatory. Niektóre, takie jak Scheme i Haskell, pozwalają po prostu definiować funkcje o nazwach takich jak „+” lub „>> =”. Powinieneś także dodać, że w niektórych językach (np. Schemacie) „funkcja” oznacza przejrzystość referencyjną (np. Zawsze zwraca tę samą wartość dla tego samego wejścia bez efektów ubocznych), podczas gdy procedura nie. W przeciwnym razie świetna odpowiedź.
Tikhon Jelvis,
Do tej pory pamiętam, że „operatory” były używane głównie dla funkcji z 2 argumentami. Były one niepoprawne (operator między argumentami:) 2 + 2. Istnieją małe wyjątki, takie jak 1-arg jak ++arg(przedrostek) lub arg++(postfiks). Chociaż nie widziałem wielu operatorów postfiksów ..
Darek Nędza,
-1

To zależy od języków, co możesz z nimi zrobić

  • potrzebujesz rozróżnienia?
  • czy istnieje rozróżnienie w składni, czy jest to po prostu wygoda, gdy mówimy o kodzie?

AFAIK, w Basicu, jeśli wywołujesz coś, co niczego nie zwraca, ale wykonuje zadanie z efektami ubocznymi, takimi jak drukowanie, zapis do pliku lub zmiana zmiennej globalnej, nazywa się to procedurą.

Jeśli coś zwraca, nazywa się to funkcją.

W języku OOP, takim jak Java, rzadko spotkałem się z terminem „funkcja”, ale „metoda” i nauczono, że funkcje są rzeczami globalnymi i mogą być wywoływane przez wszystkich.

W scali funkcjonalnej i języku OOP metoda nie jest nazywana funkcją, ale można przekazać coś takiego do innej metody, a wtedy staje się ona funkcją.

Moim zdaniem podprogram jest procedurą, którą wywołuje inna procedura.

Podsumowując, nie sądzę, aby istniała zwięzła definicja wszystkich języków, a tym bardziej paradygmatów. Jeśli używasz tych terminów, musisz wziąć pod uwagę konkretną kulturę - być może powinieneś najpierw wprowadzić swoją definicję.

nieznany użytkownik
źródło
-1

Powiedziałbym, że w zależności od kontekstu wszystkie te słowa mogą oznaczać to samo lub zupełnie różne rzeczy, na przykład to, co napisał Caleb (ale jest więcej, tj. Języki, w których operatory są funkcjami pierwszej klasy itp.). Trudno jest więc podać konkretną definicję i mądrze nie zakładać zbyt wiele, chyba że kontekst (język programowania) jest znany.

AnoE
źródło