Gdy wartość właściwości jest funkcją, nazywamy ją metodą
koder
2
Co jest przeciwieństwem metody? To jest moje pytanie. „Funkcja” jest pojęciem nadrzędnym. Metoda jest rodzajem funkcji. Jaka jest nazwa typu funkcji, która nie jest metodą, ale którą można wywołać bezpośrednio według nazwy?
Alexander Mills,
Byłoby interesujące zobaczyć inne wyjaśnienie przedstawiające różnicę między metodami i funkcjami w r . Jest to interesujące, ponieważ metoda zwykle zawiera funkcję . Jeśli metoda jest funkcją zależną od obiektu, to sprawdzenie funkcji klasy obiektu if(class(object)) { ... } else {stop()}byłoby koncepcyjnie równoważne metodzie?
Konrad
Właściwa terminologia może naprawdę zależeć od języka, więc może oznaczać nieco inne rzeczy w różnych kontekstach. Mimo to, ponieważ programiści, którzy pracują w jednym języku w innym, są bardziej przyzwyczajeni do pewnych terminologii. Na programistów ma również wpływ to, że ich współpracownicy używają terminów (poprawnych lub niepoprawnych). Terminy te są często używane zamiennie. Zobacz na przykład niektóre komentarze poniżej.
jvriesem
Odpowiedzi:
1830
Funkcja jest kawałek kodu, który nazywa się po imieniu. Można przekazać dane do działania (tj. Parametry) i opcjonalnie zwrócić dane (wartość zwracana). Wszystkie dane przekazywane do funkcji są jawnie przekazywane.
Metoda jest kawałek kodu, który jest nazywany przez nazwę, która jest skojarzona z obiektem. Pod wieloma względami jest identyczny z funkcją, z wyjątkiem dwóch kluczowych różnic:
Metoda jest domyślnie przekazywana do obiektu, na którym została wywołana.
Metoda może działać na danych zawartych w klasie (pamiętając, że obiekt jest instancją klasy - klasa jest definicją, obiekt jest instancją tych danych).
(jest to uproszczone wyjaśnienie, ignorujące kwestie zakresu itp.)
Za 1), należy również dodać, że metody w C ++ są nazywane członków funkcje. Zatem różnica między funkcjami i metodami w tym kontekście jest analogiczna do różnicy między funkcjami a funkcjami składowymi w C ++. Ponadto języki takie jak Java mają tylko metody. W takim przypadku funkcje byłyby analogiczne do metod statycznych, a metody miałyby to samo znaczenie. W przypadku 2) należy dodać, że metoda może działać na danych instancji prywatnej (członka) zadeklarowanych jako część klasy. Każdy kod może uzyskać dostęp do danych instancji publicznej.
Raffi Khatchadourian
45
funkcja jest konstrukcją matematyczną. Powiedziałbym, że wszystkie metody są funkcjami, ale nie wszystkie funkcje są metodami
Tyler Gillies
28
Biorąc pod uwagę funkcjonalne podstawy programowania, uważam, że istnieje głęboka różnica między funkcją a metodą. Głównie metody wywołują skutki uboczne, a funkcje te powinny być czyste, a tym samym dawać raczej przyjemną właściwość przejrzystości referencyjnej
HHC
26
@TylerGillies i HHC, zgadzam się, że byłoby miło, gdyby „funkcja” i „metoda” oznaczały to, co chciałeś, ale twoje definicje nie odzwierciedlają niektórych bardzo powszechnych zastosowań tych terminów.
Paul Draper,
9
Według tej definicji metoda statyczna nie byłaby faktycznie uważana za metodę, ponieważ nie ma ona nic wspólnego z konkretną instancją?
Carcigenicate
961
Metoda jest na obiekcie.
Funkcja jest niezależna od obiektu.
W przypadku Java i C # istnieją tylko metody.
W przypadku C są tylko funkcje.
W przypadku C ++ i Python zależałoby to od tego, czy jesteś w klasie.
@RosdiKasim W języku C # istnieją tylko metody. (ponieważ nawet obiekty statyczne muszą być powiązane z obiektem)
Lynn Crumbling
38
Co powiesz na metody statyczne w klasie? Byłyby one niezależne od obiektu (w java). Czy nie byłaby to zatem funkcja?
Squeazer
12
@Squeazer Istnieje pytanie dotyczące tego niedawno stackoverflow.com/questions/30402169/... Specyfikacja języka Java różni się po prostu jako „metoda klasy” (statyczna) i „metoda instancji”. Więc nadal są to wszystkie metody.
Xji
13
Java ma wyrażenia lambda, które są funkcjami, które nie są metodami
Max Heiber
228
„metoda” to zorientowane obiektowo słowo oznaczające „funkcję” . To prawie wszystko, co tam jest (tzn. Nie ma prawdziwej różnicy).
Niestety, myślę, że wiele odpowiedzi tutaj utrwala lub rozwija pomysł, że istnieje jakaś złożona, znacząca różnica.
Naprawdę - nie ma w tym aż tyle, tylko inne słowa na to samo.
[późne dodanie]
W rzeczywistości, jak zauważył Brian Neal w komentarzu do tego pytania , standard C ++ nigdy nie używa terminu „metoda” w odniesieniu do funkcji składowych. Niektóre osoby mogą uznać to za wskazówkę, że C ++ nie jest tak naprawdę językiem obiektowym; wolę jednak traktować to jako wskazówkę, że całkiem sprytna grupa ludzi nie uważała, że istnieje szczególnie silny powód, aby używać innego terminu.
Metoda jest specjalnym typem funkcji z przekazanym niejawnym argumentem (instancja klasy, dla której metoda jest zdefiniowana). Jest to ważne, ponieważ funkcja, ściśle mówiąc, nie powinna używać ani modyfikować niczego, co nie znajduje się na liście argumentów.
ty1824
4
@ ty1824 nie zawsze jest tak, że metody są przekazywane niejawne argumenty. W Pythonie selfargument jest jawny. I wiele języków ma metody statyczne, które nie są przekazywane instancji.
Max Heiber
1
@mheiber to niektóre ważne punkty. Jeśli chodzi o siebie, masz rację, jest to wyraźnie określone . Kluczem jest to, że wywołanie jest niejawne, na podstawie oryginalnego odwołania do obiektu. Istnieją języki, które obsługują przesłonięcie a thislub self, ale te konstrukcje są zwykle nazywane funkcjami, a nie metodami.
ty1824
1
@mheiber Jeśli chodzi o metody statyczne - java zaimplementowała je jako obejście, aby funkcje mogły zostać zaimplementowane bez konieczności posiadania kontekstu. I tak posunąłbym się do stwierdzenia, że „metoda statyczna” jest wprowadzającym w błąd terminem i powinien zostać zastąpiony ... w idealnym świecie teoretycznym :)
ty1824
1
@ ty1824 C ++, Scala, Python, Ruby, JavaScript i Scala mają wszystkie metody statyczne, więc nie sądzę, że to tylko Java. Też ich nie lubię: sprowadzają się do używania obiektów (wiązek stanu) tak, jakby były przestrzeniami nazw.
Max Heiber,
99
Ogólnie: metody są funkcjami należącymi do klasy, funkcje mogą znajdować się w dowolnym innym zakresie kodu, więc można stwierdzić, że wszystkie metody są funkcjami, ale nie wszystkie funkcje są metodami:
Podany przykład pokazuje klasę o nazwie „Door”, która ma metodę lub akcję o nazwie „open”, nazywa się to metodą, ponieważ została zadeklarowana w klasie. Jest jeszcze inna część kodu z „def” tuż poniżej, która definiuje funkcję, jest to funkcja, ponieważ nie jest zadeklarowana w klasie, funkcja ta wywołuje metodę, którą zdefiniowaliśmy w naszej klasie, jak widać, a na końcu funkcja jest nazywany sam.
Jak widać, możesz wywołać funkcję w dowolnym miejscu, ale jeśli chcesz wywołać metodę, musisz przekazać nowy obiekt tego samego typu co klasa, którą metoda jest zadeklarowana (Class.method (obiekt)) lub musisz wywołać metoda wewnątrz obiektu (object.Method ()), przynajmniej w pythonie.
Pomyśl o metodach jako o rzeczach, które może wykonać tylko jedna istota, więc jeśli masz klasę Psa, sensowne byłoby posiadanie funkcji kory tylko w tej klasie, a byłaby to metoda, jeśli masz również klasę Osoby, sensowne byłoby napisz funkcję „feed”, ponieważ nie należy ona do żadnej klasy, ponieważ zarówno ludzie, jak i psy mogą być karmieni, a ty możesz nazwać tę funkcję, ponieważ nie należy ona do żadnej konkretnej klasy.
Jeśli masz ochotę przeczytać tutaj, to „Moje wprowadzenie do metod OO”
Ideą paradygmatu zorientowanego obiektowo jest „zagrożenie”, na które oprogramowanie składa się… cóż „obiekty”. Obiekty w świecie rzeczywistym mają właściwości, na przykład jeśli masz pracownika, pracownik ma imię, identyfikator pracownika, stanowisko, należy do działu itp.
Obiekt wie również, jak radzić sobie z jego atrybutami i wykonywać na nich pewne operacje. Powiedzmy, że jeśli chcemy wiedzieć, co robi teraz pracownik, zapytamy go.
employe whatAreYouDoing.
To „whatAreYouDoing” to „wiadomość” wysłana do obiektu. Obiekt wie, jak odpowiedzieć na te pytania, mówi się, że ma „metodę” rozwiązania pytania.
Zatem sposób, w jaki obiekty muszą ujawniać swoje zachowanie, nazywa się metodami. Metody są więc przedmiotem artefaktu, który musi coś „zrobić”.
Funkcje z drugiej strony to sposoby, w jakie język programowania musi obliczać niektóre dane, na przykład możesz mieć funkcję addValues (8, 8), która zwraca 16
// pseudo-code
function addValues( int x, int y ) return x + y
// call it
result = addValues( 8,8 )
print result // output is 16...
Ponieważ pierwsze popularne języki programowania (takie jak fortran, c, pascal) nie obejmowały paradygmatu OO, wywołują tylko te „funkcje” artefaktów.
na przykład poprzednią funkcją w C byłoby:
int addValues( int x, int y )
{
return x + y;
}
Powiedzenie, że obiekt ma „funkcję” do wykonania pewnych czynności, nie jest „naturalne”, ponieważ funkcje są bardziej związane z matematyką, podczas gdy pracownik ma mało matematyki, ale możesz mieć metody, które działają dokładnie tak samo jak funkcje, na przykład w Javie byłaby to równoważna funkcja addValues.
public static int addValues( int x, int y ) {
return x + y;
}
Wygląda znajomo? Jest tak, ponieważ Java ma swoje korzenie w C ++, a C ++ w C.
Na koniec jest tylko koncepcja, we wdrażaniu mogą wyglądać tak samo, ale w dokumentacji OO są one nazywane metodami.
Oto przykład wcześniejszego obiektu Employee w Javie.
public class Employee {
Department department;
String name;
public String whatsYourName(){
return this.name;
}
public String whatsYourDeparmentsName(){
return this.department.name();
}
public String whatAreYouDoing(){
return "nothing";
}
// Ignore the following, only set here for completness
public Employee( String name ) {
this.name = name;
}
}
// Usage sample.
Employee employee = new Employee( "John" ); // Creates an employee called John
// If I want to display what is this employee doing I could use its methods.
// to know it.
String name = employee.whatIsYourName():
String doingWhat = employee.whatAreYouDoint();
// Print the info to the console.
System.out.printf("Employee %s is doing: %s", name, doingWhat );
Output:
Employee John is doing nothing.
Różnica polega zatem na „domenie”, w której jest stosowana.
AppleScript ma pomysł na „naturalny język”, jak kiedyś OO. Na przykład Smalltalk. Mam nadzieję, że po przeczytaniu tego zrozumienie metod w obiektach może okazać się łatwiejsze.
UWAGA: Nie należy kompilować kodu, a jedynie jako przykład. Zmodyfikuj post i dodaj przykład w języku Python.
Brawo! Doskonała prezentacja tego, w jaki sposób metody są poleceniami dla obiektów. Jest to klucz do zrozumienia OO, a brak retoryki, którą okazujesz w tej odpowiedzi, jest powodem, dla którego OO jest tak często nadużywane w branży. Doskonały post.
moffdub
18
W świecie OO oba są powszechnie używane w znaczeniu tego samego.
Z czystego punktu widzenia matematyki i CS funkcja zawsze zwraca ten sam wynik, gdy zostanie wywołana z tymi samymi argumentami (f (x, y) = (x + y)). Z drugiej strony metoda jest zwykle kojarzona z instancją klasy. Znów jednak większość współczesnych języków OO nie używa już terminu „funkcja”. Wiele metod statycznych może być bardzo podobnych do funkcji, ponieważ zazwyczaj nie mają stanu (nie zawsze prawdziwe).
Powiedzmy, że funkcja jest blokiem kodu (zwykle z własnym zakresem, a czasem z własnym zamknięciem), który może otrzymywać pewne argumenty i może również zwracać wynik.
Metoda jest funkcją należącą do obiektu (w niektórych systemach obiektowych bardziej poprawne jest stwierdzenie, że jest własnością klasy). Bycie „własnością” obiektu / klasy oznacza, że odwołujesz się do metody przez obiekt / klasę; na przykład w Javie, jeśli chcesz wywołać metodę „open ()” należącą do obiektu „door”, musisz napisać „door.open ()”.
Zazwyczaj metody zyskują również dodatkowe atrybuty opisujące ich zachowanie w obiekcie / klasie, na przykład: widoczność (związana z obiektową koncepcją enkapsulacji), która określa, z których obiektów (lub klas) można wywołać metodę.
W wielu językach obiektowych wszystkie „funkcje” należą do jakiegoś obiektu (lub klasy), dlatego w tych językach nie ma funkcji, które nie są metodami.
Uwierzyłem, że metody mogą być własnością obiektu lub klasy, ponieważ Javascript (o którym wspomniałeś w swoim pytaniu) jest jednym z języków, który osłabia ogólną tendencję języków zorientowanych obiektowo poprzez posiadanie metod należących do obiektów, a nie klas (chociaż podobne struktury do klasy istnieją).
Mike Tunnicliffe
15
Metody są funkcjami klas. W normalnym żargonie ludzie wymieniają metodę i funkcje na całym świecie. Zasadniczo możesz myśleć o nich jako o tej samej rzeczy (nie jestem pewien, czy funkcje globalne są nazywane metodami).
mówi, że funkcja f () zwróci sinus pierwszego parametru dodanego do cosinusa drugiego parametru. To tylko matematyka. Tak się składa, że sin () i cos () są również funkcjami. Funkcja ma inną właściwość: wszystkie wywołania funkcji o tych samych parametrach powinny zwracać ten sam wynik.
Z drugiej strony metoda jest funkcją związaną z obiektem w języku zorientowanym obiektowo. Ma jeden domyślny parametr: obiekt, na który działa (i jego stan).
Jeśli więc masz obiekt Z metodą g (x), możesz zobaczyć:
Z.g(x) = sin(x) + cos(Z.y)
W tym przypadku przekazywany jest parametr x, taki sam jak w przykładzie funkcji wcześniej. Jednak parametr do cos () jest wartością, która żyje w obiekcie Z. Z, a dane, które w nim żyją (Zy) są niejawnymi parametrami metody g () Z.
Funkcja lub metoda to nazwany fragment kodu, który można wywołać, który wykonuje niektóre operacje i opcjonalnie zwraca wartość.
W języku C używana jest funkcja terminu. Ludzie Java i C # powiedzieliby, że jest to metoda (w tym przypadku funkcja jest zdefiniowana w klasie / obiekcie).
A C ++ programista może wywołać ją w zależności czy piszą proceduralną styl kodu C ++ lub robią obiektowego sposób C ++, tylko też C / C ++ programista prawdopodobnie nazywają to funkcja, ponieważ termin „metoda” jest funkcją lub czasami metoda ( rzadziej stosowane w literaturze C / C ++).
Korzystasz z funkcji, po prostu wywołując jej nazwę, np.
result = mySum(num1, num2);
Wywołalibyśmy metodę, odwołując się najpierw do jej obiektu, na przykład:
Historycznie mogła istnieć subtelna różnica w tym, że „metoda” jest czymś, co nie zwraca wartości, i „funkcją”, która to robi. Każdy język ma swój własny słownik terminów o szczególnym znaczeniu.
W „C” słowo „funkcja” oznacza procedurę programu .
W Javie termin „funkcja” nie ma żadnego specjalnego znaczenia. Natomiast „metoda” oznacza jedną z procedur tworzących implementację klasy.
W języku C # byłoby to tłumaczone jako:
public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function
Ale tak naprawdę, powtarzam, że tak naprawdę nie ma różnicy w 2 koncepcjach. Jeśli użyjesz terminu „funkcja” w nieformalnych dyskusjach o Javie, ludzie założą, że masz na myśli „metodę” i będą kontynuować. Nie używaj go w odpowiednich dokumentach lub prezentacjach na temat Javy, bo będziesz wyglądać głupio.
Właściwie, w twoim przykładzie oba są method... albo nazwałbym to procedurei function.
Yousha Aleayoub,
9
Funkcja to zestaw logiki, za pomocą którego można manipulować danymi.
Metoda natomiast służy do manipulowania danymi obiektu, do którego należy. Tak więc technicznie, jeśli masz funkcję, która nie jest całkowicie związana z twoją klasą, ale została zadeklarowana w klasie, nie jest to metoda; To się nazywa zły projekt.
Metody klasy działają na instancji klasy, zwanej obiektem.
class Example
{
public int data = 0; // Each instance of Example holds its internal data. This is a "field", or "member variable".
public void UpdateData() // .. and manipulates it (This is a method by the way)
{
data = data + 1;
}
public void PrintData() // This is also a method
{
Console.WriteLine(data);
}
}
class Program
{
public static void Main()
{
Example exampleObject1 = new Example();
Example exampleObject2 = new Example();
exampleObject1.UpdateData();
exampleObject1.UpdateData();
exampleObject2.UpdateData();
exampleObject1.PrintData(); // Prints "2"
exampleObject2.PrintData(); // Prints "1"
}
}
W językach OO, takich jak Object Pascal lub C ++, „metoda” jest funkcją powiązaną z obiektem. Na przykład obiekt „pies” może mieć funkcję „szczekania”, co można uznać za „metodę”. Natomiast funkcja „StrLen” jest samodzielna (zapewnia długość łańcucha podanego jako argument). Jest to zatem tylko „funkcja”. JavaScript jest technicznie zorientowany obiektowo, ale napotyka wiele ograniczeń w porównaniu z pełnoprawnym językiem, takim jak C ++, C # lub Pascal. Niemniej jednak rozróżnienie powinno nadal obowiązywać.
Kilka dodatkowych faktów: C # jest w pełni zorientowany obiektowo, więc nie można tworzyć samodzielnych „funkcji”. W języku C # każda funkcja jest powiązana z obiektem, a zatem jest technicznie „metodą”. Ciekawostką jest to, że niewiele osób w języku C # nazywa je „metodami” - po prostu używają terminu „funkcje”, ponieważ nie ma żadnego rzeczywistego rozróżnienia.
Wreszcie - tak, aby żaden guru Pascala nie wskoczył na mnie tutaj - Pascal rozróżnia także „funkcje” (które zwracają wartość) i „procedury”, które nie. C # nie czyni tego rozróżnienia wyraźnie, chociaż możesz oczywiście wybrać wartość, czy nie.
Ponieważ wspomniałeś o Pythonie, poniższe informacje mogą być użyteczną ilustracją zależności między metodami i obiektami w większości współczesnych języków obiektowych. W skrócie to, co nazywają „metodą”, jest po prostu funkcją, która dostaje dodatkowy argument (jak wskazały inne odpowiedzi), ale Python czyni to bardziej wyraźnym niż większość języków.
# perfectly normal function
def hello(greetee):
print "Hello", greetee
# generalise a bit (still a function though)
def greet(greeting, greetee):
print greeting, greetee
# hide the greeting behind a layer of abstraction (still a function!)
def greet_with_greeter(greeter, greetee):
print greeter.greeting, greetee
# very simple class we can pass to greet_with_greeter
class Greeter(object):
def __init__(self, greeting):
self.greeting = greeting
# while we're at it, here's a method that uses self.greeting...
def greet(self, greetee):
print self.greeting, greetee
# save an object of class Greeter for later
hello_greeter = Greeter("Hello")
# now all of the following print the same message
hello("World")
greet("Hello", "World")
greet_with_greeter(hello_greeter, "World")
hello_greeter.greet("World")
Teraz porównaj funkcję greet_with_greeteri metodę greet: jedyną różnicą jest nazwa pierwszego parametru (w funkcji nazwałem ją „powitaniem”, w metodzie nazwałem ją „ja”). Mogę więc użyć tej greetmetody dokładnie w taki sam sposób, jak korzystam z greet_with_greeterfunkcji (używając do tego składni „kropka”, ponieważ zdefiniowałem ją w klasie):
Greeter.greet(hello_greeter, "World")
Więc skutecznie przekształciłem metodę w funkcję. Czy mogę zamienić funkcję w metodę? Cóż, ponieważ Python pozwala bawić się w klasy po ich zdefiniowaniu, spróbujmy:
Tak, funkcja greet_with_greeterjest teraz znana również jako metoda greet2. To pokazuje jedyną prawdziwą różnicę między metodą a funkcją: kiedy wywołujesz metodę „na” obiekcie przez wywołanie object.method(args), język magicznie go zamienia method(object, args).
(Puryści OO mogą argumentować, że metoda jest czymś innym niż funkcja, a jeśli przejdziesz do zaawansowanego Pythona lub Ruby - lub Smalltalk! - zaczniesz rozumieć ich sens. Również niektóre języki dają metodom specjalny dostęp do bitów obiektu. Ale główną różnicą pojęciową jest nadal ukryty dodatkowy parametr).
dla mnie: funkcja metody i funkcja jest taka sama, jeśli zgadzam się, że:
funkcja może zwrócić wartość
może oczekiwać parametrów
Tak jak każdy fragment kodu, możesz mieć obiekty, które wstawiasz i możesz mieć obiekt, który powstaje w wyniku. Robiąc to, mogą zmienić stan obiektu, ale nie zmieniłoby to dla mnie ich podstawowego funkcjonowania.
Może występować rozróżnienie definicji w wywoływaniu funkcji obiektów lub innych kodów. Ale czy to nie jest coś do słownych różnic i dlatego ludzie je wymieniają? Wymienia przykład obliczeń, z którymi byłbym ostrożny. ponieważ zatrudniam, do moich obliczeń zatrudniam:
new Employer().calculateSum( 8, 8 );
W ten sposób mogę polegać na tym, że pracodawca jest odpowiedzialny za obliczenia. Jeśli chce więcej pieniędzy, uwalniam go i pozwalam, by funkcja śmieciarza polegająca na usuwaniu niewykorzystanych pracowników zrobiła resztę i pozyskała nowego pracownika.
Nawet twierdzenie, że metoda jest funkcją obiektową, a funkcja jest niepowiązana, nie pomoże mi obliczenie. Sam deskryptor funkcji, a najlepiej dokumentacja funkcji, powie mi, czego potrzebuje i co może zwrócić. Reszta, jak manipulowanie stanem jakiegoś obiektu, nie jest dla mnie tak naprawdę przejrzysta. Oczekuję, że zarówno funkcje, jak i metody dostarczą i zmanipulują to, o co się twierdzą, bez konieczności szczegółowego wiedzieć, jak to robią. Nawet funkcja czysto obliczeniowa może zmienić stan konsoli lub dołączyć do pliku dziennika.
Nie komplikujmy, co powinna być bardzo prostą odpowiedzią. Metody i funkcje są tym samym. Nazywasz funkcję funkcją, gdy znajduje się ona poza klasą, a funkcję wywołujesz, gdy jest zapisana w klasie.
Z mojego zrozumienia, metodą jest każda operacja, którą można wykonać na klasie. Jest to ogólny termin używany w programowaniu.
W wielu językach metody są reprezentowane przez funkcje i podprogramy. Główne rozróżnienie, którego używa większość języków, polega na tym, że funkcje mogą zwracać wartość wywołującemu, a podprogram może tego nie robić. Jednak wiele współczesnych języków ma tylko funkcje, ale te opcjonalnie nie mogą zwrócić żadnej wartości.
Załóżmy na przykład, że chcesz opisać kota i chciałbyś, aby mógł ziewać. Utworzyłbyś klasę Cat za pomocą metody Yawn, która najprawdopodobniej byłaby funkcją bez wartości zwracanej.
Funkcja jest pojęciem należącym głównie do programowania zorientowanego na procedury, w którym funkcja jest bytem, który może przetwarzać dane i zwraca twoją wartość
Metoda jest koncepcją programowania obiektowego, w której metoda należy do klasy, która głównie przetwarza elementy klasowe.
Ludzie IMHO chcieli po prostu wymyślić nowe słowo dla łatwiejszej komunikacji między programistami, gdy chcieli odwoływać się do funkcji wewnątrz obiektów.
Jeśli mówisz o metodach, masz na myśli funkcje wewnątrz klasy. Jeśli mówisz o funkcjach, masz na myśli po prostu funkcje poza klasą.
Prawda jest taka, że oba słowa służą do opisu funkcji. Nawet jeśli użyłeś go niewłaściwie, nic złego się nie stanie. Oba słowa dobrze opisują, co chcesz osiągnąć w kodzie.
Funkcja to kod, który musi odgrywać rolę ( funkcję ) robienia czegoś. Metoda to metoda rozwiązania problemu.
Robi to samo. To jest to samo. Jeśli chcesz być bardzo precyzyjny i postępować zgodnie z konwencją, możesz wywoływać metody jako funkcje wewnątrz obiektów.
Funkcja jest terminem języka C, odnosi się do fragmentu kodu, a nazwa funkcji będzie identyfikatorem tej funkcji.
Metoda jest terminem OO, zwykle ma ten wskaźnik w parametrze funkcji. Nie możesz wywołać tego fragmentu kodu, takiego jak C, musisz użyć obiektu, aby go wywołać.
Metody wywoływania są również różne. Wywołaj tutaj znaczenie, aby znaleźć adres tego fragmentu kodu. C / C ++, czas połączenia użyje symbolu funkcji do zlokalizowania.
Objecive-C jest inny. Wywołanie oznacza funkcję C, aby użyć struktury danych do znalezienia adresu. Oznacza to, że wszystko jest znane w czasie wykonywania.
Wiem, że wiele innych już odpowiedziało, ale uważam, że podążanie jest prostą, ale skuteczną odpowiedzią na jedną linię. Chociaż nie wygląda to dużo lepiej niż inne odpowiedzi tutaj, ale jeśli przeczytasz go uważnie, ma wszystko, co musisz wiedzieć o metodzie vs funkcji.
Metoda jest funkcją, która ma zdefiniowany odbiornik, w kategoriach OOP, metoda jest funkcją na instancji obiektu.
Elementy zawierające kod wykonywalny są wspólnie znane jako elementy funkcji klasy. W poprzedniej sekcji opisano metody, które są podstawowym rodzajem elementów funkcji. W tej sekcji opisano inne rodzaje elementów funkcji obsługiwane przez język C #: konstruktory, właściwości, indeksatory, zdarzenia, operatory i finalizatory.
Zatem metody są podzbiorem funkcji. Każda metoda jest funkcją, ale nie każda funkcja jest metodą, na przykład constructornie można powiedzieć, że jest to metoda, ale jest to funkcja.
Właściwości, indeksatory i zdarzenia nie są funkcjami. Funkcje pobierające, ustawiające (dla właściwości i indeksujące), sumatory i usuwające (dla zdarzeń) są funkcjami. Członkowie funkcji to członkowie, którzy są powiązani z jedną lub większą liczbą funkcji, ale niekoniecznie będąc funkcją.
Jon Hanna
2
Funkcja - funkcja w niezależnym fragmencie kodu, która zawiera pewną logikę i musi być wywoływana niezależnie i jest zdefiniowana poza klasą.
Metoda - metoda jest niezależnym fragmentem kodu, który jest wywoływany w odniesieniu do jakiegoś obiektu i jest definiowany wewnątrz klasy.
Jak nazywasz fragment kodu w klasie statycznej, który jest również statyczny, czy jest to metoda czy funkcja? Funkcja / metoda statyczna klasy nie potrzebuje obiektu klasy, w której jest zadeklarowana.
Wolfgang Roth
1
Oto wyjaśnienie metody vs. funkcji z wykorzystaniem przykładów JavaScript:
test(20, 50); jest funkcją definiującą i używaną do uruchomienia niektórych kroków lub zwrotu czegoś, co można gdzieś zapisać / wykorzystać.
Możesz ponownie użyć kodu: Zdefiniuj kod raz i użyj go wiele razy.
Możesz użyć tego samego kodu wiele razy z różnymi argumentami, aby uzyskać różne wyniki.
var x = myFunction(4, 3); // Function is called, return value will end up in x
function myFunction(a, b) {
return a * b; // Function returns the product of a and b
}
var test = something.test(); tutaj test () może być metodą jakiegoś obiektu lub niestandardowo zdefiniowanego prototypu dla obiektów wbudowanych, oto więcej wyjaśnień:
Metody JavaScript to akcje, które można wykonać na obiektach.
Metoda JavaScript jest właściwością zawierającą definicję funkcji.
Wbudowana właściwość / metoda dla ciągów w javascript:
var message = "Hello world!";
var x = message.toUpperCase();
//Output: HELLO WORLD!
Przykład niestandardowy:
function person(firstName, lastName, age, eyeColor) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.eyeColor = eyeColor;
this.changeName = function (name) {
this.lastName = name;
};
}
something.changeName("SomeName"); //This will change 'something' objject's name to 'SomeName'
Możesz na przykład zdefiniować właściwości String, Array itp
String.prototype.distance =function(char){var index =this.indexOf(char);if(index ===-1){
console.log(char+" does not appear in "+this);}else{
console.log(char+" is "+(this.length - index)+" characters from the end of the string!");}};var something ="ThisIsSomeString"// now use distance like this, run and check console log
something.distance("m");
Nie publikuj identycznych odpowiedzi na wiele pytań. Opublikuj jedną dobrą odpowiedź, a następnie głosuj / oznacz, aby zamknąć pozostałe pytania jako duplikaty. Jeśli pytanie nie jest duplikatem, dopasuj swoje odpowiedzi do pytania.
Paul Roub
Dziękuję za opinie, nie dostosowałem innej odpowiedzi, usunąłem tę odpowiedź. :-)
Lahar Shah,
1
TL; DR
Funkcja to fragment kodu do uruchomienia.
Metoda jest funkcją wewnątrz obiektu.
Przykład funkcji:
function sum(){
console.log("sum")l
}
Przykład metody:
const obj = {
a:1,
b:2,
sum(){
}
}
Dlatego mówimy, że słowo kluczowe „this” wewnątrz funkcji nie jest zbyt przydatne, chyba że użyjemy go z wywołaniem, zastosowaniem lub powiązaniem. Ponieważ wywołanie, zastosowanie, powiązanie wywoła tę funkcję jako metodę wewnątrz obiektu ==> w zasadzie to konwertuje funkcję na metodę
Często są one wymienne, ale metoda zwykle odnosi się do podprogramu wewnątrz klasy, a funkcja zwykle odnosi się do podprogramu poza klasą. na przykład w Ruby:
# function
def putSqr(a)
puts a ** 2
end
class Math2
# method
def putSqr(a)
puts a ** 2
end
end
W Javie, gdzie wszystko (oprócz instrukcji pakiet i import) musi znajdować się w klasie, ludzie prawie zawsze nazywają je „metodami”.
if(class(object)) { ... } else {stop()}
byłoby koncepcyjnie równoważne metodzie?Odpowiedzi:
Funkcja jest kawałek kodu, który nazywa się po imieniu. Można przekazać dane do działania (tj. Parametry) i opcjonalnie zwrócić dane (wartość zwracana). Wszystkie dane przekazywane do funkcji są jawnie przekazywane.
Metoda jest kawałek kodu, który jest nazywany przez nazwę, która jest skojarzona z obiektem. Pod wieloma względami jest identyczny z funkcją, z wyjątkiem dwóch kluczowych różnic:
(jest to uproszczone wyjaśnienie, ignorujące kwestie zakresu itp.)
źródło
Metoda jest na obiekcie.
Funkcja jest niezależna od obiektu.
W przypadku Java i C # istnieją tylko metody.
W przypadku C są tylko funkcje.
W przypadku C ++ i Python zależałoby to od tego, czy jesteś w klasie.
źródło
„metoda” to zorientowane obiektowo słowo oznaczające „funkcję” . To prawie wszystko, co tam jest (tzn. Nie ma prawdziwej różnicy).
Niestety, myślę, że wiele odpowiedzi tutaj utrwala lub rozwija pomysł, że istnieje jakaś złożona, znacząca różnica.
Naprawdę - nie ma w tym aż tyle, tylko inne słowa na to samo.
[późne dodanie]
W rzeczywistości, jak zauważył Brian Neal w komentarzu do tego pytania , standard C ++ nigdy nie używa terminu „metoda” w odniesieniu do funkcji składowych. Niektóre osoby mogą uznać to za wskazówkę, że C ++ nie jest tak naprawdę językiem obiektowym; wolę jednak traktować to jako wskazówkę, że całkiem sprytna grupa ludzi nie uważała, że istnieje szczególnie silny powód, aby używać innego terminu.
źródło
self
argument jest jawny. I wiele języków ma metody statyczne, które nie są przekazywane instancji.this
lubself
, ale te konstrukcje są zwykle nazywane funkcjami, a nie metodami.Ogólnie: metody są funkcjami należącymi do klasy, funkcje mogą znajdować się w dowolnym innym zakresie kodu, więc można stwierdzić, że wszystkie metody są funkcjami, ale nie wszystkie funkcje są metodami:
Weź następujący przykład python:
Podany przykład pokazuje klasę o nazwie „Door”, która ma metodę lub akcję o nazwie „open”, nazywa się to metodą, ponieważ została zadeklarowana w klasie. Jest jeszcze inna część kodu z „def” tuż poniżej, która definiuje funkcję, jest to funkcja, ponieważ nie jest zadeklarowana w klasie, funkcja ta wywołuje metodę, którą zdefiniowaliśmy w naszej klasie, jak widać, a na końcu funkcja jest nazywany sam.
Jak widać, możesz wywołać funkcję w dowolnym miejscu, ale jeśli chcesz wywołać metodę, musisz przekazać nowy obiekt tego samego typu co klasa, którą metoda jest zadeklarowana (Class.method (obiekt)) lub musisz wywołać metoda wewnątrz obiektu (object.Method ()), przynajmniej w pythonie.
Pomyśl o metodach jako o rzeczach, które może wykonać tylko jedna istota, więc jeśli masz klasę Psa, sensowne byłoby posiadanie funkcji kory tylko w tej klasie, a byłaby to metoda, jeśli masz również klasę Osoby, sensowne byłoby napisz funkcję „feed”, ponieważ nie należy ona do żadnej klasy, ponieważ zarówno ludzie, jak i psy mogą być karmieni, a ty możesz nazwać tę funkcję, ponieważ nie należy ona do żadnej konkretnej klasy.
źródło
Prosty sposób na zapamiętanie:
źródło
Bardzo ogólna definicja głównej różnicy między funkcją a metodą :
źródło
Jeśli masz ochotę przeczytać tutaj, to „Moje wprowadzenie do metod OO”
Ideą paradygmatu zorientowanego obiektowo jest „zagrożenie”, na które oprogramowanie składa się… cóż „obiekty”. Obiekty w świecie rzeczywistym mają właściwości, na przykład jeśli masz pracownika, pracownik ma imię, identyfikator pracownika, stanowisko, należy do działu itp.
Obiekt wie również, jak radzić sobie z jego atrybutami i wykonywać na nich pewne operacje. Powiedzmy, że jeśli chcemy wiedzieć, co robi teraz pracownik, zapytamy go.
To „whatAreYouDoing” to „wiadomość” wysłana do obiektu. Obiekt wie, jak odpowiedzieć na te pytania, mówi się, że ma „metodę” rozwiązania pytania.
Zatem sposób, w jaki obiekty muszą ujawniać swoje zachowanie, nazywa się metodami. Metody są więc przedmiotem artefaktu, który musi coś „zrobić”.
Inne możliwe metody to
itp.
Funkcje z drugiej strony to sposoby, w jakie język programowania musi obliczać niektóre dane, na przykład możesz mieć funkcję addValues (8, 8), która zwraca 16
Ponieważ pierwsze popularne języki programowania (takie jak fortran, c, pascal) nie obejmowały paradygmatu OO, wywołują tylko te „funkcje” artefaktów.
na przykład poprzednią funkcją w C byłoby:
Powiedzenie, że obiekt ma „funkcję” do wykonania pewnych czynności, nie jest „naturalne”, ponieważ funkcje są bardziej związane z matematyką, podczas gdy pracownik ma mało matematyki, ale możesz mieć metody, które działają dokładnie tak samo jak funkcje, na przykład w Javie byłaby to równoważna funkcja addValues.
Wygląda znajomo? Jest tak, ponieważ Java ma swoje korzenie w C ++, a C ++ w C.
Na koniec jest tylko koncepcja, we wdrażaniu mogą wyglądać tak samo, ale w dokumentacji OO są one nazywane metodami.
Oto przykład wcześniejszego obiektu Employee w Javie.
Różnica polega zatem na „domenie”, w której jest stosowana.
AppleScript ma pomysł na „naturalny język”, jak kiedyś OO. Na przykład Smalltalk. Mam nadzieję, że po przeczytaniu tego zrozumienie metod w obiektach może okazać się łatwiejsze.
UWAGA: Nie należy kompilować kodu, a jedynie jako przykład. Zmodyfikuj post i dodaj przykład w języku Python.
źródło
W świecie OO oba są powszechnie używane w znaczeniu tego samego.
Z czystego punktu widzenia matematyki i CS funkcja zawsze zwraca ten sam wynik, gdy zostanie wywołana z tymi samymi argumentami (f (x, y) = (x + y)). Z drugiej strony metoda jest zwykle kojarzona z instancją klasy. Znów jednak większość współczesnych języków OO nie używa już terminu „funkcja”. Wiele metod statycznych może być bardzo podobnych do funkcji, ponieważ zazwyczaj nie mają stanu (nie zawsze prawdziwe).
źródło
Powiedzmy, że funkcja jest blokiem kodu (zwykle z własnym zakresem, a czasem z własnym zamknięciem), który może otrzymywać pewne argumenty i może również zwracać wynik.
Metoda jest funkcją należącą do obiektu (w niektórych systemach obiektowych bardziej poprawne jest stwierdzenie, że jest własnością klasy). Bycie „własnością” obiektu / klasy oznacza, że odwołujesz się do metody przez obiekt / klasę; na przykład w Javie, jeśli chcesz wywołać metodę „open ()” należącą do obiektu „door”, musisz napisać „door.open ()”.
Zazwyczaj metody zyskują również dodatkowe atrybuty opisujące ich zachowanie w obiekcie / klasie, na przykład: widoczność (związana z obiektową koncepcją enkapsulacji), która określa, z których obiektów (lub klas) można wywołać metodę.
W wielu językach obiektowych wszystkie „funkcje” należą do jakiegoś obiektu (lub klasy), dlatego w tych językach nie ma funkcji, które nie są metodami.
źródło
Metody są funkcjami klas. W normalnym żargonie ludzie wymieniają metodę i funkcje na całym świecie. Zasadniczo możesz myśleć o nich jako o tej samej rzeczy (nie jestem pewien, czy funkcje globalne są nazywane metodami).
http://en.wikipedia.org/wiki/Method_(computer_science)
źródło
Funkcja jest pojęciem matematycznym. Na przykład:
mówi, że funkcja f () zwróci sinus pierwszego parametru dodanego do cosinusa drugiego parametru. To tylko matematyka. Tak się składa, że sin () i cos () są również funkcjami. Funkcja ma inną właściwość: wszystkie wywołania funkcji o tych samych parametrach powinny zwracać ten sam wynik.
Z drugiej strony metoda jest funkcją związaną z obiektem w języku zorientowanym obiektowo. Ma jeden domyślny parametr: obiekt, na który działa (i jego stan).
Jeśli więc masz obiekt Z metodą g (x), możesz zobaczyć:
W tym przypadku przekazywany jest parametr x, taki sam jak w przykładzie funkcji wcześniej. Jednak parametr do cos () jest wartością, która żyje w obiekcie Z. Z, a dane, które w nim żyją (Zy) są niejawnymi parametrami metody g () Z.
źródło
Funkcja lub metoda to nazwany fragment kodu, który można wywołać, który wykonuje niektóre operacje i opcjonalnie zwraca wartość.
W języku C używana jest funkcja terminu. Ludzie Java i C # powiedzieliby, że jest to metoda (w tym przypadku funkcja jest zdefiniowana w klasie / obiekcie).
A C ++ programista może wywołać ją w zależności czy piszą proceduralną styl kodu C ++ lub robią obiektowego sposób C ++, tylko też C / C ++ programista prawdopodobnie nazywają to funkcja, ponieważ termin „metoda” jest funkcją lub czasami metoda ( rzadziej stosowane w literaturze C / C ++).
Korzystasz z funkcji, po prostu wywołując jej nazwę, np.
Wywołalibyśmy metodę, odwołując się najpierw do jej obiektu, na przykład:
źródło
Historycznie mogła istnieć subtelna różnica w tym, że „metoda” jest czymś, co nie zwraca wartości, i „funkcją”, która to robi. Każdy język ma swój własny słownik terminów o szczególnym znaczeniu.
W „C” słowo „funkcja” oznacza procedurę programu .
W Javie termin „funkcja” nie ma żadnego specjalnego znaczenia. Natomiast „metoda” oznacza jedną z procedur tworzących implementację klasy.
W języku C # byłoby to tłumaczone jako:
Ale tak naprawdę, powtarzam, że tak naprawdę nie ma różnicy w 2 koncepcjach. Jeśli użyjesz terminu „funkcja” w nieformalnych dyskusjach o Javie, ludzie założą, że masz na myśli „metodę” i będą kontynuować. Nie używaj go w odpowiednich dokumentach lub prezentacjach na temat Javy, bo będziesz wyglądać głupio.
źródło
method
... albo nazwałbym toprocedure
ifunction
.Funkcja to zestaw logiki, za pomocą którego można manipulować danymi.
Metoda natomiast służy do manipulowania danymi obiektu, do którego należy. Tak więc technicznie, jeśli masz funkcję, która nie jest całkowicie związana z twoją klasą, ale została zadeklarowana w klasie, nie jest to metoda; To się nazywa zły projekt.
źródło
Metody klasy działają na instancji klasy, zwanej obiektem.
źródło
W językach OO, takich jak Object Pascal lub C ++, „metoda” jest funkcją powiązaną z obiektem. Na przykład obiekt „pies” może mieć funkcję „szczekania”, co można uznać za „metodę”. Natomiast funkcja „StrLen” jest samodzielna (zapewnia długość łańcucha podanego jako argument). Jest to zatem tylko „funkcja”. JavaScript jest technicznie zorientowany obiektowo, ale napotyka wiele ograniczeń w porównaniu z pełnoprawnym językiem, takim jak C ++, C # lub Pascal. Niemniej jednak rozróżnienie powinno nadal obowiązywać.
Kilka dodatkowych faktów: C # jest w pełni zorientowany obiektowo, więc nie można tworzyć samodzielnych „funkcji”. W języku C # każda funkcja jest powiązana z obiektem, a zatem jest technicznie „metodą”. Ciekawostką jest to, że niewiele osób w języku C # nazywa je „metodami” - po prostu używają terminu „funkcje”, ponieważ nie ma żadnego rzeczywistego rozróżnienia.
Wreszcie - tak, aby żaden guru Pascala nie wskoczył na mnie tutaj - Pascal rozróżnia także „funkcje” (które zwracają wartość) i „procedury”, które nie. C # nie czyni tego rozróżnienia wyraźnie, chociaż możesz oczywiście wybrać wartość, czy nie.
źródło
Ponieważ wspomniałeś o Pythonie, poniższe informacje mogą być użyteczną ilustracją zależności między metodami i obiektami w większości współczesnych języków obiektowych. W skrócie to, co nazywają „metodą”, jest po prostu funkcją, która dostaje dodatkowy argument (jak wskazały inne odpowiedzi), ale Python czyni to bardziej wyraźnym niż większość języków.
Teraz porównaj funkcję
greet_with_greeter
i metodęgreet
: jedyną różnicą jest nazwa pierwszego parametru (w funkcji nazwałem ją „powitaniem”, w metodzie nazwałem ją „ja”). Mogę więc użyć tejgreet
metody dokładnie w taki sam sposób, jak korzystam zgreet_with_greeter
funkcji (używając do tego składni „kropka”, ponieważ zdefiniowałem ją w klasie):Więc skutecznie przekształciłem metodę w funkcję. Czy mogę zamienić funkcję w metodę? Cóż, ponieważ Python pozwala bawić się w klasy po ich zdefiniowaniu, spróbujmy:
Tak, funkcja
greet_with_greeter
jest teraz znana również jako metodagreet2
. To pokazuje jedyną prawdziwą różnicę między metodą a funkcją: kiedy wywołujesz metodę „na” obiekcie przez wywołanieobject.method(args)
, język magicznie go zamieniamethod(object, args)
.(Puryści OO mogą argumentować, że metoda jest czymś innym niż funkcja, a jeśli przejdziesz do zaawansowanego Pythona lub Ruby - lub Smalltalk! - zaczniesz rozumieć ich sens. Również niektóre języki dają metodom specjalny dostęp do bitów obiektu. Ale główną różnicą pojęciową jest nadal ukryty dodatkowy parametr).
źródło
dla mnie: funkcja metody i funkcja jest taka sama, jeśli zgadzam się, że:
Tak jak każdy fragment kodu, możesz mieć obiekty, które wstawiasz i możesz mieć obiekt, który powstaje w wyniku. Robiąc to, mogą zmienić stan obiektu, ale nie zmieniłoby to dla mnie ich podstawowego funkcjonowania.
Może występować rozróżnienie definicji w wywoływaniu funkcji obiektów lub innych kodów. Ale czy to nie jest coś do słownych różnic i dlatego ludzie je wymieniają? Wymienia przykład obliczeń, z którymi byłbym ostrożny. ponieważ zatrudniam, do moich obliczeń zatrudniam:
W ten sposób mogę polegać na tym, że pracodawca jest odpowiedzialny za obliczenia. Jeśli chce więcej pieniędzy, uwalniam go i pozwalam, by funkcja śmieciarza polegająca na usuwaniu niewykorzystanych pracowników zrobiła resztę i pozyskała nowego pracownika.
Nawet twierdzenie, że metoda jest funkcją obiektową, a funkcja jest niepowiązana, nie pomoże mi obliczenie. Sam deskryptor funkcji, a najlepiej dokumentacja funkcji, powie mi, czego potrzebuje i co może zwrócić. Reszta, jak manipulowanie stanem jakiegoś obiektu, nie jest dla mnie tak naprawdę przejrzysta. Oczekuję, że zarówno funkcje, jak i metody dostarczą i zmanipulują to, o co się twierdzą, bez konieczności szczegółowego wiedzieć, jak to robią. Nawet funkcja czysto obliczeniowa może zmienić stan konsoli lub dołączyć do pliku dziennika.
źródło
Nie komplikujmy, co powinna być bardzo prostą odpowiedzią. Metody i funkcje są tym samym. Nazywasz funkcję funkcją, gdy znajduje się ona poza klasą, a funkcję wywołujesz, gdy jest zapisana w klasie.
źródło
Z mojego zrozumienia, metodą jest każda operacja, którą można wykonać na klasie. Jest to ogólny termin używany w programowaniu.
W wielu językach metody są reprezentowane przez funkcje i podprogramy. Główne rozróżnienie, którego używa większość języków, polega na tym, że funkcje mogą zwracać wartość wywołującemu, a podprogram może tego nie robić. Jednak wiele współczesnych języków ma tylko funkcje, ale te opcjonalnie nie mogą zwrócić żadnej wartości.
Załóżmy na przykład, że chcesz opisać kota i chciałbyś, aby mógł ziewać. Utworzyłbyś klasę Cat za pomocą metody Yawn, która najprawdopodobniej byłaby funkcją bez wartości zwracanej.
źródło
Do aproksymacji pierwszego rzędu metoda (w stylu OO w języku C ++) jest innym słowem dla funkcji składowej, która jest częścią klasy.
W językach takich jak C / C ++ możesz mieć funkcje, które nie są członkami klasy; nie nazywasz funkcji niepowiązanej z klasą metodą.
źródło
Funkcja jest pojęciem należącym głównie do programowania zorientowanego na procedury, w którym funkcja jest bytem, który może przetwarzać dane i zwraca twoją wartość
Metoda jest koncepcją programowania obiektowego, w której metoda należy do klasy, która głównie przetwarza elementy klasowe.
źródło
Ludzie IMHO chcieli po prostu wymyślić nowe słowo dla łatwiejszej komunikacji między programistami, gdy chcieli odwoływać się do funkcji wewnątrz obiektów.
Jeśli mówisz o metodach, masz na myśli funkcje wewnątrz klasy. Jeśli mówisz o funkcjach, masz na myśli po prostu funkcje poza klasą.
Prawda jest taka, że oba słowa służą do opisu funkcji. Nawet jeśli użyłeś go niewłaściwie, nic złego się nie stanie. Oba słowa dobrze opisują, co chcesz osiągnąć w kodzie.
Funkcja to kod, który musi odgrywać rolę ( funkcję ) robienia czegoś. Metoda to metoda rozwiązania problemu.
Robi to samo. To jest to samo. Jeśli chcesz być bardzo precyzyjny i postępować zgodnie z konwencją, możesz wywoływać metody jako funkcje wewnątrz obiektów.
źródło
Nie jestem ekspertem, ale to wiem:
Funkcja jest terminem języka C, odnosi się do fragmentu kodu, a nazwa funkcji będzie identyfikatorem tej funkcji.
Metoda jest terminem OO, zwykle ma ten wskaźnik w parametrze funkcji. Nie możesz wywołać tego fragmentu kodu, takiego jak C, musisz użyć obiektu, aby go wywołać.
Metody wywoływania są również różne. Wywołaj tutaj znaczenie, aby znaleźć adres tego fragmentu kodu. C / C ++, czas połączenia użyje symbolu funkcji do zlokalizowania.
Objecive-C jest inny. Wywołanie oznacza funkcję C, aby użyć struktury danych do znalezienia adresu. Oznacza to, że wszystko jest znane w czasie wykonywania.
źródło
Wiem, że wiele innych już odpowiedziało, ale uważam, że podążanie jest prostą, ale skuteczną odpowiedzią na jedną linię. Chociaż nie wygląda to dużo lepiej niż inne odpowiedzi tutaj, ale jeśli przeczytasz go uważnie, ma wszystko, co musisz wiedzieć o metodzie vs funkcji.
Metoda jest funkcją, która ma zdefiniowany odbiornik, w kategoriach OOP, metoda jest funkcją na instancji obiektu.
źródło
Różnica między metodami i funkcjami
Z przeczytania tego dokumentu na Microsoft
Zatem metody są podzbiorem funkcji. Każda metoda jest funkcją, ale nie każda funkcja jest metodą, na przykład
constructor
nie można powiedzieć, że jest to metoda, ale jest to funkcja.źródło
Funkcja - funkcja w niezależnym fragmencie kodu, która zawiera pewną logikę i musi być wywoływana niezależnie i jest zdefiniowana poza klasą.
Metoda - metoda jest niezależnym fragmentem kodu, który jest wywoływany w odniesieniu do jakiegoś obiektu i jest definiowany wewnątrz klasy.
źródło
Oto wyjaśnienie metody vs. funkcji z wykorzystaniem przykładów JavaScript:
test(20, 50);
jest funkcją definiującą i używaną do uruchomienia niektórych kroków lub zwrotu czegoś, co można gdzieś zapisać / wykorzystać.var test = something.test();
tutaj test () może być metodą jakiegoś obiektu lub niestandardowo zdefiniowanego prototypu dla obiektów wbudowanych, oto więcej wyjaśnień:Wbudowana właściwość / metoda dla ciągów w javascript:
Przykład niestandardowy:
Możesz na przykład zdefiniować właściwości String, Array itp
Niektóre odnośniki: Metoda obiektu Javascript , Funkcje , Więcej informacji o prototypie
źródło
TL; DR
Funkcja to fragment kodu do uruchomienia.
Metoda jest funkcją wewnątrz obiektu.
Przykład funkcji:
Przykład metody:
Dlatego mówimy, że słowo kluczowe „this” wewnątrz funkcji nie jest zbyt przydatne, chyba że użyjemy go z wywołaniem, zastosowaniem lub powiązaniem. Ponieważ wywołanie, zastosowanie, powiązanie wywoła tę funkcję jako metodę wewnątrz obiektu ==> w zasadzie to konwertuje funkcję na metodę
źródło
Często są one wymienne, ale metoda zwykle odnosi się do podprogramu wewnątrz klasy, a funkcja zwykle odnosi się do podprogramu poza klasą. na przykład w Ruby:
W Javie, gdzie wszystko (oprócz instrukcji pakiet i import) musi znajdować się w klasie, ludzie prawie zawsze nazywają je „metodami”.
źródło