1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.

Général à quoi sert l'instruction "return"

Discussion dans 'Arduino' créé par gégé62, 13 Juin 2016.

  1. gégé62

    gégé62 Compagnon

    Messages:
    1 386
    Inscrit:
    26 Février 2013
    Localité:
    Harnes (Pas de Calais)
    Département:
    62440
    à quoi sert l'instruction "return"
    bonjour,

    On rencontre fréquemment "return" à la fin d'une fonction. Je cherche à comprendre à quoi elle sert. On voit souvent expliqué ainsi....cela sert à "retourner" une valeur....voire à stopper le déroulement de la fonction.

    mais ça ne me parle pas, je dois avoir l'esprit tordu (comme beaucoup de mon âge ?) ou...pas assez! Ça veut dire quoi "retourner une valeur"......elle retourne où ???
    le sens du verbe "retourner" est probablement un abus de langage par rapport à la vie courante (retourner d'où on vient, retourner sa veste...:wink: ???)
    J'ai déjà fait quelques programmes comportant moult fonctions, je n'ai jamais utilisé "return" et apparemment ça fonctionne.

    Je cherche donc à savoir ce qui se passe dans le MC au moment où apparait ce mot magique....
    Par exemple si j'ai

    c = a+b

    la variable c possède instantanément une nouvelle valeur, égale à a+b, à quoi bon ajouter "return c" ?

    Suis-je le seul à me poser cette question ?

    merci d'avance
     
  2. phil135

    phil135 Compagnon

    Messages:
    939
    Inscrit:
    15 Septembre 2012
    Localité:
    france, essonne, nord
    à quoi sert l'instruction "return"
    c'est lié à la notion de sous-programme
    la fonction n'est pas forcement appelée au fil du programme principal, elle peut être utilisée depuis plusieurs endroits -> return permet de retourner là où on était
    c'est surtout utile pour les fonction un peu compliquées dont l'écriture consomme un peu de place, assez de place pour qu'on n'ai pas envie de l'écrire plusieurs fois
     
  3. Nomadsoul

    Nomadsoul Apprenti

    Messages:
    77
    Inscrit:
    26 Avril 2014
    Localité:
    Alsace
    à quoi sert l'instruction "return"
    Salut gégé,

    Bonne question ! Cela permet de faire des chose plus complexe, mais voici un exemple avec ton exemple pour comprendre:

    c= fonction(a,b)

    fonction(a un entier, b un entier)
    resultat= a+b
    retourne resultat
    fin fonction

    en faite en retournant un résultat c'est comme si la fonction prenait la valeur du resultat contenu dans la fonction.
    ici fonction(a,b) retourne comme résultat a+b se qui équivaut a c = a+b.
    Le but étant de faire bien sure de faire des choses plus complexe. Si par exemple a et b sont des valeur qui sont lu dans un fichier ou sur un port série, mieux vaut les prendre d'une fonction. Cela permet d'appeler une fonction quand tu le souhaite et évite de réécrire toujours le même code si tu as besoin de recalculer plusieurs fois a+b.

    En espérant t'avoir aidée :)

    a+
     
  4. gégé62

    gégé62 Compagnon

    Messages:
    1 386
    Inscrit:
    26 Février 2013
    Localité:
    Harnes (Pas de Calais)
    Département:
    62440
    à quoi sert l'instruction "return"
    merci de vos réponses, je vais regarder ça de près.

    je me demande aussi si je n'aurais pas dû mettre mon post dans
    "Généralités sur les variables, librairies, ... pour les débutants",

    au lieu de créer un nouveau fil....?

    de plus, je ne sais pas comment mettre un Tag (ici: general)
     
  5. chrisD

    chrisD Apprenti

    Messages:
    90
    Inscrit:
    30 Novembre 2014
    Localité:
    Sathe
    à quoi sert l'instruction "return"
    Tres bonne question. Merci Gégé de l'avoir posée, car moi aussi je me demandais à quoi sert cette fonction. Merci pour vos réponses. :P
     
  6. jpbbricole

    jpbbricole Ouvrier

    Messages:
    441
    Inscrit:
    26 Mai 2016
    Localité:
    Corsier-sur-Vevey (Vaud)
    Département:
    1804
    à quoi sert l'instruction "return"
    Lundi et déjà entrain de te poser des questions fondamentales !

    Fondamentalement, return sert, en fin de sous routine, dans le déroulement du programme, à lui dire de retourner à l’adresse de l’appel de cette sous routine +1 afin de continuer le déroulement.

    Dans un langage structuré comme VisualBasic le return se trouve toujours en fin de sous routine et s'appelle End Sub ou End Function. Dans le langage Arduino c'est le } qui fait office.

    Par contre dans le cas du langage de l'Arduino, si tu fais:

    void loop()
    {
    int x = sousRoutine(12);
    // x vaut 13 et n'est "vue" que dans loop
    }

    int sousRoutine(int valeur)
    {
    valeur ++ ; // valeur vaut 13
    return(valeur) ;
    valeur +=22 ; // valeur vaut 35
    }

    return(valeur) "fige" la valeur qui sera retournée par sousRoutine.

    En principe il n'y a pas de return() dans une void sousRoutine puisque void veut dire rien ou vide.
    L'attribut de sous routine peut prendre toutes les formes que la déclaration de variables:
    int
    string
    boolean
    etc
    Donc le type de variable retournée pas return(), est toujours le type de la sous routine.
    ouf!


    Bonne journée
    Jean-Pierre
     
    Dernière édition: 13 Juin 2016
  7. speedjf37

    speedjf37 Compagnon

    Messages:
    980
    Inscrit:
    15 Octobre 2009
    Localité:
    indre et loire
    à quoi sert l'instruction "return"

    return(valeur) ;

    Erreur tout code situé après le return ne sera pas exécuté

    valeur +=22 ; // valeur vaut 35


    La valeur de retour sert très souvent à savoir si la sous-routine c'est bien passée.

    result=sousRoutine(compteur);
    if (result >=0) //Test OK
    {
    }



    int sousRoutine(int valeur)
    {
    valeur ++ ; // +1

    if (valeur> 12)
    return (0);
    else
    return (-1);

    }
     
  8. lion10

    lion10 Compagnon

    Messages:
    3 392
    Inscrit:
    7 Mai 2010
    à quoi sert l'instruction "return"
    Bonjour

    La fin d'une fonction a lieu à l'occurence du mot clé "return" ou sinon de la dernière accolade de la fonction.
    => Le "return" équivaut en quelque sorte à "goto fin de la fonction".
    => Donc s'il n'y a pas de "return" la fonction est éxécutée mais elle renvoie une valeur indéfinie, c'est une erreur de codage potentielle.
    => On peut donc très bien trouver une fonction sans "return" mais quel est l'intérêt ? Il vaut mieux utiliser une procédure avec "void".

    Lorsqu'il y a un "return(Z)" Z est renvoyé par la fonction. Attention Z est converti avec le type qui est indiqué dans la déclaration de la fonction :

    char Z multiplie( X, Y)
    char X, Y;
    { Z = X*Y;
    return(Z); // erreur car risque de dépassement si X et Y font par exemple 127
    }

    Pour un programme clair et structuré je conseillerai de ne mettre qu'un return dans une fonction, traditionnellement à la fin.
    Mais s'il s'agit d'un traitement, par exemple une sucession de test qui sont évalués l'un après l'autre et si l'on doit renvoyer une erreur au premier échec , alors pourquoi pas.

    cdlt lion10
     
  9. M4vrick

    M4vrick Ouvrier

    Messages:
    312
    Inscrit:
    12 Août 2015
    à quoi sert l'instruction "return"
    Je me permet d'apporter une petite correction à ce que vient de dire jpbbricole: "En principe il n'y a pas de return() dans une void sousRoutine puisque void veut dire rien ou vide."

    Il y a deux notions différentes:
    - le void avant la déclaration de la fonction (pour rester dans les standard de syntaxe arduino, on utilise pas de sous routine mais on déclare des fonctions) indique que l'on n'attends pas de valeur à la fin de l'appel de la fonction
    - la fonction return(): elle permet d'interrompre une fonction avant d'en arriver à la fin, elle peux (mais ce n'est pas obligatoire) permettre de renvoyer une valeur lorsque l'on quitte la fonction. On peut très bien utiliser un test en début de fonction avec un return() pour l'interrompre en fonction du résultat du test.
     
  10. Fred69

    Fred69 Compagnon

    Messages:
    2 790
    Inscrit:
    2 Décembre 2008
    Localité:
    F-69 sud-ouest Lyon
    à quoi sert l'instruction "return"
    Lorsque l'exécution d'un sous-programme est terminée, il y a un RETOUR à l'instruction qui
    suit l'appel dans le programme appelant.
    Par exemple dans un calcul de TVA, on appellera un sous-programme "calcul_tva" en lui passant en paramètre le "montant" et le "taux de TVA".
    En retour la tva calculée.
    Voir les exemples: "Les sous-programmes", ou ici "les sous-programmes".
    Fred
     
  11. jpbbricole

    jpbbricole Ouvrier

    Messages:
    441
    Inscrit:
    26 Mai 2016
    Localité:
    Corsier-sur-Vevey (Vaud)
    Département:
    1804
    à quoi sert l'instruction "return"
    Oups! Exacte!

    Cette instruction return() sert surtout pour créer nos propres fonctions et sert de résultat de celle-ci.

    J'ai trop fait de Visual Basic! encore de vieux restes.

    Cordialement
    jpbbricole
     
  12. speedjf37

    speedjf37 Compagnon

    Messages:
    980
    Inscrit:
    15 Octobre 2009
    Localité:
    indre et loire
    à quoi sert l'instruction "return"
    Pas d'accord !
    si fonction non "void" après le retour ,on revient à l'instruction qui a provoqué l'appel et on affecte ou on teste la valeur de retour .
    edit: (pas réussi a mettre barré) supression la ligne

    PS) il peut y avoir plusieurs instructions sur une même ligne

    JF
     
    Dernière édition: 13 Juin 2016
  13. jpbbricole

    jpbbricole Ouvrier

    Messages:
    441
    Inscrit:
    26 Mai 2016
    Localité:
    Corsier-sur-Vevey (Vaud)
    Département:
    1804
    à quoi sert l'instruction "return"
    Que la fonction soit void ou pas, on va à l'instruction suivante. La notion de ligne n'existe pas dans ce cas de figure, la possibilité de mettre plusieurs instruction par ligne, n'est qu'une facilité offerte par le compilateur et n'entre pas dans la structure du programme et est très peu utilisée pour des raison de lisibilité du programme.

    bon appétit
     
    Dernière édition: 13 Juin 2016
  14. Fred69

    Fred69 Compagnon

    Messages:
    2 790
    Inscrit:
    2 Décembre 2008
    Localité:
    F-69 sud-ouest Lyon
    à quoi sert l'instruction "return"
    Restons simple syouplait sans rentrer dans des conditions de langage spécifique ... beaucoup ne savent même pas ce qu'est un programme.
    Fred
     
  15. lion10

    lion10 Compagnon

    Messages:
    3 392
    Inscrit:
    7 Mai 2010
    à quoi sert l'instruction "return"
    Bonjour

    En résumé , "return" permet de renvoyer la valeur que l'on vient de calculer dans une fonction.
    Si on ne met pas "return" la fonction ne renvoie rien et le traitement se pousuit jusqu'à la fin de la fonction. :!:
    Si on met "return" elle renvoie quelque chose et arrête son traitement dés qu'on y passe.
    Si plusieurs "return" sont mis c'est comme s'il y avait plusieurs portes de sortie en début du couloir et que logiciel prenait la première sortie par laquelle il passe lors de son exécution. S'il ne passe par aucune de ces portes de sortie, il est quitte à s'éxécuter jusqu'à la dernière porte de sortie qui correspond à sa fin.
    Un return permet de renvoyer un code d'erreur.

    Bien faire attention :
    -au type calculé dans la fonction puis au type renvoyé qui est converti.:!: (Cf mon exemple)
    -à ne pas oublier le return si on veut renvoyer une valeur.
    -la portée des variables, si la variable est globale on n'a pas besoin de passer par une fonction pour renvoyer la valeur mais c'est moins propre.
    Eviter systématiquement de mettre une variable globale permet de limiter leur visibilité, dans des logiciels plus conséquent, une fonction ne verra pas la variable qui n'est pas globale à tout le programme elle sera en partie protégée sauf gros problème du logiciel.
    => Mais c'est une notion plus avancée pour une utilisation dans un second temps si on considère un très petit logiciel amateur arduino.
    Quand le logiciel est plus important avec de nombreux fichiers cette notion est indispensable.

    => Pour aller plus loin encore, il faut savoir qu'une fonction ne peut pas renvoyer n'importe quoi via son "return", si la variable est encombrante on passe par un pointeur. Mais si on considère un logiciel amateur arduino débutant il pourra se contenter de renvoyer une variable simple par exemple un "char".

    -une fonction se rapproche d'une procédure ou sous programme pour rester neutre sans connation liée à d'autres languages.
    La fonction renvoie quelque chose alors que la procédure ne renvoie rien.
    void procedure_loikshfiqdflskh( char X, unsigned char Y) // on repèrera "void" qui ne laisse aucun doute.
    int fonction_sukdgfvcqkezsjd( char Z, int W)

    cdlt lion10
     
    Dernière édition: 13 Juin 2016
Chargement...
Articles en relation
  1. wika58
    Réponses:
    6
    Affichages:
    673
  2. c.phili
    Réponses:
    86
    Affichages:
    7 461

Partager cette page