Quelles sont les significations spécifiques des termes: fonctions, méthodes, procédures et sous-programmes?


11

Je me demande quelles sont les différences spécifiques dans la terminologie que nous utilisons pour regrouper les parties de code liées. J'ai parfois vu les termes utilisés de manière interchangeable: de nombreux langages OO utilisent même le mot-clé "fonction" pour définir une méthode. (Pourquoi?)

Si vous vouliez être précis, quelles sont les significations spécifiques de chacun? Ou s'agit-il simplement de la façon dont chaque langue choisit de l'appeler?


Les deux seuls langages dont je connais l'utilisation functionpour les méthodes sont JavaScript et PHP. Les deux utilisent le même mot-clé pour les non-méthodes (fonctions gratuites), et dans le cas de JavaScript, il n'y a pas vraiment de distinction entre les fonctions et les méthodes, du moins pas au niveau du langage.

Exemples: dans VB.Net Subest un Functionsans valeur de retour. Dans Pythonvous pouvez avoir une fonction qui ne fait partie d'aucune classe, donc ce n'est pas une méthode. Vous pouvez également déclarer des fonctions dans des fonctions, et vous pouvez également le faire en C #. Parfois, ils ont des noms différents pour la même raison que les pommes et les ananas: parce qu'ils sont différents.
Job

Qu'avez-vous trouvé jusqu'à présent qui vous fait penser qu'il y a un écart?
JeffO

Réponses:


20
  • sous-programme, le sous-programme
    "sous-programme" provient probablement du langage d'assemblage. Certains processeurs incluent des instructions pour prendre en charge les sous-programmes comme moyen d'organiser le code et de réutiliser des sections communes de code. Par exemple, le processeur 6502 avait des instructions JSR (saut vers le sous-programme) et RTS (retour du sous-programme). Je me souviens qu'il était également beaucoup utilisé dans la programmation structurée, dans laquelle un programme est une hiérarchie d'unités de code qui étaient parfois appelées sous-programmes ou sous-programmes. OMI, ce sont les termes les plus génériques pour une unité de code à laquelle le contrôle est temporairement transféré dans le but de terminer une tâche donnée.

  • fonction, procédure
    Celles-ci sont souvent utilisées de manière interchangeable, mais dans certaines langues, il y a une distinction. En Pascal, une fonction est un sous-programme qui renvoie une valeur, tandis qu'une procédure est un sous-programme qui ne le fait pas. En C et dans les langages apparentés, chaque sous-programme a un type de retour (même si c'est le cas void), il n'y a donc pas de distinction.

  • méthode, fonction membre
    Ce sont deux noms pour la même chose - essentiellement une fonction qui est associée à une classe ou un objet donné.

  • opérateur
    Chaque langue a un ensemble d'opérateurs intégrés. Dans certains langages, comme C ++, les opérateurs sont des fonctions qui peuvent être remplacées (ie remplacées) et / ou surchargées (ie définies pour de nouveaux types).

  • fonction anonyme
    Il s'agit d'une fonction sans nom. Les fonctions anonymes sont essentiellement des blocs de code qui peuvent être attribués à des variables ou passés en tant que paramètres pour une utilisation ultérieure, par exemple en tant que routine d'achèvement.

  • fermeture, expression lambda, bloc
    Une fermeture est un morceau de code lié à un ensemble de variables. Je pense que les fermetures sont des fonctions anonymes et du contexte.


4
Toutes les langues ne sont pas fournies avec des opérateurs intégrés. Certains, comme Scheme et Haskell, vous permettent simplement de définir des fonctions avec des noms comme '+' ou '>> ='. De plus, vous devriez probablement ajouter que dans certaines langues (comme Scheme), "fonction" implique une transparence référentielle (par exemple, elle retourne toujours la même valeur pour la même entrée sans effets secondaires) tandis que la procédure ne le fait pas. Sinon, bonne réponse.
Tikhon Jelvis

Jusqu'à présent, je me souviens que les "opérateurs" étaient principalement utilisés pour les fonctions avec 2 arguments. Ils étaient infixés (opérateur entre les arguments:) 2 + 2. Il existe de petites exceptions comme 1-arg comme ++arg(préfixe) ou arg++(postfix). Bien que je n'aie pas vu beaucoup d'opérateurs postfix ..
Darek Nędza

-1

Cela dépend des langues, de ce que vous pouvez en faire

  • avez-vous besoin d'une distinction
  • y a-t-il une distinction dans la syntaxe, ou s'agit-il simplement de commodité, quand on parle de code

AFAIK, dans Basic, si vous appelez quelque chose, qui ne renvoie rien, mais effectue un travail avec des effets secondaires, comme l'impression, l'écriture dans un fichier ou la modification d'une variable globale, cela s'appelait une procédure.

S'il renvoie quelque chose, il a été appelé une fonction.

Dans un langage OOP comme Java, j'ai rarement rencontré le terme «fonction», mais «méthode», et il a été enseigné que les fonctions sont des choses qui sont globales et peuvent être appelées par tout le monde.

Dans la scala fonctionnelle et en langage OOP, une méthode n'est pas appelée fonction, mais vous pouvez passer une telle chose à une autre méthode, puis elle devient une fonction.

Un sous-programme est une routine, qui est appelée par une autre routine, à ma connaissance.

En résumé, je ne pense pas qu'il existe une définition concise de toutes les langues et plus encore des paradigmes. Vous devez tenir compte de la culture spécifique, vous en êtes, si vous utilisez ces termes - vous devriez peut-être introduire votre définition en premier.


-1

Je dirais que selon le contexte, tous ces mots pourraient signifier la même chose ou des choses très différentes, par exemple ce que Caleb a écrit (mais il y a plus, c'est-à-dire des langages où les opérateurs sont des fonctions de première classe, etc.). Il est donc difficile de donner une définition spécifique, et sage de ne pas en supposer trop à moins que le contexte (langage de programmation) ne soit connu.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.