En programmation , l' instruction `return` interrompt l'exécution de la sous-routine courante et la reprend à l'endroit précis du code qui suit immédiatement l'instruction appelante, appelé son adresse de retour . Cette adresse est enregistrée par la routine appelante, généralement aujourd'hui dans la pile d'appels du processus ou dans un registre . Dans de nombreux langages de programmation, l'instruction `return` permet à une fonction de spécifier une valeur de retour à transmettre au code appelant.
C et C++ , l' instruction `return` (où `x` est une expression ) indique à une fonction de rendre l'exécution du programme à la fonction appelante et de renvoyer la valeur de `x` . Si une fonction a le type de retour ` void` , l'instruction `return` peut être utilisée sans valeur ; dans ce cas, le programme sort simplement de la fonction courante et retourne à la fonction appelante. Une syntaxe similaire est utilisée dans d'autres langages, notamment Modula-2 et Python .return exp;expexpEn Pascal, il n'existe pas d'instruction `return`. Les fonctions et les procédures se terminent automatiquement lorsqu'elles atteignent leur dernière instruction. La valeur de retour d'une fonction est fournie à l'intérieur de la fonction par l'affectation d'une variable à un identificateur portant le même nom que la fonction. Cependant, certaines versions de Pascal proposent une fonction spéciale permettant de retourner une valeur immédiatement depuis une fonction, ou, sans paramètre, de retourner immédiatement depuis une procédure. Exit(exp);
À l'instar de Pascal, FORTRAN II , Fortran 66 , Fortran 77 et les versions ultérieures de Fortran spécifient les valeurs de retour par une affectation au nom de la fonction, mais possèdent également une instruction `return` ; cette instruction ne spécifie pas de valeur de retour et, pour une fonction, provoque le retour de la valeur affectée au nom de la fonction.
Dans certains autres langages, un paramètre de sortie défini par l'utilisateur est utilisé à la place de l'identificateur de fonction.
Oberon ( Oberon-07 ) utilise une clause de retour au lieu d'une instruction de retour. Cette clause est placée après la dernière instruction du corps de la procédure.
Certains langages de programmation orientés expressions , tels que Lisp , Perl et Ruby , permettent d'omettre l'instruction `return` explicite, en spécifiant plutôt que la dernière expression évaluée constitue la valeur de retour de la sous-routine. Dans d'autres cas, la valeur `null` est renvoyée en l'absence d'instruction `return` explicite : en Python , la valeur `null` Noneest renvoyée lorsque l'instruction `return` est omise , tandis qu'en JavaScript, la valeur `null` undefinedest renvoyée.
Dans Windows PowerShell, toutes les expressions évaluées qui ne sont pas capturées (par exemple, affectées à une variable, converties en void ou redirigées vers $null ) sont renvoyées par la sous-routine sous forme d'éléments d'un tableau, ou sous forme d'un seul objet dans le cas où un seul objet n'a pas été capturé.
En Perl, la ou les valeurs de retour d'une sous-routine dépendent du contexte d'appel. On distingue principalement trois contextes : le contexte scalaire , où le code appelant attend une valeur ; le contexte de liste , où il attend une liste de valeurs ; et le contexte vide , où il n'attend aucune valeur de retour. Une sous-routine peut vérifier le contexte à l'aide de la wantarrayfonction `context`. Une syntaxe spéciale, `return` sans arguments, permet de retourner `undefined` dans un contexte scalaire et une liste vide dans un contexte de liste. Le contexte scalaire se subdivise en contextes booléen , numérique, chaîne de caractères et références diverses . Enfin, un objet sensible au contexte peut être retourné grâce à une séquence de retour contextuelle, avec évaluation paresseuse des valeurs scalaires.
De nombreux systèmes d'exploitation permettent à un programme de renvoyer un résultat (distincte de la sortie normale ) à la fin de son exécution ; ces valeurs sont appelées codes de sortie . La quantité d'informations transmises de cette manière est assez limitée, souvent restreinte en pratique à la simple indication de succès ou d'échec. Au sein du programme, ce retour est généralement obtenu par l'appel à la fonction Exit (appel système) (courant même en C, où le mécanisme alternatif de retour depuis la fonction main est disponible).
Syntaxe
Les instructions de retour peuvent prendre de nombreuses formes. Voici les syntaxes les plus courantes :
| Langue | Déclaration de retour | Si la valeur est omise, renvoyer | |||
|---|---|---|---|---|---|
| Ada , shell , , C , C # , D , Java , JavaScript , PHP , Rust | comportement indéfini si la fonction renvoie une valeur En PHP, renvoie En JavaScript, renvoie la valeur En Java et C#, cette opération n'est pas autorisée si la fonction renvoie une valeur. | ||||
| BASIQUE | Zézayer | Perl , Ruby | PL/I | retourner(expression); retour; | Comportement indéfini si la procédure est déclarée comme renvoyant une valeur |
| Python | Conversation | Tcl | " ou une combinaison d'options plus complexe | Valeur de la dernière déclaration | |
| Visual Basic .NET | Windows PowerShell | Assemblage x86 | langages d'assemblage , par exemple celui du MOS Technology 6502 , le mnémonique « RTS » (Return from Subroutine) est utilisé. Instructions de retour multiplesla programmation structurée veillent à ce que chaque fonction possède une seule entrée et une seule sortie (SESE). Il a ainsi été avancé qu'il convient d'éviter l'utilisation de l'instruction `return` explicite, sauf à la fin textuelle d'une sous-routine, car, lorsqu'elle est utilisée pour un « retour prématuré », elle peut souffrir des mêmes problèmes que l' instruction `GOTO` . À l'inverse, on peut soutenir que l'utilisation de l'instruction `return` est pertinente lorsque l'alternative est un code plus complexe, comme une imbrication plus profonde, qui nuit à la lisibilité. |