web-dev-qa-db-fra.com

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

J'ai entendu dire que les méthodes sont plus orientées objet que des fonctions. Je me demandais si quelqu'un pouvait me montrer un exemple de fonction et une méthode et d'expliquer les différences entre les méthodes et les fonctions?

J'ai pris 3 quarts de Java la programmation et les fonctions n'ont jamais été mentionnés, je souhaite connaître les différences, les forces et les faiblesses.

5
Andrew

Parlant strictement, un procedure est un sous-programme exécuté uniquement pour ses effets secondaires (comme l'impression de quelque chose à l'écran) et ne renvoie aucune valeur. Un function est un sous-programme qui renvoie toujours la même valeur compte tenu des mêmes entrées et n'a aucun effet secondaire. Un method est une procédure ou une fonction associée à une classe ou à un objet.

La partie déroutante est que les gens utilisent ces termes, ils ne font pas toujours référence aux définitions pures. Pour des raisons de commodité et de cohérence, les langages de programmation ne font pas toujours une distinction entre les fonctions, les procédures et les méthodes. Ils ont une ou deux façons de déclarer un sous-programme et que ce soit techniquement une fonction, une procédure ou une méthode techniquement dépend de la manière dont le programmeur l'utilise.

En Java, par exemple, un procedure est créé en ayant un type de retour void sur une méthode. A function est une méthode avec un type de retour et aucun effet secondaire, comme:

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

Les personnes dont la seule expérience de programmation est dans une langue comme Java== Souvent même pas, il y a une différence, car in Java cela n'a généralement pas d'importance dans un sens pratique. Dans un contexte Java seulement, les programmeurs se réfèrent souvent à tout Subiltine en tant que function, même par ceux qui connaissent la différence, et ils vont surtout non corrigé sauf par le très pédant .

Contraste qu'avec un langage de programmation fonctionnel où la différence entre une procédure et une fonction est critique et appliquée par le compilateur. Dans ce contexte, vous serez pilonné pour utiliser un terme lorsque vous voulez dire l'autre.

La programmation fonctionnelle a de nombreux avocats qui feront ses avantages. Juste chercher "Avantages de la programmation fonctionnelle". En bref, les fonctions pures sont faciles à composer, exécutées paresseusement ou hors de commande et parallélize.

L'inconvénient est de nombreux programmes du monde réel accordent largement avec l'État et la plupart des programmeurs trouvent plus facile de raisonner sur l'État de manière impérative.

28
Karl Bielefeldt

Il n'y a pas de fonctions en soi à Java. Tout ce que vous avez, c'est des méthodes. Pour imiter des fonctions, Java utilise généralement des méthodes statiques (comme dans Java.lang.Math).

Il existe un certain nombre de langages orientés objet qui fournissent des fonctions autonomes, cependant: parmi eux Python, Ruby, JavaScript, C++, objet Pascal, et même (Yuck) PHP. Il y a une bonne raison derrière cela.

Une méthode est fondamentalement une fonction avec un paramètre supplémentaire (invisible en Java). Vous vous référez comme this . this chose vous permet d'accéder à l'objet dont la méthode est appelée, vous pouvez donc penser que l'objet entier est toujours un paramètre implicite à une méthode, en outre aux paramètres que vous définissez normalement.

Une méthode est logique si elle utilise son objet: appelle d'autres méthodes et/ou accès aux membres de données. Par exemple, une liste peut avoir une méthode getLength() qui sait comment calculer la longueur de la liste, par ex. en balayant chaque membre. Il utilise évidemment l'objet implicite this, c'est-à-dire la liste. C'est pourquoi il n'a pas besoin de paramètres explicites.

Sinon, une fonction suffit. Par exemple, pour calculer un cosinus d'angle, vous n'avez besoin que de l'angle et qu'aucun autre état, donc cos(float angle) pourrait être une fonction, et ne dépend que du paramètre Explicit angle.

Une autre chose importante est méthode primordiale. (À mon ming, c'est une pratique douteuse, mais Java l'utilise très largement.) Vous déclarez une certaine classe (appelez-la Z) a Sous-classe = d'une autre classe (appelez-le A) et modifiez la mise en œuvre de Certaines de ses méthodes (supposons que nous remplacons la méthode foo()).

La sous-classe fonctionne comme la classe de base (il est dit à fournir la même interface) mais le fait par différents moyens. Selon - principe de substitution de Liskov , vous pouvez déclarer une variable de type A, assignez-la une instance de type Z et d'invoquer la méthode foo(); Ce qui sera appelé est Z 's implication de foo(), pas A' s. Autrement dit, la méthode à appeler sera recherchée au moment de l'exécution, en fonction du type réel de l'objet. Ceci est connu comme "expédition de méthode dynamique" ou "méthodes virtuelles".

Quelle méthode indique que la méthode fournit automatiquement n'est pas facile à imiter directement avec les fonctions. (Avec des fonctions, des choses similaires sont généralement effectuées avec des "rappels" ou "fonctions d'ordre supérieur").

Dans certaines langues, telles que Java et C #, vous pouvez définir des "méthodes statiques" qui ne reçoivent pas de paramètre this. Ils fonctionnent exactement comme des fonctions "autonomes" et utilisent la classe En tant qu'espace de noms. De tels espaces de noms peuvent parfois avoir du sens, lorsqu'une méthode statique d'une classe est utilisée pour rechercher ou créer de nouvelles instances de cette classe.

J'espère que vous avez maintenant une meilleure image.

3
9000

À mon avis dans Java il n'y a pas functions. Tout ce que nous avons sont:

  1. Méthodes de l'objet
  2. Méthodes de classe (les statiques)

Fonctions, comme autonome fonctions, n'existent pas en Java.

Je voudrais soutenir ma réponse brève et catégorique, citant la page Web officielle de Java

Les objets logiciels sont conceptuellement similaires aux objets du monde réel: ils sont trop consistés au comportement de l'état et connexe. Un objet stocke son état dans les champs (variables dans certaines langages de programmation) et expose son comportement via des méthodes (fonctions dans certaines langages de programmation) . Les méthodes fonctionnent sur l'état interne d'un objet et servent de mécanisme principal pour la communication objet à objets. Cacher l'état interne et nécessitant toutes les interactions à effectuer via des méthodes d'un objet est appelée encapsulation de données - un principe fondamental de la programmation orientée objet.

Voici le lien (au cas où quelqu'un veut commencer avec Java concepts avant de commencer avec la langue pure)

Tutoriel Java - Qu'est-ce qu'un objet?

Je suppose que nous appelons souvent Fonctions à Méthodes indistinctement. Dans mon cas, c'est une question d'héritage. Mes Langauges de Firt étaient C et Visual Basic. Je lernt de concevoir des algorithmes avec diagrammes de fluxprocessus (au diagramme) étaient souvent appelés (par mon professeur) Fonctions ou procédures. Donc, je me trouve (assez souvent) au travail, disant fonction au lieu de méthodes.

Quand je commençais avec Java (il y a 10 ans), mon professeur a essayé de baliser Méthodes en 2 groupes:

processeurs . Ces méthodes qui provoquent une modification des arguments recueillis ou à l'attribut de l'objet (changement d'état). Que ce soit ou non des valeurs renvoie (void). Ou générer une nouvelle valeur dans le système. Si ou non est persisté ou non.

consulteurs Ceux qui ne provoquent pas les modifications apportées à l'objet (attributs) ou à la classe (attributs statiques)

À ce moment-là, j'ai trouvé une telle catalogueur vraiment utile à la conception du temps. Dans l'ensemble, parce que ces termes me connaissaient bien parce que c et v.b.

Quelques années plus tard, et après tant de choses mauvaises pratiques et d'innombrables lignes de "code Hilarius", je n'oserais pas proposer un tel étiquetage.

En pratique, nous finissons par mélanger les deux concepts dans des méthodes qui font les deux choses. Mais c'est une question de meilleures pratiques (ou mauvais, dépend de vos lignes mortes). J'encourage toujours mes collaborateurs à être conséquents avec la fonctionnalité de leur code et la façon dont ils définissent des méthodes et leurs noms.

C'est ma humble contribution à la question :-)

J'espère que cela aidera.

0
Laiv

Il n'y a pas de réelles différences entre les méthodes, les fonctions et les procédures, elles sont toutes les mêmes bêtes: un sous-programme, une section d'un programme, souvent nommée faire une tâche spécifique.

Une méthode n'est qu'une fonction par un autre nom.

MÊME Java a des fonctions: dans "A + B" L'opérateur "+" est une fonction. Même si cela passe par un autre nom.

Imaginez que vous feriez une nouvelle langue: JavaBlaBub, qui est une copie verbatim de Java sauf pour une chose: il n'a pas de méthodes, il a Blubzorz. Et Blubzorz à JavaBlaBub fait la même chose comme méthodes de Java.

Souhaitez-vous me prendre au sérieux lorsque je mets un visage droit et dites: JavaBlaBub est différent de Java parce qu'il n'utilise pas de méthodes?

0
Pieter B