Jaka jest różnica między metodą a funkcją?

Czy ktoś może podać proste wyjaśnienie metod vs. funkcji w kontekście OOP?

Author: Duc Filan, 2008-09-30

30 answers

A Funkcja jest fragmentem kodu, który jest wywoływany po nazwie. Można na nim przekazywać dane do pracy (tzn. parametry) oraz opcjonalnie zwracać dane (zwracaną wartość). Wszystkie dane przekazywane do funkcji są jawnie przekazywane.

A Metoda jest fragmentem kodu, który jest wywoływany przez nazwę powiązaną z obiektem. W większości przypadków jest ona identyczna z Funkcją, z wyjątkiem dwóch kluczowych różnic:

  1. metoda jest niejawnie przekazywana obiektowi, na którym został wezwany.
  2. metoda jest w stanie operować 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ąc zagadnienia z zakresu itd.)

 1956
Author: Andrew Edgecombe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-19 10:27:06

Metoda znajduje się na obiekcie.
Funkcja jest niezależna od obiektu.

Dla Javy i C# istnieją tylko metody.
Dla C istnieją tylko funkcje.

Dla C++ i Pythona zależy to od tego, czy jesteś w danej klasie.

 1008
Author: Aaron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-22 15:18:50

'Metoda' jest wyrazem zorientowanym obiektowo dla 'funkcji' . To prawie wszystko (tj., żadnej różnicy).

Niestety, myślę, że wiele odpowiedzi tutaj utrwalają lub rozwijają ideę, że istnieje jakaś złożona, znacząca różnica.

Naprawdę-nie ma w tym wszystkiego tyle, tylko różne słowa na to samo.

[późne dodawanie]


W rzeczywistości, jak Brian Neal wskazał w komentarzu do to pytanie, standard C++ nigdy nie używa terminu "metoda" w odniesieniu do funkcji Członkowskich. Niektórzy ludzie mogą wziąć to jako wskazówkę, że C++ nie jest tak naprawdę językiem obiektowym; jednak wolę wziąć to jako wskazówkę, że dość mądra grupa ludzi nie myślała, że istnieje szczególnie silny powód, aby używać innego terminu.

 251
Author: Michael Burr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:48

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źmy następujący przykład Pythona:

class Door:
  def open(self):
    print 'hello stranger'

def knock_door:
  a_door = Door()
  Door.open(a_door)

knock_door()

Podany przykład pokazuje klasę o nazwie "Door", która ma metodę lub akcję o nazwie "open", nazywa się ją metodą, ponieważ została zadeklarowana wewnątrz klasy. Poniżej znajduje się kolejna część kodu z "def", która definiuje funkcję, jest to funkcja, ponieważ nie jest zadeklarowana wewnątrz klasy, funkcja ta wywołuje metodę zdefiniowaną wewnątrz naszej klasy, jak widać i w końcu funkcja jest wywoływana sama.

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ą zadeklarowana jest metoda (Class.method(object)) lub należy wywołać metodę wewnątrz obiektu (object.Method ()), przynajmniej w Pythonie.

Think of metody jako rzeczy tylko jedna jednostka może zrobić, więc jeśli masz klasę psa to miałoby sens, aby mieć funkcję kory tylko wewnątrz tej klasy i to byłoby metodą, jeśli masz również klasę osoby to może mieć sens, aby napisać funkcję "pasza" dla że nie należy do żadnej klasy, ponieważ zarówno ludzie i psy mogą być karmione i można nazwać, że funkcja, ponieważ nie należy do żadnej klasy w szczególności.

 111
Author: Gustavo Rubio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-03 10:43:29

Prosty sposób na zapamiętanie:

  • F unction → F ree (wolne znaczy nie należą do obiektu lub klasy)
  • Method → M ember (członek obiektu lub klasy)
 74
Author: Duc Filan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-08 00:07:41

Bardzo ogólna definicja głównej różnicy między funkcją A metodą :

Funkcje są definiowane poza klasami, podczas gdy metody są definiowane wewnątrz klas i ich części.

 45
Author: Jorgesys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-01 06:54:36

Jeśli masz ochotę przeczytać tutaj jest "moje wprowadzenie do metod OO"

Ideą paradygmatu zorientowanego obiektowo jest "zagrożenie", z którego składa się oprogramowanie .. 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. itd.

Obiekt wie również, jak radzić sobie ze swoimi atrybutami i wykonywać na nich pewne operacje. Powiedzmy, że jeśli chcemy wiedzieć, co pracownik robi to teraz, zapytalibyśmy go.

employe whatAreYouDoing.

Że "whatAreYouDoing" jest "wiadomością" wysyłaną do obiektu. Obiekt wie, jak odpowiedzieć na te pytania, mówi się, że ma "metodę", aby rozwiązać pytanie.

Tak więc sposób, w jaki obiekty muszą ujawniać swoje zachowanie, nazywa się metodami. Metody są więc obiekt artefakt musi" zrobić " coś.

Inne możliwe metody to

employee whatIsYourName
employee whatIsYourDepartmentsName

Itd.

Funkcje z drugiej strony są sposobem, w jaki język programowania musi Oblicz 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, nazywają te artefakty jedynie "funkcjami".

Na przykład poprzednia Funkcja W C będzie:

int addValues( int x, int y ) 
{
   return x + y;
}

Nie jest "naturalnym" mówienie, że obiekt ma "funkcję" do wykonywania pewnych czynności, ponieważ funkcje są bardziej związane z matematycznymi rzeczami, podczas gdy pracownik ma mało matematyczne, ale można 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? To dlatego, że Java ma swoje korzenie w C++ i C++ na C.

Na końcu jest tylko koncepcją, w implementacji mogą wyglądać tak samo, ale w dokumentacji OO są one nazywane method.

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 wtedy, znajduje się w "domenie", w której jest stosowany.

AppleScript miał ideę" języka naturalnego " matphora, który w pewnym momencie oo miał. Na przykład Smalltalk. Mam nadzieję, że po przeczytaniu tego może być łatwiejsze zrozumienie metod w obiektach.

Uwaga: kod nie jest kompilowany, tylko służy jako przykład. Możesz zmodyfikować post i dodać przykład Pythona.

 31
Author: OscarRyz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-01 00:35:47

W świecie OO, te dwa są powszechnie używane, aby oznaczać to samo.

Z czystego punktu widzenia matematyki i CS, funkcja zawsze zwróci ten sam wynik,gdy zostanie wywołana z tymi samymi argumentami ( f(x, y) = (x + y) ). Metoda z drugiej strony jest zazwyczaj związana z instancją klasy. Jednak większość współczesnych języków OO w większości nie używa terminu "funkcja". Wiele metod statycznych może być zupełnie jak funkcje, ponieważ zazwyczaj nie mają one stanu (nie zawsze prawda).

 19
Author: TheSoftwareJedi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-30 23:56:16

Załóżmy, że funkcja jest blokiem kodu (zwykle z własnym zakresem, a czasami z własnym zamknięciem), który może otrzymać pewne argumenty i może również zwrócić wynik.

Metoda jest funkcją, która jest własnością obiektu (w niektórych obiektowych systemach bardziej poprawne jest stwierdzenie, że jest własnością klasy). Bycie "własnością" obiektu / klasy oznacza, że odnosisz się do metody za pomocą obiektu / klasy; na przykład w języku Java, jeśli chcesz wywołać metodę "open ()" należącą do obiektu "drzwi" musisz napisać " drzwi.open()".

Zazwyczaj metody zyskują również dodatkowe atrybuty opisujące ich zachowanie w obrębie obiektu/klasy, na przykład: visibility (związane z obiektowo zorientowaną koncepcją enkapsulacji), która określa, z których obiektów (lub klas) metoda może być wywołana.

W wielu obiektowych językach wszystkie "funkcje" należą do jakiegoś obiektu (lub klasy), więc w tych językach nie ma funkcji, które nie są metodami.

 18
Author: Mike Tunnicliffe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-01 00:05:53

Metody są funkcjami klas. W normalnym żargonie ludzie wymieniają metody i funkcje wszędzie. Zasadniczo można myśleć o nich jako o tym samym (Nie wiem, czy funkcje globalne są nazywane metodami).

Http://en.wikipedia.org/wiki/Method_ (computer_science)

 16
Author: Statement,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-30 23:52:13

Funkcja jest pojęciem matematycznym. Na przykład:

f(x,y) = sin(x) + cos(y)

Mówi, że funkcja f () zwróci sin 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.

Metoda, z drugiej strony, jest funkcją, która jest związana z obiektem w języku zorientowanym obiektowo. Posiada jeden parametr niejawny: obiekt, na którym działa (i jego stan).

Więc, jeśli masz obiekt Z Z metodą g(x), możesz zobaczyć, co następuje:

Z.g(x) = sin(x) + cos(Z.y)

W tym przypadku parametr x jest przekazywany, tak samo jak w poprzednim przykładzie funkcji. Jednak parametr cos() jest wartością, która żyje wewnątrz obiektu Z. z, a dane, które żyją w nim (Z. y) są parametrami domyślnymi metody g () Z.

 14
Author: Bradley Mazurek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-01 00:54:03

Historycznie może istnieć subtelna różnica między "metodą" będącą czymś, co nie zwraca wartości, a "funkcją", która to robi.Każdy język ma swój własny leksykon terminów o szczególnym znaczeniu.

W "C" Słowo "Funkcja" oznacza rutynę programową .

WJava termin "Funkcja" nie ma specjalnego znaczenia. Natomiast "Metoda" oznacza jedną z procedur tworzących Implementacja klasy.

W C # {[3] } które tłumaczyłoby się jako:

public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function

Ale naprawdę, powtórzę, że naprawdę nie ma różnicy w dwóch koncepcjach. Jeśli używasz terminu "funkcja" w nieformalnych dyskusjach na temat Javy, ludzie przyjmą, że miałeś na myśli "metodę" i będą kontynuować. Nie używaj go w odpowiednich dokumentach lub Prezentacjach dotyczących Javy, bo inaczej będziesz wyglądał głupio.

 14
Author: Jaimin Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-04 10:33:11

Funkcja lub metoda jest nazwanym kawałkiem kodu, który wykonuje pewne operacje i opcjonalnie Zwraca wartość.

W języku C używany jest termin funkcja. Java & C # ludzie powiedzieliby, że to metoda (a funkcja w tym przypadku jest zdefiniowana w klasie/obiekcie).

A C++ programista może nazwać to funkcją lub czasem metodą (w zależności od tego, czy pisze proceduralny styl kodu c++, czy wykonuje obiektowo zorientowany sposób C++, również Programista C / C++ nazwałby ją prawdopodobnie funkcją, ponieważ termin "metoda" jest rzadziej używany w literaturze C/C++).

Używasz funkcji przez wywołanie jej nazwy w stylu,

result = mySum(num1, num2);


Wywołałbyś metodę, odwołując się najpierw do jej obiektu, jak,

result = MyCalc.mySum(num1,num2);
 13
Author: Abdullah Leghari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-26 23:10:18

Funkcja jest zbiorem logiki, który może być używany do manipulowania danymi.

While, metoda jest funkcją, która jest używana do manipulowania danymi obiektu, do którego należy. Więc technicznie, jeśli masz funkcję, która nie jest całkowicie związana z klasą, ale została zadeklarowana w klasie, to nie jest to metoda; nazywa się to złym projektem.

 11
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-03 09:47:08

Metody klasy działają na instancję klasy, zwaną 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"
   }
}
 9
Author: Statement,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-30 23:57:38

W językach oo, takich jak Object Pascal czy C++," metoda " jest funkcją powiązaną z obiektem. Tak więc, na przykład, obiekt "pies" może mieć funkcję "kora" i to byłoby uważane za "metodę". Natomiast funkcja "StrLen" jest samodzielna (podaje Długość łańcucha znaków podanego jako argument). Jest więc po prostu funkcją"."Javascript jest również technicznie zorientowany obiektowo, ale ma wiele ograniczeń w porównaniu z pełnowymiarowym 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 obiektowo zorientowany, więc nie można tworzyć samodzielnych " funkcji."W C# każda funkcja jest związana z obiektem, a więc technicznie jest metodą"."The kicker is that few people in C# reference to them as "methods" - they just use the term "functions" because there is not any real distinction to be made.

W końcu - żeby każdy guru Pascala nie skakał na mnie tutaj-Pascal też różnicuje pomiędzy " funkcjami "(które zwracają wartość) a" procedurami", które nie. C# nie czyni tego rozróżnienia jawnie, chociaż można, oczywiście, wybrać, aby zwrócić wartość lub nie.

 9
Author: Mark Brittingham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-30 23:59:25

Skoro wspomniałeś o Pythonie, poniższe przykłady mogą być użyteczną ilustracją relacji między metodami i obiektami w większości współczesnych języków obiektowych. W skrócie to, co nazywają "metodą", jest tylko funkcją, która otrzymuje dodatkowy argument (jak wskazywał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_greeter i metodę greet: jedyną różnicą jest nazwa pierwszego parametru (w funkcja nazwałem ją "greeter", w metodzie nazwałem ją "self"). Tak więc mogę użyć metody greet W dokładnie taki sam sposób, jak używam funkcji greet_with_greeter (używając składni "kropka", aby ją uzyskać, ponieważ zdefiniowałem ją wewnątrz klasy):

Greeter.greet(hello_greeter, "World")

Więc skutecznie przekształciłem metodę w funkcję. Czy mogę zamienić funkcję w metodę? Cóż, ponieważ Python pozwala Ci mieszać z klasami po ich zdefiniowaniu, spróbujmy:

Greeter.greet2 = greet_with_greeter
hello_greeter.greet2("World")

Tak, Funkcja greet_with_greeter jest teraz znana również jako metoda greet2. Pokazuje to jedyną rzeczywistą różnicę między metodą a funkcją: gdy wywołujesz metodę " na " obiekcie przez wywołanie object.method(args), język magicznie zmienia ją w method(object, args).

(oo puriści mogą twierdzić, że metoda jest czymś innym niż funkcja, a jeśli dostaniesz się do zaawansowanego Pythona lub Ruby - lub Smalltalk! - zaczniesz dostrzegać ich punkt widzenia. Również niektóre języki dają metodom specjalny dostęp do bitów obiektu. Ale główną różnicą pojęciową jest wciąż ukryta dodatkowa parametr.)

 9
Author: Sam Stokes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-01 01:20:03

Dla mnie: funkcja metody i funkcji jest taka sama, jeśli zgadzam się, że:

  • funkcja może zwracać wartość
  • może oczekiwać parametrów

Tak jak każdy fragment kodu możesz mieć obiekty, które umieścisz i możesz mieć obiekt, który pochodzi w wyniku. Podczas robienia tego mogą zmienić stan przedmiotu, ale to nie zmieniłoby ich podstawowego funkcjonowania dla mnie.

Może istnieć definicja różniąca się wywołaniem funkcji obiektów lub inne kody. Ale czy to nie jest coś dla słownych różnic i dlatego ludzie je wymieniają? Na przykład obliczeń byłbym ostrożny. ponieważ zatrudniam pracowników do wykonywania moich obliczeń:

new Employer().calculateSum( 8, 8 );
Robiąc to w ten sposób mogę polegać na pracodawcy odpowiedzialnym za obliczenia. Jeśli chce więcej pieniędzy, uwolnię go, a funkcja kolektora carbage ' a, polegająca na pozbawieniu nieużywanych pracowników, zrobi resztę i załatwi nowego pracownika.

Nawet argumentując, że metoda jest funkcja obiektu i funkcja jest niezwiązana obliczenia mi nie pomogą. 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 będą dostarczać i manipulować tym, co twierdzą, bez konieczności szczegółowego poznania, jak to robią. Nawet czysta funkcja obliczeniowa może zmienić stan konsoli lub dołączyć do plik dziennika.

 8
Author: Dirk Schumacher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-13 09:50:07

Z mojego zrozumienia metoda jest każda operacja, która może być wykonana na klasie. Jest to ogólny termin używany w programowaniu.

W wielu językach metody są reprezentowane przez funkcje i podprogramy. Główną różnicą, której używa większość języków, jest to, że funkcje mogą zwracać wartość z powrotem do wywołującego, a podprogram nie. Jednak wiele współczesnych języków ma tylko funkcje, ale mogą one opcjonalnie nie zwracać żadnej wartości.

Na przykład, powiedzmy, że chcesz opisz kota, a chciałbyś, aby mógł ziewać. Tworzysz klasę Cat z metodą Yawn, która najprawdopodobniej byłaby funkcją bez zwracanej wartości.

 5
Author: marcj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-30 23:53:50

Do aproksymacji pierwszego rzędu, metoda (w stylu C++ OO) jest innym słowem dla funkcji członka, która jest funkcją, 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 wywołujesz funkcji nie związanej z metodą klasy A.

 5
Author: Captain Segfault,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-01 00:00:07

Nie komplikujmy zbytnio tego, co powinno być bardzo prostą odpowiedzią. Metody i funkcje to to samo. Funkcję nazywamy funkcją, gdy jest poza klasą, A funkcję nazywamy metodą, gdy jest zapisana wewnątrz klasy.

 5
Author: SamyCode,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-14 14:03:07

IMHO ludzie po prostu chcieli wymyślić nowe słowo dla łatwiejszej komunikacji między programistami, gdy chcieli odnosić się do funkcji wewnątrz obiektów.

Jeśli mówisz metody masz na myśli funkcje wewnątrz klasy. Jeśli mówisz funkcje, masz na myśli po prostu funkcje poza klasą.

Prawda jest taka, że oba słowa są używane do opisu funkcji. Nawet jeśli użyłeś go źle, nic złego się nie dzieje. Oba słowa dobrze opisują to, co chcesz osiągnąć w swoim kod.

Funkcja jest kodem, który musi odgrywać rolę (Funkcja) robienia czegoś. Metoda jest metodą do rozwiązania problemu.

Robi to samo. To 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.

 4
Author: Morfidon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-27 16:15:57

Funkcja jest pojęciem należącym głównie do programowania zorientowanego na procedury gdzie funkcja jest jednostką, która może przetwarzać Dane i zwraca wartość

Metoda jest pojęciem programowania obiektowego, Gdzie metoda jest członkiem klasy, która głównie przetwarza na elementach klasy.

 4
Author: Akshay Khale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-10 14:23:44

Nie jestem ekspertem, ale to jest to, co wiem:

  1. Funkcja jest terminem w języku C, odnosi się do kawałka kodu, a nazwa funkcji będzie identyfikatorem używającym tej funkcji.

  2. Metoda jest terminem OO, zazwyczaj ma ten wskaźnik w parametrze funkcji. Nie możesz wywołać tego fragmentu kodu jak C, musisz użyć obiektu, aby go wywołać.

  3. Metody wywoływania są również różne. Tutaj znajdziesz adres tego kawałka kodu. C / C++, czas połączenia użyje symbolu funkcji do zlokalizowania.

  4. Obiektywizm-C jest inny. Wywołaj znaczenie funkcji C, aby użyć struktury danych do znalezienia adresu. Oznacza to, że wszystko jest znane w czasie uruchomienia.

 3
Author: Marvin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-26 23:10:58

Wiem, że wielu innych już odpowiedziało, ale znalazłem następujące jest prosta, ale skuteczna odpowiedź pojedynczej linii. 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 terminach OOP metoda jest funkcją na instancji obiektu.

 2
Author: f-society,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-23 23:11:23

Różnica między metodami i funkcjami

Z czytania tego doc na Microsoft

Członkowie, którzy zawierają kod wykonywalny, są zbiorczo znani jako członkowie funkcji klasy. Poprzednia sekcja opisuje metody, które są podstawowym rodzajem elementów funkcji. Ta sekcja opisuje inne rodzaje elementów funkcyjnych wspieranych przez C#: konstruktory, właściwości, indeksery, zdarzenia, operatory i finalizery.

Więc metody są podzbiór funkcji. Każda metoda jest funkcją, ale nie każda funkcja jest metodą, na przykład constructor nie można powiedzieć jako metoda , ale jest funkcją.

 2
Author: Siraj Alam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-15 18:42:27

Funkcja-funkcja w niezależnym fragmencie kodu, która zawiera pewną logikę i musi być wywołana niezależnie i są zdefiniowane poza klasą.

Metoda

- metoda jest niezależnym fragmentem kodu, który jest wywoływany w odniesieniu do jakiegoś obiektu i jest zdefiniowany wewnątrz klasy.

 2
Author: Aditya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-17 08:35:50

Oto kilka wyjaśnień dla metody vs. funkcji przy użyciu przykładów JavaScript:

test(20, 50); czy funkcja definiuje i używa do uruchomienia niektórych kroków lub zwraca coś z powrotem, które może być gdzieś przechowywane/używane.

Możesz użyć kodu ponownie: 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 niestandardowego zdefiniowanego a prototyp dla obiektów wbudowanych, tutaj jest więcej wyjaśnienia:

Metody JavaScript są akcjami, które mogą być wykonywane na obiektach.

Metoda JavaScript jest właściwością zawierającą definicję funkcji.

Wbudowana właściwość / metoda dla łańcuchów w javascript:

var message = "Hello world!";
var x = message.toUpperCase();
//Output: HELLO WORLD!

Własny przykład:

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żna również definiować właściwości dla łańcuchów, tablic, itd., na przykład

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");

Niektóre odniesienia: obiekt Javascript Metoda, funkcje, więcej informacji o prototype

 1
Author: Lahar Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

TL;DR

Funkcja jest fragmentem 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 użyteczne, chyba że użyjemy go z call, apply lub bind .. ponieważ call, apply, bind wywoła tę funkcję jako metodę wewnątrz obiektu = = > zasadniczo konwertuje funkcję do metody

 1
Author: yogendra saxena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-20 07:11:11

Są często wymienne, ale Metoda zazwyczaj odnosi się do podprogramu wewnątrz klasy, A Funkcja zazwyczaj 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 package i import) musi znajdować się wewnątrz klasy, ludzie prawie zawsze nazywają je "metodami".

 1
Author: Sapphire_Brick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-24 15:02:19