web-dev-qa-db-fra.com

Quelle est la différence entre une "fonction" et une "procédure"?

De manière générale, nous entendons tous parler de fonctions ou procédures dans les langages de programmation. Cependant, je viens de découvrir que j’utilise ces termes de manière presque interchangeable (ce qui est probablement très faux).

Donc, ma question est:

Quelle est la différence en termes de fonctionnalité, de but et d'utilisation?

Un exemple serait apprécié.

183
rpr

Une fonction renvoie une valeur et une procédure exécute uniquement des commandes.

La fonction de nom vient des maths. Il est utilisé pour calculer une valeur en fonction des entrées.

Une procédure est un ensemble de commandes pouvant être exécutées dans l’ordre.

Dans la plupart des langages de programmation, même les fonctions peuvent avoir un ensemble de commandes. Par conséquent, la différence réside uniquement dans le retour d'une partie valeur.

Mais si vous souhaitez garder une fonction propre (il suffit de regarder les langages fonctionnels), vous devez vous assurer qu'une fonction n'a pas d'effet secondaire.

273
Toon Krijthe

Cela dépend du contexte.

Dans les langages de type Pascal, les fonctions et les procédures sont des entités distinctes, qu’elles renvoient ou non une valeur. Ils se comportent différemment. la syntaxe du langage (par exemple, les appels de procédure, les instructions de formulaire; vous ne pouvez pas utiliser un appel de procédure dans une expression, alors que les appels de fonction ne forment pas les instructions de formulaire, vous devez les utiliser dans d'autres instructions). Par conséquent, les programmeurs de niveau Pascal différencient ceux-ci.

Dans les langages C-like et dans de nombreux autres langages contemporains, cette distinction a disparu; dans les langages statiques, les procédures ne sont que des fonctions avec un type de retour amusant. C'est probablement pourquoi ils sont utilisés de manière interchangeable.

Dans les langages fonctionnels, il n’existe généralement pas de procédure: tout est fonction.

37
jpalecek

Exemple en C:

// function
int square( int n ) {
   return n * n;
}

// procedure
void display( int n ) {
   printf( "The value is %d", n );
}

Notez que le standard C ne parle pas de procédures, mais seulement de fonctions.

15
anon

En général, une procédure est une séquence d'instructions.
Une fonction peut être identique, mais elle renvoie généralement un résultat.

11
HS.

Il existe un terme sous-programme ou sous-programme qui désigne un morceau de code paramétré pouvant être appelé à partir de différents endroits.

Les fonctions et procédures sont des implémentations de celles-ci. Habituellement, les fonctions renvoient des valeurs et les procédures ne renvoient rien.

10
sharptooth

Différences de base

  • Une fonction doit renvoyer une valeur, mais dans les procédures stockées, elle est facultative: une procédure peut renvoyer 0 ou n valeurs.
  • Les fonctions ne peuvent avoir que des paramètres d'entrée, alors que les procédures peuvent avoir des paramètres d'entrée/sortie.
  • Pour une fonction, il est obligatoire de prendre un paramètre d'entrée, mais une procédure stockée peut prendre de 0 à n paramètres d'entrée.
  • Les fonctions peuvent être appelées à partir d'une procédure alors que les procédures ne peuvent pas être appelées à partir d'une fonction.

Différences avancées

  • Les exceptions peuvent être gérées par des blocs try-catch dans une procédure, alors qu'un bloc try-catch ne peut pas être utilisé dans une fonction.
  • Nous pouvons opter pour la gestion des transactions dans une procédure, alors que dans une fonction, nous ne le pouvons pas.

En SQL:

  • Une procédure autorise SELECT ainsi que des instructions DML (INSERT, UPDATE, DELETE), alors que Function autorise uniquement l'instruction SELECT.
  • Les procédures ne peuvent pas être utilisées dans une instruction SELECT, alors que les fonctions peuvent être incorporées dans une instruction SELECT.
  • Les procédures stockées ne peuvent pas être utilisées dans les instructions SQL où que ce soit dans un bloc WHERE (ou un bloc HAVING ou un SELECT), alors que les fonctions peuvent.
  • Les fonctions renvoyant des tables peuvent être traitées comme un autre ensemble de lignes. Ceci peut être utilisé dans un bloc JOIN avec d'autres tables.
  • Les fonctions en ligne peuvent être considérées comme des vues prenant des paramètres et pouvant être utilisées dans des blocs JOIN et d'autres opérations de jeu de lignes.
6
Mudassar Shahbaz

Dans la procédure, nous pouvons utiliser des instructions DML (Insert/Update/Delete), mais dans la fonction Inside, nous ne pouvons pas utiliser d’instructions DML.

La procédure peut avoir les deux paramètres d’entrée/de sortie, mais Function ne peut avoir que des paramètres d’entrée.

Nous pouvons utiliser le bloc Try-Catch dans la procédure stockée, mais en fonction, nous ne pouvons pas utiliser le bloc Try-Catch.

Nous ne pouvons pas utiliser la procédure stockée dans l'instruction Select, mais en fonction, nous pouvons utiliser dans l'instruction Select.

La procédure mémorisée peut renvoyer des valeurs 0 ou n (max. 1024), mais Function ne peut renvoyer qu'une seule valeur obligatoire.

Une procédure stockée ne peut pas être appelée depuis une fonction, mais nous pouvons appeler une fonction depuis une procédure stockée.

Nous pouvons utiliser transaction dans la procédure stockée, mais en fonction, nous ne pouvons pas utiliser transaction.

Nous ne pouvons pas utiliser la procédure stockée dans l'instruction Sql dans la section Où/Avoir/Sélectionner, mais dans, nous pouvons utiliser.

Nous ne pouvons pas rejoindre la procédure stockée, mais nous pouvons rejoindre la fonction.

pour plus .. cliquez ici ... http://dotnet-developers-cafe.blogspot.in/2013/08/difference-between-stored-procedure-and.html

5
Mukesh Kumar

Plus strictement, une fonction f obéit à la propriété que f(x) = f(y) si x = y, c'est-à-dire qu'elle calcule le même résultat chaque time, il est appelé avec le même argument (et donc il ne change pas l’état du système.)

Ainsi, Rand () ou print ("Hello"), etc. ne sont pas des fonctions mais des procédures. Alors que sqrt (2.0) devrait être une fonction: il n’ya pas d’effet observable ni de changement d’état, peu importe la fréquence à laquelle on l’appelle et il retourne toujours 1,41 et certains.

5
Ingo

Dans la plupart des contextes: une fonction renvoie une valeur, pas une procédure. Les deux sont des morceaux de code regroupés pour faire la même chose.

Dans un contexte de programmation fonctionnelle (où toutes les fonctions renvoient des valeurs), une fonction est un objet abstrait:

f(x)=(1+x)
g(x)=.5*(2+x/2)

Ici, f est la même fonction que g, mais la procédure est différente.

3
xtofl

Si nous sommes indépendants de la langue ici, procedure spécifie généralement une série d'actes nécessaires pour obtenir un résultat certain, avec fiabilité et efficacité. C'est-à-dire qu'une procédure est fondamentalement un algorithme.

Les fonctions, en revanche, constituent un élément de code quelque peu indépendant dans un programme plus vaste. En d'autres termes, la fonction est la mise en œuvre d'une procédure.

3
Anton Gogolev

Une fonction renvoie une valeur et une procédure exécute uniquement des commandes.

La fonction de nom vient des maths. Il est utilisé pour calculer une valeur en fonction des entrées.

Une procédure est un ensemble de commandes pouvant être exécutées dans l’ordre.

Dans la plupart des langages de programmation, même les fonctions peuvent avoir un ensemble de commandes. Par conséquent, la différence réside uniquement dans le retour d'une partie valeur.

Mais si vous souhaitez garder une fonction propre (il suffit de regarder les langages fonctionnels), vous devez vous assurer qu'une fonction n'a pas d'effet secondaire.

2
OWOEYE GBENGA

Je m'oppose à quelque chose que je vois encore et encore dans la plupart de ces réponses: ce qui fait d’une fonction une fonction, c’est qu’elle renvoie une valeur.

Une fonction n'est pas simplement une ancienne méthode qui renvoie une valeur. Pas vraiment: pour qu'une méthode soit une fonction réelle, elle doit toujours renvoyer la même valeur avec une entrée spécifique. Un exemple de méthode qui n'est pas une fonction est la méthode random dans la plupart des langages, car bien qu'elle renvoie une valeur, la valeur n'est pas toujours la même.

Une fonction s'apparente donc davantage à une carte (par exemple, où x -> x' pour une fonction unidimensionnelle). Il s’agit d’une distinction très importante entre les méthodes et les fonctions habituelles, car lorsqu’il s’agit de fonctions réelles, le timing et l’ordre dans lequel elles sont évaluées ne doivent jamais importé où, comme ce n’est pas toujours le cas avec les non-fonctions.

Voici un autre exemple de méthode qui n'est pas une fonction mais qui retournera toujours une valeur.

// The following is pseudo code:
g(x) = {
  if (morning()) {
     g = 2 * x;
  }
  else {
   g = x;
  }
  return g;
}

Je m'oppose en outre à l'idée que les procédures ne renvoient pas de valeurs. Une procédure est juste une manière spécifique de parler d’une fonction ou d’une méthode. Cela signifie donc que si la méthode sous-jacente définie ou implémentée par votre procédure renvoie une valeur, devinez à quoi cette procédure renvoie une valeur. Prenons par exemple l'extrait suivant tiré du SICP :

// We can immediately translate this definition into a recursive procedure 
// for computing Fibonacci numbers:

(define (fib n)
  (cond ((= n 0) 0)
        ((= n 1) 1)
        (else (+ (fib (- n 1))
                 (fib (- n 2))))))

Avez-vous entendu parler de procédures récursives beaucoup ces derniers temps? Ils parlent d'une fonction récursive (une vraie fonction) et renvoie une valeur et ils utilisent la "procédure" de Word. Alors, quelle est la différence, alors?

Une autre façon de penser d’une fonction (en plus du sens mentionné ci-dessus) est la représentation abstraite d’un idéal comme le numéral 1. Une procédure est l’application réelle de cette chose. Personnellement, je pense qu'ils sont interchangeables.

(Notez que si vous lisez ce chapitre à partir du lien que je vous ai fourni, vous constaterez peut-être qu’un concept plus difficile à comprendre n’est pas la différence entre une fonction et une procédure, mais un processus et une procédure. Saviez-vous qu’une procédure récursive peut avoir une processus itératif?)

Un analogue pour les procédures sont des recettes. Par exemple; supposons que vous ayez une machine appelée make-pies cette machine prend en compte les ingrédients de (fruit, milk, flower, eggs, sugar, heat) et cette machine retourne un pie.

Une représentation de cette machine pourrait ressembler à

make-pies (fruit, milk, flower, eggs, sugar, heat) = {
   return (heat (add fruit (mix eggs flower milk)))
}

Bien sûr, ce n'est pas le seul moyen de faire une tarte.

Dans ce cas, nous pouvons voir que:

A       function     is to a     machine
as a    procedure    is to a     recipe
as      attributes   are to      ingredients
as      output       is to       product

Cette analogie est acceptable, mais elle disparaît lorsque vous prenez en compte le fait que lorsque vous utilisez un programme informatique, tout est une abstraction. Donc, contrairement à une recette à une machine, nous comparons deux choses qui sont elles-mêmes des abstractions; Deux choses qui pourraient aussi bien être la même chose. Et je soutiens qu'ils sont (à toutes fins utiles) la même chose.

1
dkinzer

La fonction peut être utilisée dans une instruction SQL alors que la procédure ne peut pas être utilisée dans une instruction SQL.

Les instructions Insert, Update et Create ne peuvent pas être incluses dans une fonction, mais une procédure peut avoir ces instructions.

La procédure prend en charge les transactions mais les fonctions ne prennent pas en charge les transactions.

La fonction doit renvoyer une et une seule valeur (une autre peut être renvoyée par la variable OUT), mais la procédure renvoie autant d'ensembles de données et de valeurs.

Les plans d'exécution des fonctions et des procédures étant mis en cache, les performances sont identiques dans les deux cas.

1
pulak

Dans le contexte de db: La procédure stockée est le plan d'exécution précompilé où les fonctions ne sont pas.

0
Awais

En termes de С #/Java, fonction est le bloc de code qui renvoie une valeur particulière, mais procedure est le bloc de code qui renvoie void = (rien). En C #/Java, les deux fonctions et procédures sont le plus souvent appelées simplement méthodes.

    //This is a function
    public DateTime GetCurrentDate()
    {
        return DateTime.Now.Date;
    }

    //This is a procedure(always return void)
    public void LogMessage()
    {
        Console.WriteLine("Just an example message.");
    }
0
user2771704