Quelle est la différence entre une méthode et une fonction?

1743

Quelqu'un peut-il fournir une explication simple des méthodes par rapport aux fonctions dans le contexte de la POO?

willc2
la source
12
Lorsque la valeur d'une propriété est une fonction, nous l'appelons une méthode
codeur
2
Quel est l'opposé d'une méthode? Telle est ma question. La «fonction» est le concept parent. La méthode est un type de fonction. Quel est le nom d'un type de fonction qui n'est pas une méthode, mais qui peut être appelée directement par son nom?
Alexander Mills
Il serait intéressant de voir une autre explication décrivant la différence entre les méthodes et les fonctions dans r . C'est intéressant car la méthode contient généralement une fonction . Si la méthode est une fonction dépendante de l'objet, la fonction qui vérifie la classe d'objet if(class(object)) { ... } else {stop()}serait conceptuellement équivalente à la méthode?
Konrad
Une terminologie appropriée peut vraiment dépendre de la langue, elle peut donc signifier des choses légèrement différentes dans différents contextes. Même ainsi, puisque les programmeurs qui travaillent avec une langue plutôt qu'une autre sont plus habitués à certaines terminologies. Les programmeurs sont également influencés par l'utilisation par leurs collègues de ces termes (qu'ils soient corrects ou incorrects). Ces termes sont souvent utilisés de manière interchangeable. Voir certains des commentaires ci-dessous, par exemple.
jvriesem

Réponses:

1832

Une fonction est un morceau de code appelé par son nom. Il peut être transmis des données pour fonctionner (c'est-à-dire les paramètres) et peut éventuellement renvoyer des données (la valeur de retour). Toutes les données transmises à une fonction sont transmises explicitement.

Une méthode est un morceau de code appelé par un nom associé à un objet. À bien des égards, elle est identique à une fonction, à l'exception de deux différences clés:

  1. Une méthode passe implicitement l'objet sur lequel elle a été appelée.
  2. Une méthode est capable d'opérer sur des données contenues dans la classe (en se souvenant qu'un objet est une instance d'une classe - la classe est la définition, l'objet est une instance de ces données).

(il s'agit d'une explication simplifiée, en ignorant les problèmes de portée, etc.)

Andrew Edgecombe
la source
249
Pour 1), vous devez également ajouter que les méthodes en C ++ sont appelées fonctions membres . Ainsi, la différence entre les fonctions et les méthodes dans ce contexte est analogue à la différence entre les fonctions et les fonctions membres en C ++. De plus, les langages comme Java n'ont que des méthodes. Dans ce cas, les fonctions seraient analogues aux méthodes statiques et les méthodes auraient la même signification. Pour 2), vous devez ajouter qu'une méthode peut fonctionner sur les données d' instance privée (membre) déclarées comme faisant partie de la classe. Tout code peut accéder aux données d'instance publique.
Raffi Khatchadourian
46
une fonction est une construction mathématique. Je dirais que toutes les méthodes sont des fonctions mais pas toutes les fonctions sont des méthodes
Tyler Gillies
29
Issu d'un contexte de programmation fonctionnelle, je pense qu'il y a une distinction profonde entre fonction et méthode. Les méthodes ont principalement des effets secondaires, et les fonctions doivent être pures, donnant ainsi une propriété plutôt agréable de transparence référentielle
HHC
26
@TylerGillies et HHC, je conviens que ce serait bien si «fonction» et «méthode» signifiaient ce que vous vouliez, mais vos définitions ne reflètent pas certaines utilisations très courantes de ces termes.
Paul Draper
9
Selon cette définition, une méthode statique ne serait-elle pas réellement considérée comme une méthode parce qu'elle n'a rien à voir avec une instance particulière?
Carcigenicate
963

Une méthode est sur un objet.
Une fonction est indépendante d'un objet.

Pour Java et C #, il n'y a que des méthodes.
Pour C, il n'y a que des fonctions.

Pour C ++ et Python, cela dépendrait si vous êtes ou non dans une classe.

Aaron
la source
39
Il est temps d'ajouter C #.
Rosdi Kasim
7
@RosdiKasim Pour C #, il n'y a que des méthodes. (puisque même les méthodes statiques doivent être associées à un objet)
Lynn Crumbling
38
Et les méthodes statiques dans une classe? Ceux-ci seraient indépendants d'un objet (en java). Ce ne serait pas une fonction alors?
Squeazer
12
@Squeazer Il y a une question à ce sujet récemment stackoverflow.com/questions/30402169/… La spécification du langage Java les différencie simplement comme "méthode de classe" (statique) et "méthode d'instance". Ce sont donc toujours toutes des méthodes.
xji
15
Java a des expressions lambda, qui sont des fonctions qui ne sont pas des méthodes
Max Heiber
228

«méthode» est le mot orienté objet pour «fonction» . C'est à peu près tout ce qu'il y a à faire (c'est-à-dire aucune différence réelle).

Malheureusement, je pense que beaucoup de réponses ici perpétuent ou avancent l'idée qu'il existe une différence complexe et significative.

Vraiment - il n'y a pas grand-chose, juste des mots différents pour la même chose.

[ajout tardif]


En fait, comme l'a souligné Brian Neal dans un commentaire à cette question , la norme C ++ n'utilise jamais le terme «méthode» pour faire référence aux fonctions membres. Certaines personnes peuvent considérer cela comme une indication que le C ++ n'est pas vraiment un langage orienté objet; cependant, je préfère le prendre comme une indication qu'un groupe assez intelligent de personnes ne pensait pas qu'il y avait une raison particulièrement forte d'utiliser un terme différent.

Michael Burr
la source
14
Une méthode est un type spécial de fonction avec un argument implicite transmis (une instance de la classe sur laquelle la méthode est définie). Ceci est important car une fonction, en termes stricts, ne doit pas utiliser ou modifier quoi que ce soit qui ne figure pas dans sa liste d'arguments.
ty1824
4
@ ty1824 il n'est pas toujours vrai que les méthodes reçoivent des arguments implicites. En Python, l' selfargument est explicite. Et de nombreux langages ont des méthodes statiques, qui ne sont pas transmises à une instance.
Max Heiber
1
@mheiber ce sont des points valables. En ce qui concerne le moi, vous avez raison, il est explicitement défini . La clé est que l'appel est implicite, basé sur la référence d'objet d'origine. Il existe des langages qui prennent en charge la substitution de a thisou self, mais ces constructions sont alors généralement appelées fonctions, plutôt que méthodes.
ty1824
1
@mheiber En ce qui concerne les méthodes statiques - java les a implémentées comme solution de contournement afin que les fonctions puissent être implémentées sans nécessiter de contexte.
J'irais
1
@ ty1824 C ++, Scala, Python, Ruby, JavaScript et Scala ont tous des méthodes statiques, donc je ne pense pas que ce soit juste une chose Java. Je ne les aime pas non plus: ils reviennent à utiliser des objets (faisceaux d'état) comme s'il s'agissait d'espaces de noms.
Max Heiber
99

En général: les méthodes sont des fonctions qui appartiennent à une classe, les fonctions peuvent se trouver sur n'importe quelle autre étendue du code, vous pouvez donc déclarer que toutes les méthodes sont des fonctions, mais pas toutes les fonctions sont des méthodes:

Prenons l'exemple python suivant:

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

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

knock_door()

L'exemple donné vous montre une classe appelée "Door" qui a une méthode ou une action appelée "open", elle est appelée une méthode car elle a été déclarée à l'intérieur d'une classe. Il y a une autre portion de code avec "def" juste en dessous qui définit une fonction, c'est une fonction parce qu'elle n'est pas déclarée à l'intérieur d'une classe, cette fonction appelle la méthode que nous avons définie à l'intérieur de notre classe comme vous pouvez le voir et enfin la fonction est en cours appelé par lui-même.

Comme vous pouvez le voir, vous pouvez appeler une fonction n'importe où, mais si vous voulez appeler une méthode, vous devez passer un nouvel objet du même type que la classe la méthode est déclarée (Class.method (object)) ou vous devez appeler la méthode à l'intérieur de l'objet (object.Method ()), au moins en python.

Considérez les méthodes comme des choses qu'une seule entité peut faire, donc si vous avez une classe Dog, il serait logique d'avoir une fonction d'aboiement uniquement à l'intérieur de cette classe et ce serait une méthode, si vous avez également une classe Person, il pourrait être logique de écrire une fonction "feed" car qui n'appartient à aucune classe car les humains et les chiens peuvent être nourris et vous pouvez appeler cette fonction car elle n'appartient à aucune classe en particulier.

Gustavo Rubio
la source
2
Cette réponse --- surtout sa première phrase --- est de loin la meilleure réponse la plus concise et globale à la question.
yourcomputergenius
61

Un moyen simple de se souvenir:

  • F onction → F ree (Free signifie ne pas appartenir à un objet ou à une classe)
  • M é thode → M ember (membre d'un objet ou classe)
Duc Filan
la source
comme il y a généralement des interchangeables, pourquoi avez-vous besoin d'un mnémonique?
Sapphire_Brick
44

Une définition très générale de la principale différence entre une fonction et une méthode :

Les fonctions sont définies en dehors des classes, tandis que les méthodes sont définies à l'intérieur des classes et en font partie.

Jorgesys
la source
30

Si vous avez envie de lire ici, c'est "Mon introduction aux méthodes OO"

L'idée derrière le paradigme orienté objet est de "menacer" le logiciel est composé de .. bien "objets". Les objets dans le monde réel ont des propriétés, par exemple si vous avez un employé, l'employé a un nom, un identifiant d'employé, une position, il appartient à un département, etc. etc.

L'objet sait également comment gérer ses attributs et effectuer certaines opérations sur ceux-ci. Disons que si nous voulons savoir ce qu'un employé fait en ce moment, nous lui demanderons.

employe whatAreYouDoing.

Ce "whatAreYouDoing" est un "message" envoyé à l'objet. L'objet sait comment répondre à ces questions, on dit qu'il a une "méthode" pour résoudre la question.

Ainsi, la façon dont les objets doivent exposer son comportement est appelée méthode. Les méthodes sont donc l'objet artefact à «faire» quelque chose.

D'autres méthodes possibles sont

employee whatIsYourName
employee whatIsYourDepartmentsName

etc.

Les fonctions, d'autre part, sont des façons dont un langage de programmation doit calculer certaines données, par exemple, vous pourriez avoir la fonction addValues ​​(8, 8) qui renvoie 16

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

Étant donné que les premiers langages de programmation populaires (tels que fortran, c, pascal) ne couvraient pas le paradigme OO, ils n'appellent que ces "fonctions" de ces artefacts.

par exemple, la fonction précédente en C serait:

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

Il n'est pas "naturel" de dire qu'un objet a une "fonction" pour effectuer une action, car les fonctions sont plus liées à des choses mathématiques alors qu'un employé a peu de mathématiques dessus, mais vous pouvez avoir des méthodes qui font exactement la même chose que des fonctions, par exemple, en Java, ce serait la fonction addValues ​​équivalente.

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

Ça vous semble familier? C'est parce que Java a ses racines en C ++ et C ++ en C.

À la fin, ce n'est qu'un concept, dans la mise en œuvre, ils peuvent ressembler, mais dans la documentation OO, ils sont appelés méthode.

Voici un exemple de l’ancien objet Employee en 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.

La différence est donc sur le "domaine" où il est appliqué.

AppleScript a l'idée du matphor "langage naturel", que OO avait à un moment donné. Par exemple Smalltalk. J'espère qu'il vous sera peut-être plus facile de comprendre les méthodes des objets après avoir lu ceci.

REMARQUE: le code ne doit pas être compilé, juste pour servir d'exemple. N'hésitez pas à modifier la publication et à ajouter l'exemple Python.

OscarRyz
la source
3
Bravo! Exposition brillante sur la façon dont les méthodes sont des commandes aux objets. C'est la clé pour comprendre OO et le manque de rhétorique que vous montrez dans cette réponse est la raison pour laquelle OO est tellement abusé dans l'industrie aujourd'hui. Excellent poste.
moffdub
18

Dans le monde OO, les deux sont couramment utilisés pour signifier la même chose.

Du point de vue pur Math et CS, une fonction retournera toujours le même résultat lorsqu'elle est appelée avec les mêmes arguments (f (x, y) = (x + y)). Une méthode, d'autre part, est généralement associée à une instance d'une classe. Encore une fois cependant, la plupart des langages OO modernes n'utilisent plus le terme "fonction" pour la plupart. De nombreuses méthodes statiques peuvent être tout à fait comme des fonctions, car elles n'ont généralement pas d'état (pas toujours vrai).

TheSoftwareJedi
la source
17

Disons qu'une fonction est un bloc de code (généralement avec sa propre portée, et parfois avec sa propre fermeture) qui peut recevoir des arguments et peut également retourner un résultat.

Une méthode est une fonction qui appartient à un objet (dans certains systèmes orientés objet, il est plus correct de dire qu'elle appartient à une classe). Être "possédé" par un objet / classe signifie que vous vous référez à la méthode via l'objet / classe; par exemple, en Java, si vous souhaitez appeler une méthode "open ()" appartenant à un objet "door", vous devez écrire "door.open ()".

Habituellement, les méthodes gagnent également des attributs supplémentaires décrivant leur comportement au sein de l'objet / classe, par exemple: la visibilité (liée au concept d'encapsulation orienté objet) qui définit à partir de quels objets (ou classes) la méthode peut être invoquée.

Dans de nombreux langages orientés objet, toutes les "fonctions" appartiennent à un objet (ou une classe) et donc dans ces langages il n'y a pas de fonctions qui ne soient pas des méthodes.

Mike Tunnicliffe
la source
1
J'ai pensé que les méthodes pouvaient appartenir à un objet ou à une classe car Javascript (que vous avez mentionné dans votre question) est l'un des langages qui déjoue la tendance générale des langages orientés objet en ayant des méthodes appartenant à des objets et non à des classes (bien que des structures similaires à existent).
Mike Tunnicliffe
15

Les méthodes sont des fonctions de classes. Dans le jargon normal, les gens échangent méthode et fonction partout. Fondamentalement, vous pouvez les considérer comme la même chose (vous ne savez pas si les fonctions globales sont appelées méthodes).

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

Déclaration
la source
13

Une fonction est un concept mathématique. Par exemple:

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

dit que la fonction f () retournera le sin du premier paramètre ajouté au cosinus du second paramètre. C'est juste des maths. En l'occurrence, sin () et cos () sont également des fonctions. Une fonction a une autre propriété: tous les appels à une fonction avec les mêmes paramètres doivent renvoyer le même résultat.

Une méthode, en revanche, est une fonction liée à un objet dans un langage orienté objet. Il a un paramètre implicite: l'objet sur lequel on agit (et son état).

Donc, si vous avez un objet Z avec une méthode g (x), vous pouvez voir ce qui suit:

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

Dans ce cas, le paramètre x est transmis, comme dans l'exemple de fonction précédent. Cependant, le paramètre de cos () est une valeur qui vit à l'intérieur de l'objet Z. Z et les données qui y vivent (Zy) sont des paramètres implicites de la méthode g () de Z.

Bradley Mazurek
la source
13

Une fonction ou une méthode est un morceau de code appelable nommé qui effectue certaines opérations et renvoie éventuellement une valeur.

En langage C , le terme fonction est utilisé. Java et C # gens diraient que c'est une méthode (et une fonction dans ce cas est définie dans une classe / un objet).

Un C ++ programmeur peut l'appeler une fonction ou parfois une méthode (selon qu'ils écrivent du code c ++ de style procédural ou font de la manière orientée objet de C ++, un programmeur C / C ++ uniquement l'appellera probablement une fonction car le terme 'méthode' est moins souvent utilisé dans la littérature C / C ++).

Vous utilisez une fonction en appelant simplement son nom comme,

result = mySum(num1, num2);


Vous appelleriez une méthode en référençant d'abord son objet comme,

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

Historiquement, il peut y avoir eu une différence subtile avec une "méthode" étant quelque chose qui ne renvoie pas de valeur, et une "fonction" qui le fait. Chaque langue a son propre lexique de termes avec une signification spéciale.

En "C" , le mot "fonction" signifie une routine de programme .

En Java , le terme "fonction" n'a pas de signification particulière. Alors que "méthode" signifie l'une des routines qui forme l'implémentation d'une classe.

En C #, cela se traduirait par:

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

Mais vraiment, je réitère qu'il n'y a vraiment aucune différence dans les 2 concepts. Si vous utilisez le terme "fonction" dans des discussions informelles sur Java, les gens supposeront que vous vouliez dire "méthode" et continueront. Ne l'utilisez pas dans des documents ou des présentations appropriés sur Java, ou vous aurez l'air idiot.

Jaimin Patel
la source
En fait, dans votre exemple, les deux sont method... ou je l'appellerais procedureet function.
Yousha Aleayoub
9

La fonction est un ensemble de logiques qui peuvent être utilisées pour manipuler des données.

Tandis que, Method est une fonction utilisée pour manipuler les données de l'objet auquel il appartient. Donc techniquement, si vous avez une fonction qui n'est pas complètement liée à votre classe mais qui a été déclarée dans la classe, ce n'est pas une méthode; Cela s'appelle un mauvais design.


la source
8

Les méthodes d'une classe agissent sur l'instance de la classe, appelée objet.

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"
   }
}
Déclaration
la source
8

Dans les langages OO comme Object Pascal ou C ++, une "méthode" est une fonction associée à un objet. Ainsi, par exemple, un objet "Chien" pourrait avoir une fonction "aboyer" et cela serait considéré comme une "Méthode". En revanche, la fonction "StrLen" est autonome (elle fournit la longueur d'une chaîne fournie en argument). Il est donc juste une « fonction ». Javascript est également orienté objet techniquement mais fait face à de nombreuses limitations par rapport à un langage complet comme C ++, C # ou Pascal. Néanmoins, la distinction devrait être maintenue.

Quelques faits supplémentaires: C # est entièrement orienté objet, vous ne pouvez donc pas créer de "fonctions" autonomes. En C #, chaque fonction est liée à un objet et est donc, techniquement, une "méthode". Le kicker est que peu de gens en C # les appellent "méthodes" - ils utilisent simplement le terme "fonctions" car il n'y a pas vraiment de distinction à faire.

Enfin - pour que les gourous de Pascal ne me sautent pas dessus ici - Pascal fait également la différence entre les "fonctions" (qui renvoient une valeur) et les "procédures" qui ne le font pas. C # ne fait pas cette distinction explicitement bien que vous puissiez, bien sûr, choisir de renvoyer une valeur ou non.

Mark Brittingham
la source
8

Puisque vous avez mentionné Python, ce qui suit peut être une illustration utile de la relation entre les méthodes et les objets dans la plupart des langages orientés objet modernes. En bref, ce qu'ils appellent une "méthode" n'est qu'une fonction qui reçoit un argument supplémentaire (comme d'autres réponses l'ont souligné), mais Python le rend plus explicite que la plupart des langages.

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

Maintenant, comparez la fonction greet_with_greeteret la méthode greet: la seule différence est le nom du premier paramètre (dans la fonction je l'ai appelé "greeter", dans la méthode je l'ai appelé "self"). Je peux donc utiliser la greetméthode exactement de la même manière que j'utilise la greet_with_greeterfonction (en utilisant la syntaxe "dot" pour y accéder, car je l'ai définie dans une classe):

Greeter.greet(hello_greeter, "World")

J'ai donc effectivement transformé une méthode en fonction. Puis-je transformer une fonction en méthode? Eh bien, comme Python vous permet de jouer avec les classes une fois qu'elles sont définies, essayons:

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

Oui, la fonction greet_with_greeterest désormais également connue sous le nom de méthode greet2. Cela montre la seule vraie différence entre une méthode et une fonction: lorsque vous appelez une méthode "sur" un objet en appelant object.method(args), le langage le transforme comme par magie method(object, args).

(Les puristes OO pourraient soutenir qu'une méthode est quelque chose de différent d'une fonction, et si vous entrez dans Python ou Ruby avancé - ou Smalltalk! - vous commencerez à voir leur point. De plus, certains langages donnent aux méthodes un accès spécial aux bits d'un objet. Mais la principale différence conceptuelle reste le paramètre supplémentaire caché.)

Sam Stokes
la source
7

pour moi: la fonction d'une méthode et d'une fonction est la même si j'accepte que:

  • une fonction peut retourner une valeur
  • peut s'attendre à des paramètres

Tout comme n'importe quel morceau de code, vous pouvez avoir des objets que vous mettez et vous pouvez avoir un objet qui en résulte. Ce faisant, ils pourraient changer l'état d'un objet, mais cela ne changerait pas leur fonctionnement de base pour moi.

Il peut y avoir une différence de définition dans les fonctions d'appel d'objets ou d'autres codes. Mais n'est-ce pas quelque chose pour une différenciation verbale et c'est pourquoi les gens les échangent? L'exemple de calcul mentionne avec soin. parce que j'engage des employés pour faire mes calculs:

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

En procédant ainsi, je peux compter sur un employeur qui est responsable des calculs. S'il veut plus d'argent, je le libère et je laisse la fonction de collecteur de carbure d'éliminer les employés inutilisés faire le reste et obtenir un nouvel employé.

Même arguer qu'une méthode est une fonction d'objets et qu'une fonction est un calcul non connecté ne m'aidera pas. Le descripteur de fonction lui-même et, idéalement, la documentation de la fonction me diront ce dont elle a besoin et ce qu'elle peut renvoyer. Le reste, comme la manipulation de l'état d'un objet, n'est pas vraiment transparent pour moi. Je m'attends à ce que les fonctions et les méthodes fournissent et manipulent ce qu'elles prétendent sans avoir besoin de savoir en détail comment elles le font. Même une fonction de calcul pure peut changer l'état de la console ou l'ajouter à un fichier journal.

Dirk Schumacher
la source
5

Ne compliquons pas trop ce qui devrait être une réponse très simple. Les méthodes et les fonctions sont la même chose. Vous appelez une fonction une fonction lorsqu'elle est en dehors d'une classe, et vous appelez une fonction une méthode lorsqu'elle est écrite à l'intérieur d'une classe.

SamyCode
la source
4

D'après ma compréhension, une méthode est une opération qui peut être effectuée sur une classe. C'est un terme général utilisé en programmation.

Dans de nombreux langages, les méthodes sont représentées par des fonctions et des sous-programmes. La principale distinction que la plupart des langues utilisent pour ces derniers est que les fonctions peuvent renvoyer une valeur à l'appelant et pas un sous-programme. Cependant, de nombreux langages modernes n'ont que des fonctions, mais celles-ci peuvent éventuellement ne renvoyer aucune valeur.

Par exemple, disons que vous voulez décrire un chat et que vous souhaitez qu'il puisse bâiller. Vous créeriez une classe Cat, avec une méthode Yawn, qui serait très probablement une fonction sans aucune valeur de retour.

marcj
la source
4

Pour une approximation de premier ordre, une méthode (en style C ++ OO) est un autre mot pour une fonction membre, c'est-à-dire une fonction qui fait partie d'une classe.

Dans des langages comme C / C ++, vous pouvez avoir des fonctions qui ne sont pas membres d'une classe; vous n'appelez pas une fonction non associée à une classe une méthode.

Capitaine Segfault
la source
4

La fonction est le concept appartenant principalement à la programmation orientée procédure où une fonction est une entité qui peut traiter des données et vous renvoie de la valeur

La méthode est le concept de la programmation orientée objet où une méthode est membre d'une classe qui effectue principalement le traitement sur les membres de la classe.

Akshay Khale
la source
3

Les gens à mon humble avis voulaient juste inventer un nouveau mot pour faciliter la communication entre les programmeurs quand ils voulaient se référer aux fonctions à l'intérieur des objets.

Si vous dites des méthodes, vous voulez dire des fonctions à l'intérieur de la classe. Si vous dites des fonctions, vous entendez simplement des fonctions en dehors de la classe.

La vérité est que les deux mots sont utilisés pour décrire des fonctions. Même si vous l'avez mal utilisé, rien de mal ne se produit. Les deux mots décrivent bien ce que vous voulez réaliser dans votre code.

La fonction est un code qui doit jouer un rôle ( une fonction ) de faire quelque chose. La méthode est une méthode pour résoudre le problème.

Ça fait la même chose. C'est la même chose. Si vous voulez être super précis et suivre la convention, vous pouvez appeler des méthodes comme fonctions à l'intérieur des objets.

Morfidon
la source
2

Je ne suis pas un expert, mais voici ce que je sais:

  1. La fonction est un terme en langage C, elle fait référence à un morceau de code et le nom de la fonction sera l'identifiant pour utiliser cette fonction.

  2. La méthode est le terme OO, généralement il a un pointeur this dans le paramètre de fonction. Vous ne pouvez pas appeler ce morceau de code comme C, vous devez utiliser un objet pour l'invoquer.

  3. Les méthodes d'invocation sont également différentes. Ici, invoquez un sens pour trouver l'adresse de ce morceau de code. C / C ++, le temps de liaison utilisera le symbole de fonction pour localiser.

  4. Objecive-C est différent. Appelez une fonction C pour utiliser la structure de données pour trouver l'adresse. Cela signifie que tout est connu au moment de l'exécution.

Marvin
la source
2

Je sais que beaucoup d'autres ont déjà répondu, mais j'ai trouvé que la suite est une réponse simple mais efficace sur une seule ligne. Bien que cela ne semble pas beaucoup mieux que les autres réponses ici, mais si vous le lisez attentivement, il a tout ce que vous devez savoir sur la méthode vs la fonction.

Une méthode est une fonction qui a un récepteur défini, en termes de POO, une méthode est une fonction sur une instance d'un objet.

f-société
la source
2

Différence entre les méthodes et les fonctions

De la lecture de ce document sur Microsoft

Les membres qui contiennent du code exécutable sont collectivement appelés membres de fonction d'une classe. La section précédente décrit les méthodes, qui sont le principal type de membres de fonction. Cette section décrit les autres types de membres de fonction pris en charge par C #: constructeurs, propriétés, indexeurs, événements, opérateurs et finaliseurs.

Les méthodes sont donc le sous-ensemble des fonctions. Chaque méthode est une fonction mais pas chaque fonction est une méthode, par exemple, un constructorne peut pas être dit comme une méthode mais c'est une fonction.

Siraj Alam
la source
Les propriétés, les indexeurs et les événements ne sont pas des fonctions. Les getters, setters (pour les propriétés et les indexeurs), les additionneurs et les suppresseurs (pour les événements) sont des fonctions. Les membres de fonction sont des membres associés à une ou plusieurs fonctions, mais pas nécessairement en étant une fonction.
Jon Hanna
2

Fonction - Une fonction dans un morceau de code indépendant qui inclut une certaine logique et doit être appelée indépendamment et est définie en dehors de la classe.

Méthode - Une méthode est un morceau de code indépendant qui est appelé en référence à un objet et qui doit être défini dans la classe.

Aditya
la source
Comment appelez-vous un morceau de code dans une classe statique, qui est également statique, est-ce une méthode ou une fonction? Une fonction / méthode statique d'une classe n'a pas besoin d'un objet de la classe dans laquelle elle est déclarée.
Wolfgang Roth
1

Voici quelques explications sur la méthode et la fonction à l'aide d'exemples JavaScript:

test(20, 50); est la fonction définie et utilisée pour exécuter certaines étapes ou retourner quelque chose qui peut être stocké / utilisé quelque part.

Vous pouvez réutiliser le code: définissez le code une fois et utilisez-le plusieurs fois.

Vous pouvez utiliser le même code plusieurs fois avec des arguments différents pour produire des résultats différents.

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(); ici test () peut être une méthode d'un objet ou un prototype défini pour des objets intégrés, voici plus d'explications:

Les méthodes JavaScript sont les actions qui peuvent être effectuées sur des objets.

Une méthode JavaScript est une propriété contenant une définition de fonction.

Propriété / méthode intégrée pour les chaînes en javascript:

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

Exemple personnalisé:

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'

Vous pouvez également définir des propriétés pour String, Array, etc. par exemple

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

Quelques références: Javascript Object Method , Functions , More info on prototype

Lahar Shah
la source
Veuillez ne pas publier de réponses identiques à plusieurs questions. Postez une bonne réponse, puis votez / marquez pour fermer les autres questions en double. Si la question n'est pas un doublon, adaptez vos réponses à la question.
Paul Roub
Merci pour les commentaires, je n'ai pas adapté d'autre réponse, j'ai supprimé cette réponse. :-)
Lahar Shah
1

TL; DR

Une fonction est un morceau de code à exécuter.
Une méthode est une fonction à l'intérieur d'un objet.

Exemple de fonction:


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

Exemple d'une méthode:

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

C'est pourquoi nous disons qu'un mot-clé "this" à l'intérieur d'une fonction n'est pas très utile à moins que nous ne l'utilisions avec call, apply ou bind .. parce que call, apply, bind appellera cette fonction comme méthode à l'intérieur de l'objet ==> fondamentalement, il convertit la fonction en méthode

yogendra saxena
la source
1

Ils sont souvent interchangeables, mais une méthode fait généralement référence à un sous-programme à l'intérieur d'une classe, et une fonction fait généralement référence à un sous-programme à l'extérieur de la classe. par exemple, en Ruby:

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


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

En Java, où tout (sauf les instructions de package et d'importation) doit être à l'intérieur de la classe, les gens les appellent presque toujours «méthodes».

Sapphire_Brick
la source