Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les fonctions en c#

    12 janvier 2021 à 21:38:46

    Bonjour,

    J'ai un problème avec les fonctions en C#.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace programme
    {
        class Program
        {
            int Volume(int x, int y, int z)
            {
                int a = 5, b = 2, c = 2;
    
                int resultat = a * b * c;
    
                return resultat;
            }
    
            static void Main(string[] args)
            {
                Console.WriteLine("Le volume est : " + resultat + ".");
            }
    
        }
    }

    J'ai créer ce petit programme permettant de calculer un volume.

    Comme vous pouvez le voir, je n'arrive pas à récupérer la variable "resultat" dans la fonction Main.

    Ma question étant : comment fait-on pour appeler la fonction Volume dans la fonction Main.

    Merci d'avance.

    Cordialement.

    • Partager sur Facebook
    • Partager sur Twitter
      12 janvier 2021 à 22:35:33

      Il n'y a pas vraiment de "fonction" au sens strict car C# est un langage exclusivement objet.

      C'est plutôt des méthodes, et ici c'est une méthode statique qu'il vous faudrait.

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;
       
      namespace programme
      {
          class Program
          {
              static int Volume(int x, int y, int z)
              {
                  int resultat = x * y * z;
       
                  return resultat;
              }
       
              static void Main(string[] args)
              {
                  Console.WriteLine("Le volume est : " + Volume(5,2,2).ToString() + ".");
              }
       
          }
      }



      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        13 janvier 2021 à 10:54:13

        et je dirais que comme dans tous les langages, il faut appeler la fonction avant de pouvoir en exploiter le résultat. La déclarer (dire ce qu'elle fait) ne suffit pas.
        • Partager sur Facebook
        • Partager sur Twitter
          14 janvier 2021 à 8:02:25

          Bonjour,

          Il faut aussi connaitre la portée des variables !

          Le code que vous avez donné n'est pas entièrement faux, il suffisait juste de déclarer la variable au niveau de la classe.

          Et bien sur appeler la fonction 

          • Partager sur Facebook
          • Partager sur Twitter
            14 janvier 2021 à 10:14:08

            Ajoutez des champs à des classes, c'est loin d'être une panacée mais plutôt le début des emmerdes.
            • Partager sur Facebook
            • Partager sur Twitter
            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
              14 janvier 2021 à 11:08:49

              bacelar a écrit:

              Ajoutez des champs à des classes, c'est loin d'être une panacée mais plutôt le début des emmerdes.


              Je ne dis pas le contraire, mais il y avait quand même un problème de portée de variable, et il faut le connaitre
              • Partager sur Facebook
              • Partager sur Twitter
                14 janvier 2021 à 13:20:39

                Matioso a écrit:

                bacelar a écrit:

                Ajoutez des champs à des classes, c'est loin d'être une panacée mais plutôt le début des emmerdes.


                Je ne dis pas le contraire, mais il y avait quand même un problème de portée de variable, et il faut le connaitre


                Ce que vous dites n'a strictement aucun sens. La variable "resultat" dans la méthode statique : int Volume(int x, int y, int z) doit avoir une portée locale à cette même méthode. D'ailleurs, il n'y a même pas besoin de variable à cet endroit, un simple return x * y * z; est suffisant.

                • Partager sur Facebook
                • Partager sur Twitter
                  14 janvier 2021 à 13:41:21

                  XTZ95 a écrit:

                  Matioso a écrit:

                  bacelar a écrit:

                  Ajoutez des champs à des classes, c'est loin d'être une panacée mais plutôt le début des emmerdes.


                  Je ne dis pas le contraire, mais il y avait quand même un problème de portée de variable, et il faut le connaitre


                  Ce que vous dites n'a strictement aucun sens. La variable "resultat" dans la méthode statique : int Volume(int x, int y, int z) doit avoir une portée locale à cette même méthode. D'ailleurs, il n'y a même pas besoin de variable à cet endroit, un simple return x * y * z; est suffisant.

                  Il veut utiliser la variable local "resultat" en dehors de la fonction et ce que je dis n'a aucun sens ?

                  Sérieusement, pourquoi répondez vous ? Je parle qu'il ne connait ce qu'est la portée d'une variable et la vous me faite un cours sur la programmation ? 

                  Et s'il veut utiliser une variable dans sa fonction, c'est son droit, un simple return suffit, mais on code comme on le souhaite.

                  Et si on veut aller plus loin, pourquoi une fonction alors qu'il a juste a faire la calcul dans son affichage?

                  -
                  Edité par Matioso 14 janvier 2021 à 13:46:03

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 janvier 2021 à 14:58:12

                    Matioso a écrit:

                    XTZ95 a écrit:

                    Matioso a écrit:

                    bacelar a écrit:

                    Ajoutez des champs à des classes, c'est loin d'être une panacée mais plutôt le début des emmerdes.


                    Je ne dis pas le contraire, mais il y avait quand même un problème de portée de variable, et il faut le connaitre


                    Ce que vous dites n'a strictement aucun sens. La variable "resultat" dans la méthode statique : int Volume(int x, int y, int z) doit avoir une portée locale à cette même méthode. D'ailleurs, il n'y a même pas besoin de variable à cet endroit, un simple return x * y * z; est suffisant.

                    Il veut utiliser la variable local "resultat" en dehors de la fonction et ce que je dis n'a aucun sens ?

                    Sérieusement, pourquoi répondez vous ? Je parle qu'il ne connait ce qu'est la portée d'une variable et la vous me faite un cours sur la programmation ? 

                    Et s'il veut utiliser une variable dans sa fonction, c'est son droit, un simple return suffit, mais on code comme on le souhaite.

                    Et si on veut aller plus loin, pourquoi une fonction alors qu'il a juste a faire la calcul dans son affichage?

                    -
                    Edité par Matioso il y a environ 1 heure

                    A la base, il n'avait pas compris comment appeler la méthode Volume(...) qui retourne son résultat.

                    On code comme on le souhaite ? Oui, mais à condition de respecter un minimum de bonnes pratiques donc si on peut lui transmettre des bonnes pratiques, autant le faire.

                    Si vous vous posez des questions sur l'utilité des méthodes, je vous invite alors à apprendre les bonnes pratiques où vous apprendrez qu'une méthode sert a effectuer un traitement générique à partir de ses paramètres dans le but d'être réutilisé ailleurs, être testé, avoir un code maintenable, lisible, simple, compréhensible...

                    Si vous avez un problème complexe à résoudre, est-ce que vous allez faire tout dans une seule méthode et donc rendre du code spaghetti ? Non, vous allez écrire plusieurs petites fonctions qui découperont le problème complexe en plusieurs petits problèmes simples, lisibles et compréhensibles par d'autres développeurs.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 janvier 2021 à 15:07:53

                      De plus, sa fonction était "inutile" (ou plutôt n'avait pas de sens) puisqu'elle attend 3 paramètres mais on utilise 3 variables locales pour faire le calcul (j'étais passé à côté à la 1ère lecture :honte: )
                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 janvier 2021 à 18:31:05

                        XTZ95 a écrit:

                        Matioso a écrit:

                        XTZ95 a écrit:

                        Matioso a écrit:

                        bacelar a écrit:

                        Ajoutez des champs à des classes, c'est loin d'être une panacée mais plutôt le début des emmerdes.


                        Je ne dis pas le contraire, mais il y avait quand même un problème de portée de variable, et il faut le connaitre


                        Ce que vous dites n'a strictement aucun sens. La variable "resultat" dans la méthode statique : int Volume(int x, int y, int z) doit avoir une portée locale à cette même méthode. D'ailleurs, il n'y a même pas besoin de variable à cet endroit, un simple return x * y * z; est suffisant.

                        Il veut utiliser la variable local "resultat" en dehors de la fonction et ce que je dis n'a aucun sens ?

                        Sérieusement, pourquoi répondez vous ? Je parle qu'il ne connait ce qu'est la portée d'une variable et la vous me faite un cours sur la programmation ? 

                        Et s'il veut utiliser une variable dans sa fonction, c'est son droit, un simple return suffit, mais on code comme on le souhaite.

                        Et si on veut aller plus loin, pourquoi une fonction alors qu'il a juste a faire la calcul dans son affichage?

                        -
                        Edité par Matioso il y a environ 1 heure

                        A la base, il n'avait pas compris comment appeler la méthode Volume(...) qui retourne son résultat.

                        On code comme on le souhaite ? Oui, mais à condition de respecter un minimum de bonnes pratiques donc si on peut lui transmettre des bonnes pratiques, autant le faire.

                        Si vous vous posez des questions sur l'utilité des méthodes, je vous invite alors à apprendre les bonnes pratiques où vous apprendrez qu'une méthode sert a effectuer un traitement générique à partir de ses paramètres dans le but d'être réutilisé ailleurs, être testé, avoir un code maintenable, lisible, simple, compréhensible...

                        Si vous avez un problème complexe à résoudre, est-ce que vous allez faire tout dans une seule méthode et donc rendre du code spaghetti ? Non, vous allez écrire plusieurs petites fonctions qui découperont le problème complexe en plusieurs petits problèmes simples, lisibles et compréhensibles par d'autres développeurs.


                        Mais sérieusement, à part étaler votre science, vous servez à quoi ?

                        1) Il essayais d'utiliser une variable local à une fonction en dehors de la fonction pour afficher son résultat, donc la nation de portée n'est pas acquise, d'où mon commentaire.

                        2) Il appelait pas la méthode, donc il y avait aussi un problème

                        3) Je ne sais pas à quoi sert une fonction ? Vous vous foutez de qui ? Vous lui dites qu'une variable est inutile dans son cas, et sa méthode est tout aussi inutile si c'est juste pour faire un simple return d'un simple calcul, donc j'ai juste suivi votre putain de logique de merde.

                        4) Pourquoi vouloir optimiser son code et le faire correspondre aux bonnes pratiques, alors que ne sait rien de ce qu'il veut faire.

                        Ca ne peut être qu'un exemple car il n'arrive pas à comprendre le fonctionnement d'une fonction, je ne donnais que des indications qui peuvent rendre son code correct en fonction de son besoin, car une méthode qui fait une simple multiplication, ne sert strictement à rien. Donc je n'ai en aucun critiquer sa logique contrairement à vous !

                        5) Faut arrêter avec "utilise ce code, il est meilleur", la plupart du temps, c'est du code bidon pour mieux nous faire comprendre la problématique.

                        Bacelar a poser un code qui fait ce dont il a besoin, mais sans lui expliquer d'où venait son problème, je ne disais juste que son code n'est pas totalement faux. Il y a des centaines de façons de faire, certes beaucoup qui sont inutile, mais avec ce qu'il nous donne, on a juste l'information qu'il ne sait pas comment utiliser sa fonction, peut être que son besoin nécessite un attribut à la classe qu'il modifie à chaque fois dans sa fonction. On en sait strictement rien, donc ce que vous lui donné ne s'applique peut être pas à son problème.

                        Voila, pour ma part qui souhaitais simplement lui faire remarqué, qu'outre que son code n'est pas "propre"(ce que certain avait déja relevé avant moi) mais qu'en plus, il devait regarder ce qu'est la portée d'une variable !

                        EDIT : Déja, je suis désolé si je suis cru (mauvais journée et j'ai pas apprécié vos réponses, mea culpa)

                        Mais pour rajouter à mon argumentaire, ce que souligne Umfred est totalement vrai j'étais passer à coté, et ça montre qu'il lui manque beaucoup de base, donc mon argument sur la portée est encore plus valable, car il va devoir se renseigner sur cette notion tout aussi importante, car elle fait aussi partie des bonnes pratiques

                        -
                        Edité par Matioso 14 janvier 2021 à 18:36:21

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Les fonctions en c#

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown