Was ist der Unterschied zwischen einer Methode und einer Funktion?

1741

Kann jemand eine einfache Erklärung von Methoden und Funktionen im OOP-Kontext geben?

willc2
quelle
12
Wenn der Wert einer Eigenschaft eine Funktion ist, können wir es eine Methode aufrufen
Coder
2
Was ist das Gegenteil einer Methode? Das ist meine Frage. "Funktion" ist das übergeordnete Konzept. Methode ist eine Art von Funktion. Wie heißt ein Funktionstyp, der keine Methode ist, aber direkt beim Namen aufgerufen werden kann?
Alexander Mills
Es wäre interessant, eine andere Erklärung zu sehen, die den Unterschied zwischen Methoden und Funktionen in r umreißt . Es ist interessant, da die Methode normalerweise eine Funktion enthält . Wenn die Methode eine objektabhängige Funktion ist, entspricht die Funktionsprüfung für die Objektklasse if(class(object)) { ... } else {stop()}konzeptionell der Methode?
Konrad
Die richtige Terminologie kann wirklich von der Sprache abhängen, daher kann sie in verschiedenen Kontexten leicht unterschiedliche Bedeutungen haben. Trotzdem sind Programmierer, die mit einer Sprache über einer anderen arbeiten, eher an bestimmte Terminologien gewöhnt. Programmierer werden auch durch die Verwendung der Begriffe durch ihre Mitarbeiter beeinflusst (ob richtig oder falsch). Diese Begriffe werden häufig synonym verwendet. Sehen Sie sich zum Beispiel einige der folgenden Kommentare an.
18.

Antworten:

1832

Eine Funktion ist ein Code, der beim Namen aufgerufen wird. Es können Daten übergeben werden, mit denen gearbeitet werden soll (dh die Parameter), und es können optional Daten zurückgegeben werden (der Rückgabewert). Alle Daten, die an eine Funktion übergeben werden, werden explizit übergeben.

Eine Methode ist ein Code, der von einem Namen aufgerufen wird, der einem Objekt zugeordnet ist. In den meisten Punkten ist es bis auf zwei wesentliche Unterschiede mit einer Funktion identisch:

  1. Eine Methode wird implizit an das Objekt übergeben, für das sie aufgerufen wurde.
  2. Eine Methode kann Daten verarbeiten, die in der Klasse enthalten sind (wobei zu beachten ist, dass ein Objekt eine Instanz einer Klasse ist - die Klasse ist die Definition, das Objekt ist eine Instanz dieser Daten).

(Dies ist eine vereinfachte Erklärung, bei der Fragen des Umfangs usw. ignoriert werden .)

Andrew Edgecombe
quelle
249
Für 1), sollten Sie auch hinzufügen , dass Methoden in C ++ aufgerufen werden Mitglied Funktionen. Daher ist der Unterschied zwischen Funktionen und Methoden in diesem Zusammenhang analog zum Unterschied zwischen Funktionen und Elementfunktionen in C ++. Darüber hinaus haben Sprachen wie Java nur Methoden. In diesem Fall wären Funktionen analog zu statischen Methoden und Methoden hätten dieselbe Bedeutung. Für 2) sollten Sie hinzufügen, dass eine Methode in der Lage ist, die als Teil der Klasse deklarierten privaten Instanzdaten (Mitgliedsdaten) zu verarbeiten. Jeder Code kann auf öffentliche Instanzdaten zugreifen.
Raffi Khatchadourian
45
Eine Funktion ist ein mathematisches Konstrukt. Ich würde sagen, alle Methoden sind Funktionen, aber nicht alle Funktionen sind Methoden
Tyler Gillies
29
Ausgehend von einem funktionalen Programmierhintergrund besteht meines Erachtens ein tiefgreifender Unterschied zwischen Funktion und Methode. Hauptsächlich Methoden haben Nebenwirkungen, und diese Funktionen sollten rein sein, was eine ziemlich schöne Eigenschaft der referenziellen Transparenz ergibt
HHC
26
@ TylerGillies und HHC, ich stimme zu, es wäre schön, wenn "Funktion" und "Methode" bedeuten würden, was Sie wollten, aber Ihre Definitionen spiegeln nicht einige sehr häufige Verwendungen dieser Begriffe wider.
Paul Draper
9
Wäre eine statische Methode nach dieser Definition nicht wirklich eine Methode, weil sie nichts mit einer bestimmten Instanz zu tun hat?
Carcigenicate
961

Eine Methode befindet sich auf einem Objekt.
Eine Funktion ist unabhängig von einem Objekt.

Für Java und C # gibt es nur Methoden.
Für C gibt es nur Funktionen.

Für C ++ und Python hängt es davon ab, ob Sie in einer Klasse sind oder nicht.

Aaron
quelle
39
Es ist Zeit, C # hinzuzufügen.
Rosdi Kasim
7
@RosdiKasim Für C # gibt es nur Methoden. (da sogar statische Methoden mit einem Objekt verknüpft werden müssen)
Lynn Crumbling
38
Wie wäre es mit statischen Methoden in einer Klasse? Diese wären unabhängig von einem Objekt (in Java). Wäre das dann nicht eine Funktion?
Squeazer
12
@Squeazer Vor kurzem gab es eine Frage zu stackoverflow.com/questions/30402169/…. Die Java-Sprachspezifikation unterscheidet sie lediglich in "Klassenmethode" (statisch) und "Instanzmethode". Sie sind also immer noch alle Methoden.
Xji
14
Java hat Lambda-Ausdrücke, die Funktionen sind, die keine Methoden sind
Max Heiber
228

'Methode' ist das objektorientierte Wort für 'Funktion' . Das ist so ziemlich alles, was dazu gehört (dh kein wirklicher Unterschied).

Leider denke ich, dass viele der Antworten hier die Idee, dass es einen komplexen, bedeutungsvollen Unterschied gibt, aufrechterhalten oder vorantreiben.

Wirklich - es steckt nicht so viel dahinter, nur verschiedene Wörter für dasselbe.

[späte Hinzufügung]


Wie Brian Neal in einem Kommentar zu dieser Frage betonte , verwendet der C ++ - Standard niemals den Begriff "Methode", wenn er sich auf Mitgliedsfunktionen bezieht. Einige Leute nehmen das vielleicht als Hinweis darauf, dass C ++ nicht wirklich eine objektorientierte Sprache ist. Ich nehme es jedoch lieber als Hinweis darauf, dass eine ziemlich kluge Gruppe von Menschen nicht glaubte, dass es einen besonders starken Grund gibt, einen anderen Begriff zu verwenden.

Michael Burr
quelle
14
Eine Methode ist ein spezieller Funktionstyp, bei dem ein implizites Argument übergeben wird (eine Instanz der Klasse, für die die Methode definiert ist). Dies ist wichtig, da eine Funktion streng genommen nichts verwenden oder ändern sollte, was nicht in ihrer Argumentliste enthalten ist.
ty1824
4
@ ty1824 Es ist nicht immer so, dass Methoden implizite Argumente übergeben werden. In Python ist das selfArgument explizit. Und viele Sprachen haben statische Methoden, denen keine Instanz übergeben wird.
Max Heiber
1
@mheiber das sind einige gültige Punkte. In Bezug auf sich selbst sind Sie richtig, es ist explizit definiert . Der Schlüssel ist, dass der Aufruf implizit ist, basierend auf der ursprünglichen Objektreferenz. Es gibt Sprachen, die das Überschreiben eines thisoder unterstützen self, aber diese Konstrukte werden dann normalerweise eher als Funktionen als als Methoden bezeichnet.
ty1824
1
@mheiber Was statische Methoden betrifft, hat Java sie als Problemumgehung implementiert, sodass Funktionen implementiert werden können, ohne dass ein Kontext erforderlich ist. Ich würde sogar vorschlagen, dass 'statische Methode' ein irreführender Begriff ist und ersetzt werden sollte ... in einer idealen theoretischen Welt :)
ty1824
1
@ ty1824 C ++, Scala, Python, Ruby, JavaScript und Scala haben alle statische Methoden, daher denke ich nicht, dass es nur eine Java-Sache ist. Ich mag sie auch nicht: Sie verwenden Objekte (Staatsbündel), als wären sie Namespaces.
Max Heiber
99

Im Allgemeinen: Methoden sind Funktionen, die zu einer Klasse gehören. Funktionen können sich in einem anderen Bereich des Codes befinden, sodass Sie angeben können, dass alle Methoden Funktionen sind, aber nicht alle Funktionen Methoden:

Nehmen Sie das folgende Python-Beispiel:

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

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

knock_door()

Das angegebene Beispiel zeigt Ihnen eine Klasse namens "Door" mit einer Methode oder Aktion namens "open". Sie wird als Methode bezeichnet, da sie innerhalb einer Klasse deklariert wurde. Es gibt einen anderen Teil des Codes mit "def" direkt darunter, der eine Funktion definiert. Es handelt sich um eine Funktion, da sie nicht innerhalb einer Klasse deklariert ist. Diese Funktion ruft die Methode auf, die wir in unserer Klasse definiert haben, wie Sie sehen können, und schließlich ist die Funktion von selbst genannt.

Wie Sie sehen, können Sie eine Funktion überall aufrufen. Wenn Sie jedoch eine Methode aufrufen möchten, müssen Sie entweder ein neues Objekt des gleichen Typs wie die Klasse übergeben, für die die Methode deklariert ist (Class.method (Objekt)), oder Sie müssen aufrufen die Methode innerhalb des Objekts (object.Method ()), zumindest in Python.

Stellen Sie sich Methoden als Dinge vor, die nur eine Entität tun kann. Wenn Sie also eine Hundeklasse haben, ist es sinnvoll, eine Rindenfunktion nur innerhalb dieser Klasse zu haben, und das wäre eine Methode, wenn Sie auch eine Personenklasse haben, für die dies sinnvoll sein könnte Schreiben Sie eine Funktion "Feed", die keiner Klasse angehört, da sowohl Menschen als auch Hunde gefüttert werden können, und Sie könnten dies eine Funktion nennen, da sie keiner bestimmten Klasse angehört.

Gustavo Rubio
quelle
2
Diese Antwort - meistens der erste Satz - ist bei weitem die prägnanteste und insgesamt beste Antwort auf die Frage.
Ihr Computergenius
61

Einfache Art, sich zu erinnern:

  • F Salbung → F ree (Free bedeutet nicht , gehört zu einem Objekt oder eine Klasse)
  • M ethode → M ember (ein Mitglied eines Objekts oder einer Klasse)
Duc Filan
quelle
Warum brauchst du eine Mnemonik, da sie normalerweise austauschbar ist?
Sapphire_Brick
44

Eine sehr allgemeine Definition des Hauptunterschieds zwischen einer Funktion und einer Methode :

Funktionen werden außerhalb von Klassen definiert, während Methoden innerhalb und Teil von Klassen definiert werden.

Jorgesys
quelle
30

Wenn Sie hier lesen möchten, lesen Sie "Meine Einführung in die OO-Methoden".

Die Idee hinter dem objektorientierten Paradigma ist, die Software zu "bedrohen", aus der sich "Objekte" zusammensetzen. Objekte in der realen Welt haben Eigenschaften, z. B. wenn Sie einen Mitarbeiter haben, der Mitarbeiter einen Namen, eine Mitarbeiter-ID, eine Position hat, einer Abteilung angehört usw. usw.

Das Objekt weiß auch, wie es mit seinen Attributen umgeht und einige Operationen an ihnen ausführt. Nehmen wir an, wir möchten ihn fragen, wenn wir wissen möchten, was ein Mitarbeiter gerade tut.

employe whatAreYouDoing.

Das "whatAreYouDoing" ist eine "Nachricht", die an das Objekt gesendet wird. Das Objekt weiß, wie man diese Fragen beantwortet. Es wird gesagt, dass es eine "Methode" hat, um die Frage zu lösen.

Die Art und Weise, wie Objekte ihr Verhalten offenlegen müssen, wird als Methode bezeichnet. Methoden sind also das Artefaktobjekt, das etwas "tun" muss.

Andere mögliche Methoden sind

employee whatIsYourName
employee whatIsYourDepartmentsName

usw.

Funktionen hingegen sind Möglichkeiten, wie eine Programmiersprache einige Daten berechnen muss. Beispielsweise haben Sie möglicherweise die Funktion addValues ​​(8, 8), die 16 zurückgibt

// pseudo-code
function addValues( int x, int y )  return x + y 
// call it 
result = addValues( 8,8 )
print result // output is 16...

Da die ersten populären Programmiersprachen (wie fortran, c, pascal) das OO-Paradigma nicht abdeckten, nennen sie diese Artefakte nur "Funktionen".

Zum Beispiel wäre die vorherige Funktion in C:

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

Es ist nicht "natürlich" zu sagen, dass ein Objekt eine "Funktion" hat, um eine Aktion auszuführen, da Funktionen eher mit mathematischen Dingen zusammenhängen, während ein Mitarbeiter wenig Mathematik hat, aber Sie können Methoden haben, die genau das Gleiche tun wie Funktionen. In Java wäre dies beispielsweise die entsprechende Funktion addValues.

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

Kommt mir bekannt vor? Das liegt daran, dass Java seine Wurzeln in C ++ und C ++ in C hat.

Am Ende ist nur ein Konzept, in der Implementierung sehen sie vielleicht gleich aus, aber in der OO-Dokumentation werden diese als Methode bezeichnet.

Hier ist ein Beispiel für das vorherige Employee-Objekt in Java.

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.

Der Unterschied liegt dann in der "Domäne", in der es angewendet wird.

AppleScript hat die Idee von "natürlicher Sprache", die OO irgendwann hatte. Zum Beispiel Smalltalk. Ich hoffe, es ist für Sie vernünftig einfacher, Methoden in Objekten zu verstehen, nachdem Sie dies gelesen haben.

HINWEIS: Der Code darf nicht kompiliert werden, sondern dient nur als Beispiel. Sie können den Beitrag jederzeit ändern und ein Python-Beispiel hinzufügen.

OscarRyz
quelle
3
Bravo! Geniale Darstellung, wie Methoden Befehle für Objekte sind. Dies ist der Schlüssel zum Verständnis von OO und das Fehlen der Rhetorik, die Sie in dieser Antwort zeigen, ist der Grund, warum OO heute in der Branche so missbraucht wird. Ausgezeichnete Post.
Moffdub
18

In der OO-Welt werden die beiden üblicherweise verwendet, um dasselbe zu bedeuten.

Aus einer reinen Math- und CS-Perspektive gibt eine Funktion immer das gleiche Ergebnis zurück, wenn sie mit denselben Argumenten aufgerufen wird (f (x, y) = (x + y)). Eine Methode hingegen ist normalerweise einer Instanz einer Klasse zugeordnet. Wiederum verwenden die meisten modernen OO-Sprachen den Begriff "Funktion" größtenteils nicht mehr. Viele statische Methoden können Funktionen sehr ähnlich sein, da sie normalerweise keinen Status haben (nicht immer wahr).

TheSoftwareJedi
quelle
17

Angenommen, eine Funktion ist ein Codeblock (normalerweise mit einem eigenen Bereich und manchmal mit einem eigenen Abschluss), der möglicherweise einige Argumente erhält und auch ein Ergebnis zurückgibt.

Eine Methode ist eine Funktion, die einem Objekt gehört (in einigen objektorientierten Systemen ist es korrekter zu sagen, dass sie einer Klasse gehört). Wenn Sie einem Objekt / einer Klasse "gehören", bedeutet dies, dass Sie über das Objekt / die Klasse auf die Methode verweisen. Wenn Sie beispielsweise in Java eine Methode "open ()" aufrufen möchten, die einem Objekt "door" gehört, müssen Sie "door.open ()" schreiben.

Normalerweise erhalten Methoden auch einige zusätzliche Attribute, die ihr Verhalten innerhalb des Objekts / der Klasse beschreiben, z. B. Sichtbarkeit (bezogen auf das objektorientierte Konzept der Kapselung), die definiert, von welchen Objekten (oder Klassen) die Methode aufgerufen werden kann.

In vielen objektorientierten Sprachen gehören alle "Funktionen" zu einem Objekt (oder einer Klasse), und daher gibt es in diesen Sprachen keine Funktionen, die keine Methoden sind.

Mike Tunnicliffe
quelle
1
Ich habe darauf hingewiesen, dass Methoden einem Objekt oder einer Klasse gehören könnten, da Javascript (das Sie in Ihrer Frage erwähnt haben) eine der Sprachen ist, die dem allgemeinen Trend objektorientierter Sprachen entgegenwirken, indem sie Methoden besitzen, die Objekten und nicht Klassen gehören (obwohl ähnliche Strukturen wie) Klassen existieren).
Mike Tunnicliffe
15

Methoden sind Funktionen von Klassen. Im normalen Jargon tauschen Menschen überall Methoden und Funktionen aus. Grundsätzlich können Sie sie als dasselbe betrachten (nicht sicher, ob globale Funktionen als Methoden bezeichnet werden).

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

Aussage
quelle
13

Eine Funktion ist ein mathematisches Konzept. Zum Beispiel:

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

sagt, dass die Funktion f () die sin des ersten Parameters zurückgibt, der zum Cosinus des zweiten Parameters hinzugefügt wird. Es ist nur Mathe. Dabei sind sin () und cos () ebenfalls Funktionen. Eine Funktion hat eine andere Eigenschaft: Alle Aufrufe einer Funktion mit denselben Parametern sollten dasselbe Ergebnis zurückgeben.

Eine Methode hingegen ist eine Funktion, die sich auf ein Objekt in einer objektorientierten Sprache bezieht. Es hat einen impliziten Parameter: das Objekt, auf das reagiert wird (und seinen Zustand).

Wenn Sie also ein Objekt Z mit einer Methode g (x) haben, sehen Sie möglicherweise Folgendes:

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

In diesem Fall wird der Parameter x wie im vorherigen Funktionsbeispiel übergeben. Der Parameter für cos () ist jedoch ein Wert, der innerhalb des Objekts Z lebt. Z und die darin lebenden Daten (Zy) sind implizite Parameter für die g () -Methode von Z.

Bradley Mazurek
quelle
13

Funktion oder Methode ist ein benannter aufrufbarer Code, der einige Operationen ausführt und optional einen Wert zurückgibt.

In der Sprache C wird der Begriff Funktion verwendet. Java & C # Leute würden sagen, es ist eine Methode (und eine Funktion ist in diesem Fall innerhalb einer Klasse / eines Objekts definiert).

Ein C ++ - Programmierer kann es eine Funktion oder manchmal eine Methode nennen (abhängig davon, ob er C ++ - Code im prozeduralen Stil schreibt oder eine objektorientierte Art von C ++ ausführt, würde auch ein C / C ++ - Programmierer es wahrscheinlich eine Funktion nennen, weil der Begriff 'Methode' lautet seltener in der C / C ++ - Literatur verwendet).

Sie verwenden eine Funktion, indem Sie einfach ihren Namen wie folgt aufrufen:

result = mySum(num1, num2);


Sie würden eine Methode aufrufen, indem Sie zuerst auf ihr Objekt verweisen, wie z.

result = MyCalc.mySum(num1,num2);
Abdullah Leghari
quelle
13

Historisch gesehen mag es einen subtilen Unterschied gegeben haben, dass eine "Methode" etwas ist, das keinen Wert zurückgibt, und eine "Funktion", die dies tut. Jede Sprache hat ein eigenes Lexikon von Begriffen mit besonderer Bedeutung.

In „C“ , das Wort „Funktion“ bedeutet eine Programmroutine .

In Java hat der Begriff "Funktion" keine besondere Bedeutung. Während "Methode" eine der Routinen bedeutet, die die Implementierung einer Klasse bilden.

In C # würde das bedeuten:

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

Aber wirklich, ich wiederhole noch einmal, dass es wirklich keinen Unterschied zwischen den beiden Konzepten gibt. Wenn Sie den Begriff "Funktion" in informellen Diskussionen über Java verwenden, gehen die Leute davon aus, dass Sie "Methode" gemeint haben, und fahren fort. Verwenden Sie es nicht in geeigneten Dokumenten oder Präsentationen über Java, sonst sehen Sie albern aus.

Jaimin Patel
quelle
Eigentlich sind in Ihrem Beispiel beide method... oder ich würde es nennen procedureund function.
Yousha Aleayoub
9

Funktion ist eine Reihe von Logik, mit der Daten bearbeitet werden können.

Während Methode eine Funktion ist, mit der die Daten des Objekts bearbeitet werden, zu dem sie gehören. Wenn Sie also eine Funktion haben, die nicht vollständig mit Ihrer Klasse zusammenhängt, aber in der Klasse deklariert wurde, ist dies keine Methode. Es heißt schlechtes Design.


quelle
8

Methoden für eine Klasse wirken auf die Instanz der Klasse, die als Objekt bezeichnet wird.

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"
   }
}
Aussage
quelle
8

In OO-Sprachen wie Object Pascal oder C ++ ist eine "Methode" eine Funktion, die einem Objekt zugeordnet ist. So könnte beispielsweise ein "Hund" -Objekt eine "Rinden" -Funktion haben, und dies würde als "Methode" betrachtet. Im Gegensatz dazu steht die Funktion "StrLen" für sich allein (sie gibt die Länge eines als Argument angegebenen Strings an). Es ist also nur eine "Funktion". Javascript ist auch technisch objektorientiert, weist jedoch im Vergleich zu einer vollständigen Sprache wie C ++, C # oder Pascal viele Einschränkungen auf. Trotzdem sollte die Unterscheidung bestehen bleiben.

Einige zusätzliche Fakten: C # ist vollständig objektorientiert, sodass Sie keine eigenständigen "Funktionen" erstellen können. In C # ist jede Funktion an ein Objekt gebunden und somit technisch eine "Methode". Der Kicker ist, dass nur wenige Leute in C # sie als "Methoden" bezeichnen - sie verwenden nur den Begriff "Funktionen", weil es keinen wirklichen Unterschied gibt.

Schließlich - nur damit hier keine Pascal-Gurus auf mich springen - unterscheidet Pascal auch zwischen "Funktionen" (die einen Wert zurückgeben) und "Prozeduren", die dies nicht tun. C # macht diese Unterscheidung nicht explizit, obwohl Sie natürlich wählen können, ob Sie einen Wert zurückgeben möchten oder nicht.

Mark Brittingham
quelle
8

Da Sie Python erwähnt haben, kann das Folgende die Beziehung zwischen Methoden und Objekten in den meisten modernen objektorientierten Sprachen veranschaulichen. Kurz gesagt, was sie als "Methode" bezeichnen, ist nur eine Funktion, der ein zusätzliches Argument übergeben wird (wie andere Antworten gezeigt haben), aber Python macht dies expliziter als die meisten Sprachen.

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

Vergleichen Sie nun die Funktion greet_with_greeterund die Methode greet: Der einzige Unterschied ist der Name des ersten Parameters (in der Funktion habe ich ihn "greeter" genannt, in der Methode habe ich ihn "self" genannt). Ich kann die greetMethode also genauso verwenden wie die greet_with_greeterFunktion (mit der "Punkt" -Syntax, um darauf zuzugreifen, da ich sie in einer Klasse definiert habe):

Greeter.greet(hello_greeter, "World")

Also habe ich eine Methode effektiv in eine Funktion verwandelt. Kann ich eine Funktion in eine Methode verwandeln? Nun, da Sie mit Python nach der Definition mit Klassen herumspielen können, versuchen wir Folgendes:

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

Ja, die Funktion greet_with_greeterwird jetzt auch als Methode bezeichnet greet2. Dies zeigt den einzigen wirklichen Unterschied zwischen einer Methode und einer Funktion: Wenn Sie eine Methode durch Aufrufen eines Objekts "aufrufen" object.method(args), verwandelt die Sprache es auf magische Weise in method(object, args).

(OO-Puristen könnten argumentieren, dass eine Methode etwas anderes ist als eine Funktion, und wenn Sie sich mit fortgeschrittenem Python oder Ruby - oder Smalltalk! - beschäftigen, werden Sie ihren Sinn erkennen. Auch einige Sprachen gewähren Methoden besonderen Zugriff auf Teile eines Objekts Der hauptsächliche konzeptionelle Unterschied ist immer noch der versteckte zusätzliche Parameter.)

Sam Stokes
quelle
7

Für mich: Die Funktion einer Methode und einer Funktion ist dieselbe, wenn ich damit einverstanden bin:

  • Eine Funktion kann einen Wert zurückgeben
  • kann Parameter erwarten

Wie bei jedem Code haben Sie möglicherweise Objekte, die Sie eingeben, und möglicherweise ein Objekt, das als Ergebnis entsteht. Währenddessen könnten sie den Zustand eines Objekts ändern, aber das würde ihre Grundfunktion für mich nicht ändern.

Möglicherweise unterscheidet sich die Definition beim Aufrufen von Funktionen von Objekten oder anderen Codes. Aber ist das nicht etwas für verbale Unterscheidungen und deshalb tauschen die Leute sie aus? Das erwähnte Berechnungsbeispiel, mit dem ich vorsichtig sein würde. weil ich Angestellte anheuere, um meine Berechnungen durchzuführen:

new Employer().calculateSum( 8, 8 );

Auf diese Weise kann ich mich darauf verlassen, dass ein Arbeitgeber für die Berechnungen verantwortlich ist. Wenn er mehr Geld will, befreie ich ihn und überlasse es dem Müllsammler, nicht genutzte Mitarbeiter zu entsorgen, den Rest zu erledigen und einen neuen Mitarbeiter zu finden.

Selbst wenn ich behaupte, dass eine Methode eine Objektfunktion und eine Funktion eine nicht verbundene Berechnung ist, hilft mir das nicht weiter. Der Funktionsdeskriptor selbst und im Idealfall die Dokumentation der Funktion sagen mir, was sie benötigt und was sie möglicherweise zurückgibt. Der Rest, wie das Manipulieren des Zustands eines Objekts, ist für mich nicht wirklich transparent. Ich erwarte, dass sowohl Funktionen als auch Methoden das liefern und manipulieren, was sie behaupten, ohne im Detail wissen zu müssen, wie sie es tun. Sogar eine reine Rechenfunktion kann den Status der Konsole ändern oder an eine Protokolldatei anhängen.

Dirk Schumacher
quelle
5

Lassen Sie uns nicht zu kompliziert machen, was eine sehr einfache Antwort sein sollte. Methoden und Funktionen sind dasselbe. Sie nennen eine Funktion eine Funktion, wenn sie sich außerhalb einer Klasse befindet, und Sie nennen eine Funktion eine Methode, wenn sie innerhalb einer Klasse geschrieben ist.

SamyCode
quelle
4

Nach meinem Verständnis ist eine Methode jede Operation, die für eine Klasse ausgeführt werden kann. Es ist ein allgemeiner Begriff, der in der Programmierung verwendet wird.

In vielen Sprachen werden Methoden durch Funktionen und Unterprogramme dargestellt. Der Hauptunterschied, den die meisten Sprachen für diese verwenden, besteht darin, dass Funktionen möglicherweise einen Wert an den Aufrufer zurückgeben und eine Unterroutine möglicherweise nicht. Viele moderne Sprachen haben jedoch nur Funktionen, diese können jedoch optional keinen Wert zurückgeben.

Nehmen wir zum Beispiel an, Sie möchten eine Katze beschreiben und möchten, dass sie gähnen kann. Sie würden eine Cat-Klasse mit einer Yawn-Methode erstellen, die höchstwahrscheinlich eine Funktion ohne Rückgabewert ist.

marcj
quelle
4

In Annäherung erster Ordnung ist eine Methode (im C ++ - Stil OO) ein anderes Wort für eine Mitgliedsfunktion, dh eine Funktion, die Teil einer Klasse ist.

In Sprachen wie C / C ++ können Sie Funktionen haben, die nicht Mitglieder einer Klasse sind. Sie nennen eine Funktion, die keiner Klasse zugeordnet ist, keine Methode.

Kapitän Segfault
quelle
4

Funktion ist das Konzept, das hauptsächlich zur prozedurorientierten Programmierung gehört, bei der eine Funktion eine Entität ist, die Daten verarbeiten und Ihnen Wert zurückgeben kann

Methode ist das Konzept der objektorientierten Programmierung, bei der eine Methode Mitglied einer Klasse ist, die hauptsächlich die Verarbeitung für die Klassenmitglieder durchführt.

Akshay Khale
quelle
3

IMHO-Leute wollten nur ein neues Wort erfinden, um die Kommunikation zwischen Programmierern zu vereinfachen, wenn sie sich auf Funktionen innerhalb von Objekten beziehen wollten.

Wenn Sie Methoden sagen, meinen Sie Funktionen innerhalb der Klasse. Wenn Sie Funktionen sagen, meinen Sie einfach Funktionen außerhalb der Klasse.

Die Wahrheit ist, dass beide Wörter verwendet werden, um Funktionen zu beschreiben. Selbst wenn Sie es falsch verwendet haben, passiert nichts Falsches. Beide Wörter beschreiben gut, was Sie in Ihrem Code erreichen möchten.

Funktion ist ein Code, der eine Rolle ( eine Funktion ) spielen muss, um etwas zu tun. Methode ist eine Methode zur Lösung des Problems.

Es macht das Gleiche. Es ist das selbe Ding. Wenn Sie sehr präzise sein und der Konvention folgen möchten, können Sie Methoden als Funktionen in Objekten aufrufen.

Morfidon
quelle
2

Ich bin kein Experte, aber das weiß ich:

  1. Funktion ist ein Begriff in der Sprache C, er bezieht sich auf einen Code und der Funktionsname ist die Kennung für die Verwendung dieser Funktion.

  2. Methode ist der OO-Term, normalerweise hat er diesen Zeiger im Funktionsparameter. Sie können diesen Code nicht wie C aufrufen, Sie müssen ein Objekt verwenden, um ihn aufzurufen.

  3. Die Aufrufmethoden sind ebenfalls unterschiedlich. Rufen Sie hier die Bedeutung auf, um die Adresse dieses Codes zu finden. In C / C ++ verwendet die Verknüpfungszeit das Funktionssymbol zum Suchen.

  4. Ziel-C ist anders. Rufen Sie eine C-Funktion auf, um mithilfe der Datenstruktur die Adresse zu finden. Dies bedeutet, dass zur Laufzeit alles bekannt ist.

Marvin
quelle
2

Ich weiß, dass viele andere bereits geantwortet haben, aber ich fand, dass das Folgende eine einfache, aber effektive einzeilige Antwort ist. Es sieht zwar nicht viel besser aus als andere Antworten hier, aber wenn Sie es sorgfältig lesen, enthält es alles, was Sie über die Methode und die Funktion wissen müssen.

Eine Methode ist eine Funktion mit einem definierten Empfänger. In OOP-Begriffen ist eine Methode eine Funktion für eine Instanz eines Objekts.

F-Gesellschaft
quelle
2

Unterschied zwischen Methoden und Funktionen

Vom Lesen dieses Dokuments auf Microsoft

Mitglieder, die ausführbaren Code enthalten, werden zusammen als Funktionsmitglieder einer Klasse bezeichnet. Im vorhergehenden Abschnitt werden Methoden beschrieben, bei denen es sich hauptsächlich um Funktionselemente handelt. In diesem Abschnitt werden die anderen Arten von Funktionselementen beschrieben, die von C # unterstützt werden: Konstruktoren, Eigenschaften, Indexer, Ereignisse, Operatoren und Finalisierer.

Methoden sind also die Teilmenge der Funktionen. Jede Methode ist eine Funktion, aber nicht jede Funktion ist eine Methode. Zum Beispiel constructorkann a nicht als Methode bezeichnet werden, aber es ist eine Funktion.

Siraj Alam
quelle
Eigenschaften, Indexer und Ereignisse sind keine Funktionen. Die Getter, Setter (für Eigenschaften und Indexer), Addierer und Entferner (für Ereignisse) sind Funktionen. Funktionsmitglieder sind Mitglieder, die einer oder mehreren Funktionen zugeordnet sind, jedoch nicht unbedingt eine Funktion sind.
Jon Hanna
2

Funktion - Eine Funktion in einem unabhängigen Codeteil, die eine Logik enthält und unabhängig aufgerufen werden muss und außerhalb der Klasse definiert ist.

Methode - Eine Methode ist ein unabhängiger Code, der in Bezug auf ein Objekt aufgerufen wird und innerhalb der Klasse definiert wird.

Aditya
quelle
Wie nennt man einen Code in einer statischen Klasse, der auch statisch ist? Ist dies eine Methode oder eine Funktion? Eine statische Funktion / Methode einer Klasse benötigt kein Objekt der Klasse, in der sie deklariert ist.
Wolfgang Roth
1

Hier einige Erklärungen für Methode und Funktion anhand von JavaScript-Beispielen:

test(20, 50); Diese Funktion definiert und verwendet, um einige Schritte auszuführen oder etwas zurückzugeben, das irgendwo gespeichert / verwendet werden kann.

Sie können Code wiederverwenden: Definieren Sie den Code einmal und verwenden Sie ihn mehrmals.

Sie können denselben Code mehrmals mit unterschiedlichen Argumenten verwenden, um unterschiedliche Ergebnisse zu erzielen.

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(); Hier kann test () eine Methode eines Objekts sein oder einen Prototyp für eingebaute Objekte benutzerdefiniert definieren. Hier finden Sie weitere Erklärungen:

JavaScript-Methoden sind die Aktionen, die für Objekte ausgeführt werden können.

Eine JavaScript-Methode ist eine Eigenschaft, die eine Funktionsdefinition enthält.

Integrierte Eigenschaft / Methode für Zeichenfolgen in Javascript:

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

Benutzerdefiniertes Beispiel:

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'

Sie können beispielsweise auch Eigenschaften für String, Array usw. definieren

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

Einige Referenzen: Javascript-Objektmethode , Funktionen , Weitere Informationen zum Prototyp

Lahar Shah
quelle
Bitte posten Sie keine identischen Antworten auf mehrere Fragen. Schreiben Sie eine gute Antwort und stimmen Sie ab, um die anderen Fragen als Duplikate zu schließen. Wenn die Frage kein Duplikat ist, passen Sie Ihre Antworten auf die Frage an.
Paul Roub
Vielen Dank für das Feedback, ich habe keine andere Antwort zugeschnitten, ich habe diese Antwort gelöscht. :-)
Lahar Shah
1

TL; DR

Eine Funktion ist ein auszuführender Code.
Eine Methode ist eine Funktion innerhalb eines Objekts.

Beispiel einer Funktion:


function sum(){
  console.log("sum")l
}

Beispiel einer Methode:

const obj = {
a:1,
b:2,
sum(){
  }
}

Deshalb sagen wir, dass ein "this" -Schlüsselwort in einer Funktion nur dann sehr nützlich ist, wenn wir es mit call, apply oder bind verwenden. Call, apply, bind ruft diese Funktion als Methode innerhalb von object ==> im Grunde genommen auf konvertiert Funktion in Methode

Yogendra Saxena
quelle
1

Sie sind oft austauschbar, aber eine Methode bezieht sich normalerweise auf eine Unterroutine innerhalb einer Klasse, und eine Funktion bezieht sich normalerweise auf eine Unterroutine außerhalb der Klasse. Zum Beispiel in Ruby:

# function
def putSqr(a)
   puts a ** 2
end


class Math2
   # method
   def putSqr(a)
      puts a ** 2
   end
end

In Java, wo sich alles (außer Paket- und Importanweisungen) innerhalb der Klasse befinden muss, werden sie fast immer als "Methoden" bezeichnet.

Sapphire_Brick
quelle