19 708 Pages

Remarque disambigua.svg homonymie - "routine" fait référence ici. Si vous êtes à la recherche d'un type d'acte de parole, voir Routine (linguistique).

en informatique, dans le cadre de programmation, un fonction (Aussi appelé sous-routine, routine, procédure, sous-routine ou méthode) Il est une construction particulière syntaxique d'un particulier langage de programmation ce qui permet de regrouper, dans un programme, une séquence de instructions en un seul bloc, de sorte que par la réalisation d'une spécifique (et en général plus complexe) le fonctionnement, l'action (ou traitement) Sur les mêmes données du programme afin que, à partir de certains apport, certain retour sortie.

L'importance, l'aspect pratique et les avantages d'une fonction sont qui peuvent être « appelés » ( « callback », « invoqué » ou « activé ») à différents points de son programme fait partie chaque fois on a besoin de le faire comme si elle était une instruction unique sans qu'il soit nécessaire d'avoir à réécrire à chaque fois que son code Ainsi en mettant en œuvre la soi-disant réutilisation code, l'ajout plus facile maintenabilité le code dans le programme et plus facile conception la logiciel selon la philosophie classique diviser et conquérir.

Les fonctions sont généralement aussi la manière dont ils construisent API d'une certaine langue de programmation.

description

Une fonction doit effectuer une tâche ou de résoudre un problème donné (ou de limiter tout problème) à l'intérieur dell 'algorithme la résolution, contribuant ainsi à la factorisation logiciel. Par exemple, un sous-programme conçu pour organiser dans l'ordre croissant d'un ensemble de nombres entiers peuvent être invoqués dans tous les contextes dans lesquels cette opération est utile ou nécessaire, et compense l'absence d'un véritable « éducation » dédiée au but, ce qui permet la tout en décrivant correspondant algorithme de tri à un point du programme.

Les sous-programmes qui mettent en œuvre les fonctionnalités de base souvent mentionné dans code source par le programmateur sont collectées dans le soi-disant bibliothèques.

dans plusieurs langages de programmation, ces fonctions sont mises en œuvre de différentes manières et avec différentes terminologies partiellement.

  • le terme sous-routine Il a été utilisé jusqu'à l'aube programmation se référer aux sections de code assemblage ou langage machine (Et il est utilisé par extension dans d'autres contextes, comme dans les premières versions du BASIC);
  • les termes procédure et fonction Ils sont généralement utilisés dans le cadre de langages de programmation de haut niveau; où ils ne sont pas considérés comme des synonymes fonctionner, cela signifie un sous-programme dont le but principal est de produire une valeur de sortie déterminée à partir de l'entrée de données (qui établit une analogie avec le concept du même nom fonction mathématique), Sans changer le statut; tandis qu'un mode opératoire est un sous-programme qui n'a pas « produit » dans toute valeur de sortie particulière, mais modifie l'état. Certaines langues (par exemple C) Adopter un modèle « standard » de la fonction, et d'examiner les procédures comme un cas particulier de la fonction qui renvoie une valeur appartenant à 'ensemble vide.
  • le terme sous-routine Il est également typique des langages de programmation de haut niveau, et est parfois utilisé comme un terme général pour désigner les deux procédures qui fonctionne dans le sens décrit ci-dessus.
  • le terme méthode Il est utilisé à la place dans le cadre de la programmation orientée objet à la place de la fonction.

opération

La quasi-totalité langages de programmation les fonctions de support, fournissant sa propre syntaxe définir une fonction, le code-à-dire d'écriture et une demande d'exécution (invocation ou appel la fonction).

En général, la syntaxe commune d'une définition de fonction comprend:

  • une identification ou nom;
  • pour langues typées un type de retour ou un emplacement spécifique sur datatype qu'il retourne vers la sortie à l'utilisateur ou à d'autres fonctions que l'invoquer; lorsqu'une fonction ne retourne rien (par exemple. le type de retour vide) La fonction sera effectué un autre traitement, en agissant par exemple sur l'état de les variables le programme ou l'affichage sur l'écran quelque chose sans rien retour. Dans les langues ou typées typage faible Au contraire, il est pas présent le type de retour.
  • la spécification (pas toujours nécessaire) de soi-disant paramètres ou opérandes dont les valeurs seront ensuite transmis dans le processus d'invocation et sur lequel la fonction sera exploitée dans le traitement de phase; même en l'absence de paramètres du corps de la fonction peut effectuer son traitement avec d'autres instructions, par exemple en agissant sur l'état des variables de programme ou d'afficher quelque chose sur l'écran.
  • la corps la fonction qui est le noyau de traitement constituée par le bloc, convenablement délimitée, d'une ou plusieurs instructions, chacune terminée par la commande de terminaison, cycles itératifs, structures conditionnelles etc., ont tous conclu avec le retour peut-être dans la variable de sortie. Variables instanciées ou définies dans le bloc seront nécessairement variables locales-à-dire avec une visibilité que dans le même bloc.

Une fonction est une portion de code qui peut être appelé à partir d'un point quelconque d'un programme. Pour l'invocation prend généralement au moins vous rappeler le nom en changeant les valeurs des paramètres, qui sont ajoutés en option d'autres détails en fonction du langage de programmation utilisé (par exemple. La notation par points dans les langages orientés objet).

Une fonction peut à son tour appeler une autre fonction, attendent avec impatience cette fois-ci. On parle dans ce cas de fonction invocateur et fonction invoqué, ou visiteur et fonction d'appel. Il est également possible qu'une fonction elle-même appelle directement ou indirectement. Dans ce cas, il est dit que, à tout moment en cours d'exécution sont plus cas d'une même fonction. Cette capacité est essentielle pour programmation récursive.

L'exécution de cette partie du programme est interrompue jusqu'à ce que l'exécution d'une fonction est non finie et continue de l'instruction suivante à cette invocation.

Un autre outil, qui peut parfois être utilisé à la place d'une fonction, mais avec des limites importantes est la macro.

variables locales

Une fonction peut définir des variables, appelées les lieux, qui ne sont visibles lors de l'exécution une instance particulière la fonction ou sont instanciés et meurent dans le bloc ou corps de la fonction. Si plusieurs instances d'une fonction sont en cours d'exécution en même temps, chacun aura sa propre copie de chaque variable locale.

Pour connaître la manière dont les déclarations faites localement à une fonction peuvent interagir avec d'autres fonctions (ou sous-blocs de code), il est nécessaire d'avoir une connaissance approfondie de la façon dont le 'environnement Il est géré par la langue.

paramètres formels et réels

En ce qui concerne le passage de paramètres au sens propre, il est défini comme une communication directe entre l'appelant et la fonction appelée.

Dans la plupart des langues, les paramètres qu'une fonction peut recevoir sont définis au moment de la définition de la fonction. Dans ce contexte, la fonction des variables qui font référence aux paramètres reçus sont appelés paramètres formels.

Lorsqu'une fonction est appelée, les identifiants associés à l'intérieur des valeurs qui sont transmises sont appelés paramètres réels, dall 'Anglais paramètres réels qui est parfois à tort traduit paramètres actuels.

Les paramètres sont normalement déterminés par le nombre de la définition de la fonction, mais certaines langues offrent des systèmes plus ou moins élégantes pour réaliser des fonctions avec un nombre variable d'arguments.

en langues typées, aussi datatype les paramètres formels doivent être définis et vérification de type Il doit également être effectué pour vérifier que les paramètres réels est d'un type compatible avec celui des paramètres formels correspondants. Le type d'un paramètre peut aussi être un complexe structure de données.

Chaque instance d'une fonction qui est en cours d'exécution à un moment donné a sa propre copie des paramètres réels (et variables locales).

Étant donné que différents paramètres d'une même fonction peuvent être passés à travers différents mécanismes, dans la référence des descriptions suivantes seront apportées au paramètre « a ».

Paramètres passage

Le comportement d'une fonction peut dépendre de données qui sont transmis en tant que paramètres lors de l'invocation; également une fonction peut retourner une sortie donnée.

Il existe différentes façons de passer des paramètres, ou l'accès à des structures définies dans le programme lui-même: toutes les langues, en fait, exploite son propre environnement selon la règles de portée la mise en œuvre, et où vous devez prendre en compte.

Les variables globales

La méthode la plus simple pour passer des paramètres à une fonction est l'utilisation de les variables Global, qui est visible de partout dans le programme. Cette pratique, si elle est appliquée sans discernement, est fortement déconseillée car elle peut conduire à la lisibilité médiocre du code sémantique, souvent avec des conséquences inattendues. Par conséquent, l'utilisation de variables globales est considérée comme une forme incorrecte du passage de paramètres.

En passant par la valeur

Avec ce mécanisme (en littérature anglaise appelée "transmettre par valeur« ) Le valeur du paramètre réel est copié à la variable de la fonction appelée qui représente le paramètre formel. Si la fonction appelée modifie, l'appelant ne sera pas en mesure de voir ce changement. Il est donc un passage à sens unique.

Étape par adresse ou référence

Avec ce mécanisme (en littérature anglaise appelée "passer par référence« ) La fonction invoquée reçoit comme paramètre a aiguille ou référence au paramètre réel. Si vous modifiez le paramètre passé par adresse, le changement sera visible à la fonction d'appel. Le passage est donc potentiellement bidirectionnel.

résultat de l'étape

Ce mécanisme (en littérature anglaise appelée "passer par la suite« ) Est unidirectionnel, à savoir sert à passer un résultat à l'appelant. Comme dans le cas de » passer l'adresse », la fonction invoquée reçoit un aiguille ou référence au paramètre réel. Ce pointeur est utilisé, cependant, de ne pas lire la valeur du paramètre, mais pour copier le résultat calculé par la fonction.

En passant par la valeur et le résultat

Ce mécanisme (en littérature anglaise appelée "passer par la valeur renvoyée"O"transmettre par valeur-résultat« ) Est une combinaison de » mécanismes de transition pour valeur « et » passer d'adresse « . Le paramètre est transmis d'adresse, à savoir la fonction d'appel reçoit un pointeur ou une référence au paramètre réel. Toutefois, dans ce cas, la fonction effectue un copie interne du paramètre réel et utilise cette copie. Avant de terminer, utilisez l'adresse du paramètre réel pour copier le contenu de sa copie interne du paramètre réel (en pratique pour renvoyer la valeur à l'appelant).

Étape par nom

Ce mécanisme (en littérature anglaise appelée "passer par les noms« ), Il est principalement utilisé de réalisation difficile dans les langages compilés dans macro. Le passage par nom, cependant, a été utilisé dans 'ALGOL 68 et Simula. Contrairement à d'autres types de passage d'un paramètre, qui est créé par la relation entre le paramètre réel et le paramètre formel, dans ce cas, il crée un lien entre le paramètre formel et une fermeture, formé par le paramètre réel avec son propre environnement d'évaluation , qui est fixée au moment de l'appel. Veillez également à doivent être prises qu'avec ce type de paramètre de transition, le paramètre réel est évalué chaque fois que le paramètre formel est rencontré lors de l'exécution.

Étape par le partage

Avec ce mécanisme (en littérature anglaise appelée "passer par le partage« ), Adoptée par exemple par python, appelant et partagent le paramètre callee réel.

valeur de retour

icône Loupe mgx2.svg Le même sujet en détail: Retour (informatique).

Une fonction peut renvoyer une valeur (typé) À l'appelant. Ce mode de passage de données est unidirectionnel, de l'appelé à l'appelant.

Un appel de fonction est donc un 'expression, lequel il est évalué pour obtenir une valeur. L'évaluation d'une expression qui contient un appel de fonction comprend l'exécution de la fonction elle-même.

Dans certaines langues, le terme procédure indique une fonction sans valeur de retour, dans d'autres, il utilise un type de données spécifique, leditvide, pour la valeur de retour, ce qui signifie que la fonction ne retourne rien.

Dans les langages fonctionnels du type de données renvoyées peut être une fonction, l'appelant peut invoquer.

Déploiement de la fonction

Lors de la programmation des fonctions sont un outil important et si répandu que d'exiger une gestion très efficace de leur exécution afin de maintenir les temps d'appel bas de la fonction et retourner le contrôle au programme appelant. Pour cette raison, sont normalement pris en charge directement la gestion de l'allocation des variables locales et le passage de paramètres par 'matériel. L'existence de cheminée dans les architectures matérielles, il est précisément en raison de la nécessité de soutenir efficacement les fonctions. En fait, lorsqu'une fonction est appelée la pointe du code qui a été invoqué est sauvegardé dans la pile (adresse de retour), Ainsi que les paramètres et les variables locales d'une fonction sont enregistrées sur la pile.

Cet ensemble de données sur la pile est appelée enregistrement d'activation, et il représente une fonction au moment de l'exécution, qui peut être suspendu en attendant l'achèvement d'une autre fonction qui à son tour a invoqué.

L'enregistrement d'activation sur la pile est la fonction en cours d'exécution ci-dessous est celle de la fonction qui a appelé, et ainsi de suite.

La pile peut également être utilisé dans d'autres manières, par exemple pour stocker temporairement des valeurs intermédiaires dans l'évaluation des expressions arithmétiques.

en assemblage il existe des fonctions dédiées à l'appui des fonctions et de l'empilement, avec une correspondante dirigée en langage machine:

  • PUSH: mettre une valeur sur cheminée
  • POP: lire et supprimer une valeur de la pile
  • JSR: saut vers sous-routine, ou passer à un sous-programme (sauvegarde l'adresse de retour sur la pile avec PUSH)
  • RET: retour d'un sous-programme à l'appelant (identifié en effectuant une adresse de retour de POP de la pile)

Bien sûr, chaque fonction ou un morceau de code qui utilise la pile a la responsabilité de supprimer tout ce qui a mis sur la pile avant de se terminer (et rien de plus que de mettre), sinon la valeur d'un paramètre ou une variable locale sera utilisée comme l'adresse de retour, avec des conséquences imprévisibles. La difficulté d'assurer manuellement que l'équité est l'une des raisons qui justifient l'utilisation de Langages de haut niveau, qui gèrent automatiquement la cohérence de la pile.

En raison de ces opérations, l'invocation d'une fonction implique un coût, bien que normalement modeste, en termes de performance.

sécurité

Le mécanisme de mise en œuvre des fonctions, ainsi que l'arithmétique des pointeurs dans la langage C, Il est exploité pour construire des attaques de type débordement de pile ou débordement de tampon, qui vous permettent de prendre le contrôle d'un programme en cours d'exécution en fournissant des données artefacts avec précision.

Articles connexes

D'autres projets

fiber_smart_record Activités Wiki:
Aidez-nous à améliorer Wikipedia!
aller