Question simple, mais j’entends souvent ces trois termes définis avec une telle férocité, mais qui m’ont appris à signifier différentes choses au fil des ans.
Quelles sont les définitions "correctes" de "Procédures", "Méthodes", "Fonction", "Sous-programmes", etc.?
programming-practices
coding-standards
terminology
Django Reinhardt
la source
la source
Réponses:
Je vais avec une réponse différente ici: pratiquement, il n'y a vraiment aucune différence , à la légère exception que "méthode" se réfère généralement à un sous-programme associé à un objet dans les langages OO.
Les termes "procédure, fonction, sous-programme, sous-programme et méthode" signifient vraiment la même chose: un sous-programme appelable dans un programme plus vaste. Mais il est difficile de trouver une définition qui capture toutes les variantes d'utilisation de ces termes, car ils ne sont pas utilisés de manière uniforme dans les langages de programmation ou les paradigmes.
Vous pourriez dire qu'une fonction renvoie une valeur. Eh bien, la fonction C suivante ne renvoie pas de valeur:
... mais je doute que vous trouviez quelqu'un qui pourrait appeler cela une procédure.
Bien sûr, en Pascal, les procédures ne renvoient pas de valeurs et les fonctions renvoient des valeurs, mais cela reflète simplement la façon dont Pascal a été conçu. En Fortran, une fonction renvoie une valeur et un sous-programme renvoie plusieurs valeurs. Pourtant, rien de tout cela ne nous permet vraiment de proposer une définition "universelle" de ces termes.
En fait, le terme "programmation procédurale" désigne toute une classe de langages, notamment le C, le Fortran et le Pascal, dont un seul utilise le terme "procédure" pour signifier n'importe quoi.
Donc, rien de tout cela n’est vraiment cohérent. La seule exception est probablement "méthode", qui semble être utilisée presque entièrement avec les langages OO, en référence à une fonction associée à un objet. Même si cela n’est pas toujours cohérent. C ++, par exemple, utilise généralement le terme "fonction membre" plutôt que le terme méthode (même si le terme "méthode" est entré dans la langue vernaculaire C ++ parmi les programmeurs).
Le fait est que rien de tout cela n’est vraiment cohérent. Cela reflète simplement la terminologie employée par les langues en vogue à l’époque.
la source
Une fonction renvoie une valeur, mais pas une procédure .
Une méthode est similaire à une fonction, mais
interne à unepartie d'une classe. Le terme méthode est utilisé presque exclusivement dans la programmation orientée objet.la source
function
deux rôles sont remplis dans JS, mais toutes les fonctions de JS reviennent. Lorsqu'une instruction return n'a pas de valeur, la valeur est implicitementundefined
. Lorsqu'une instruction return est absente, l'interprète ajoute une instruction return implicite. Esotérique, peut-être, mais cela correspond à la définition donnée ici. C'est pourquoivar x = function() {}();
est légal dans JS; sinon pour les retours implicites, il faudrait que ce soit une erreur, comme ce serait le cas en Pascal.Une fonction est quelque chose qui prend un tas d’intrants et renvoie une ou plusieurs valeurs. Si les valeurs renvoyées sont entièrement déterminées par les entrées et si la fonction n'a aucun effet secondaire (journalisation, peut-être, ou provoquant des changements d'état en dehors de lui-même), cela s'appelle une fonction pure.
Une procédure est une fonction qui ne renvoie pas de valeur. Cela signifie notamment qu'une procédure ne peut que provoquer des effets secondaires. (Cela pourrait inclure la mutation d'un paramètre d'entrée!)
Une méthode est une fonction qui ferme sur un ensemble de variables, c'est-à-dire une fermeture . Il prend zéro ou plus de paramètres d'entrée, a accès à cet ensemble de variables et renvoie zéro ou plus de valeurs. Dans les langages OO, ces méthodes sont attachées à des objets ou à des classes.
Dans la plupart des langages OO classiques, ces variables fermées sont appelées champs membres, ou variables d'instance, d'un objet. Une méthode peut être une fonction pure, une fonction impure ou une procédure.
Cette dernière définition conduit à la correspondance objet = struct + fermures .
la source
foo.doSomething()
n'est pas sans paramètre. Il a un paramètre (l'objetfoo
) avec donné avec du sucre syntaxique. Une fermeture serait capable de référencer son objet sans avoir besoin d'un tel paramètre. Cela ne veut pas dire que les méthodes ne peuvent pas être des fermetures, mais que la plupart ne le sont pas, et qu'être OO n'est pas suffisant pour qu'un langage prenne en charge les fermetures.foo.doSomething()
ferme sur lafoo
variable. Toute déclaration endoSomething
peut accéderfoo
viathis
ouself
, en fonction de votre langue. C’est la définition même de «fermer par-dessus». Les classes se ferment sur leurs variables de membre, donc (en ignorant "qu'est-ce que OO"), OO est suffisant. C'est assez connu dans la littérature ...foo.
à l'avantfoo.doSomething()
? C'est vous qui passezdoSomething()
un paramètre. Le fait que ce ne soit pas entre parenthèses ne signifie pas que ce n'est pas un paramètre. La méthodethis
ouself
à l'intérieur de la méthode est simplement un sucre syntaxique pour référencer ce paramètre.Bruce a une bonne réponse . J'ajouterais sémantiquement:
printf
)la source
A procedure should "do something" to the arguments
- ou causer un autre effet secondaire (par exempleprintf
).printf
renvoie une valeur - le nombre de caractères imprimés - est donc techniquement une fonction.printf
c'est une valeur. Il a eu un effet secondaire spécifique en dehors de sa portée d’invocation: à savoir l’entrée / sortie sur la sortie standard supposée. Même si Scott n’était pas explicite à propos de cette distinction, les fonctions de programmation fonctionnelle ne sont pas censées avoir d’effets secondaires et devraient pouvoir répondre aux questions comme si vous aviez les données qu’elles renvoient.bonnes réponses détaillées ci-dessus; la nouvelle est qu'ils vont tous les goûts de sous-routines; la signification de chaque terme varie en fonction du contexte du langage de programmation
en général, les fonctions retournent une valeur, mais elles n'ont pas à
les méthodes sont un termes génériques de POO à l'heure actuelle
en SQL, les procédures stockées ont des sorties mais ne renvoient généralement qu'un code d'erreur, tandis que les fonctions définies par l'utilisateur doivent renvoyer une valeur (qui peut être un ensemble de résultats)
encore une fois, la différence précise entre ces termes dépend de votre interlocuteur!
la source
80% des compétences sont directement liées à la connaissance de la nomenclature,
95% de la productivité est la capacité d'identifier ce qui est utile pour le moment malgré les termes utilisés pour le décrire
Je préfère plutôt appeler toutes les méthodes en c #, sauf lorsque j’utilisais MSSQL, nous avions des sproc, mais bien sûr, nous utilisons maintenant Postgres, qui sont appelées fonctions.
la source