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é.
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.
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.
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.
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.
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.
SELECT
ainsi que des instructions DML (INSERT
, UPDATE
, DELETE
), alors que Function autorise uniquement l'instruction SELECT
.SELECT
, alors que les fonctions peuvent être incorporées dans une instruction SELECT
.WHERE
(ou un bloc HAVING
ou un SELECT
), alors que les fonctions peuvent.JOIN
avec d'autres tables.JOIN
et d'autres opérations de jeu de lignes.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
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.
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.
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.
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.
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.
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.
Dans le contexte de db: La procédure stockée est le plan d'exécution précompilé où les fonctions ne sont pas.
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.");
}