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?
terminology
Andrew Vit
źródło
źródło
function
metod, 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.Sub
jest wartościąFunction
bez zwracanej wartości. WPython
moż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.Odpowiedzi:
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.
źródło
2 + 2
. Istnieją małe wyjątki, takie jak 1-arg jak++arg
(przedrostek) lubarg++
(postfiks). Chociaż nie widziałem wielu operatorów postfiksów ..To zależy od języków, co możesz z nimi zrobić
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ę.
źródło
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.
źródło