IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

arguments d'une fonction : à déclarer initialement?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 375
    Par défaut arguments d'une fonction : à déclarer initialement?
    bonjour,

    J'ai écrit un petit script en C# qui montre bien qu'il n'est pas nécessaire de déclarer initialement la variable passée en argument d'une fonction prototype:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
     
    public class transp : MonoBehaviour
    {   
     
        public Material mat;
     
       // Material mat1,mat2;
        float alphaValue;
     
     
        public Mesh mesh;
        public GameObject obj;
     
        // Start is called before the first frame update
        void Start()
        { 
     
             obj.AddComponent<MeshRenderer>().material=mat; 
     
             obj.AddComponent<MeshFilter>().mesh = mesh;
     
             var cubeRenderer1 = obj.GetComponent<Renderer>();
            cubeRenderer1.material.SetColor("_Color", Color.red);
     
             obj.AddComponent<MeshRenderer>().material=ChangeAlpha(mat,0);//appel de la fonction avec la variable non muette mat nécessitant d'être déclarée initialement
     
          }
     
        // Update is called once per frame
        void Update()
        {
     
        }
         Material  ChangeAlpha(Material mat1, float alphaValue)
         { 
           Color oldColor = mat.color;
           Color newColor = new Color(oldColor.r, oldColor.g, oldColor.b, alphaValue);                
           mat.SetColor("_Color", newColor);    
           return mat2;       
         }
    }
    Les paramètres de la fonction ChangeAlphe sont muets donc je peux omettre de déclarer initialement dans la classe la variable mat1 comme ceci:
    Par contre,lecompilateur me retourne une erreur si je n'avais pas déclaré lau début de la classe la variable mat2.

    On peut remarquer aussi grâce aux erreurs que détecte le compilateur que çan'aurait aussi pas fonctionné si j'avais déclaré mat2 au debut de la fonctinn ChangeAlpha
    comme cecii et non en début de classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      Material  ChangeAlpha(Material mat1, float alphaValue)
         { Material mat2;
           Color oldColor = mat.color;
           Color newColor = new Color(oldColor.r, oldColor.g, oldColor.b, alphaValue);                
           mat.SetColor("_Color", newColor);    
           return mat2;       
         }
    Le seul cas où le compilateur ne me retourne pas d'erreur est celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
     
    public class transp : MonoBehaviour
    {   
     
        public Material mat;
     
        Material mat2;   //j'aurai pu écrire aussi Material mat1,mat2;
        float alphaValue;
     
     
        public Mesh mesh;
        public GameObject obj;
     
        // Start is called before the first frame update
        void Start()
        { 
     
             obj.AddComponent<MeshRenderer>().material=mat; 
     
             obj.AddComponent<MeshFilter>().mesh = mesh;
     
             var cubeRenderer1 = obj.GetComponent<Renderer>();
            cubeRenderer1.material.SetColor("_Color", Color.red);
     
             obj.AddComponent<MeshRenderer>().material=ChangeAlpha(mat,0);
     
          }
     
        // Update is called once per frame
        void Update()
        {
     
        }
         Material  ChangeAlpha(Material mat1, float alphaValue)
         { 
           Color oldColor = mat.color;
           Color newColor = new Color(oldColor.r, oldColor.g, oldColor.b, alphaValue);                
           mat.SetColor("_Color", newColor);    
           return mat2;       
         }
    }
    Dois-je alors comprendre que les variables muettes d'une fonction prototype ne nécessitent pas d'être déclareées initialement dans la classe?

    A mon fort avis oui étant donné qiue les arguments des méthodes d'une classe ne nécessitent pas d'etre déclarées initialement.Par contre,si le corps de la méthode utilise une variable,celle-ci doit etre déclarée initialement dans la classe.
    voir cet exemple d'une classe::
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    lcass CName {
    public:
     
       char m_szFirst[sizeOfBuffer];
       char m_szLast[sizeOfBuffer];
     
    public:
       void SetName(char* pszFirst, char* pszLast) {
         strcpy(m_szFirst, pszFirst);
         strcpy(m_szLast, pszLast);
       }
     
    };
    merci de votre aide

  2. #2
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Tu ne serais pas chef de projet ?

    Quand je lis ton code je n'arrive pas à savoir si c'est du C# ou du C++. Sinon tes propos n'ont ni queue ni tête. Des variables muettes ? Des fonctions prototypes ? ChangeAlphe ?

    Quelle est ta question exactement ?

  3. #3
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Je vais être un peu cash (désolé), mais il va falloir reprendre les bases. Ici, tu mélanges déclaration d'une variable au niveau d'une classe avec un paramètre d'une méthode. Les paramètres des méthodes n'ont pas besoin d'être déclarée précédemment, puisque ce sont déjà des déclarations !

    Comme relevé par Noxen, tu sembles mélanger C# et C++, sans réellement poser de question.

    Tu as donc un gros travail à faire sur la compréhension de ce qu'est une déclaration et de sa portée, indépendamment du langage. Je t'invite donc à repartir de 0 sur ces notions.

  4. #4
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 375
    Par défaut
    Ce code simple fonctionne en C++:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <iostream>
    #include <stdio.h>
     
    class program{
      public:
        int a;
        int b;
      int somme(int c,int d)
      {  int e;
         e=c+d;
         return e;
      }  
     
    };
     
    int main() {
     program objet;
     objet.a= objet.somme(5,10);
     printf("résultat %d",objet.a);
     return 0;
    }

    Pourrait-on le convertir en C#?


    merci

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 984
    Par défaut
    Cela ne pose aucune difficulté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    class Program
    {
        static void Main()
        {
            Calcul objet = new Calcul();
            objet.A = objet.Somme(5, 10);
            Console.WriteLine($"Résultat : {objet.A}");
            Console.ReadKey();
        }
    }
     
    class Calcul
    {
        public int A;
        public int B;
     
        public int Somme(int c, int d)
        {
            int e;
            e = c + d;
            return e;
        }
    }
    A noter que ce code pourrait largement être simplifié, ne serait ce que B qui n'est jamais utilisée, la variable locale e qui ne sert pas à grand chose dans ce cas, ou encore le fait de passer par A alors que Somme est amplement suffisante. Et j'en passe...

    Pourquoi faire aussi complexe alors que ceci aurait suffit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Program
    {
        static void Main()
        {
            Console.WriteLine($"Résultat : {5 + 10}");
            Console.ReadKey();
        }
    }

Discussions similaires

  1. [VBA-E] Lister les arguments d'une fonction
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/02/2006, 12h04
  2. Récupération d'arguments sur une fonction
    Par p0Kep0K dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/09/2005, 09h17
  3. premier argument d'une fonction
    Par Ickou dans le forum Langage
    Réponses: 3
    Dernier message: 10/09/2005, 14h17
  4. une url comme argument d'une fonction
    Par khayyam90 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/10/2004, 20h15
  5. passer FILE* en argument d une fonction
    Par Monsieur_Manu dans le forum C
    Réponses: 9
    Dernier message: 10/04/2003, 17h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo