Outils d'utilisateurs

Outils du Site


static

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

static [2015/08/01 13:30]
37.163.102.2 [Variables statiques]
static [2016/07/05 18:55] (Version actuelle)
gbdivers
Ligne 2: Ligne 2:
 ^ Chapitre précédent ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ Chapitre suivant ^ ^ Chapitre précédent ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ Chapitre suivant ^
  
-__ mettre ce chapitre aussi tôt ? __+Ce chapitre est un peu spécial. Le but est de vous présenter des techniques... qu'il ne faut pas utiliser ! Ou tout au moins, qu'il faut fortement limiter leur utilisation. La raison est que cela produit généralement une dette technique et diminue la qualité du code (moins maintenable, moins évolutif et plus difficilement testable).
  
-====== Portées locales et globales des variables ======+Une dette technique est le surcoût de travail nécessaire lorsque vous faites des mauvais choix dans votre code. La conséquence, par exemple, est qu'au lieu d’implémenter une fonctionnalité en une semaine, vous l’implémenterez en deux semaines. Plus le temps passe et plus les problèmes augmenteront dans la dette technique, jusqu’à ce que vous corrigiez ces problèmes.
  
-===== Portée locale et durée de vie =====+Donner des explications détaillées sur pourquoi les globaux et assimilés posent problème est assez difficile, puisque cela demande de l’expérience et du recul, de préférence sur des projets conséquents. Il va falloir dans un premier temps accepter cette règle : "interdit d'utiliser les globaux !"
  
-Dans les chapitres précédents, les variables sont locales, elles sont détruites en sortant du bloc : 
  
-<code cpp> +====== [Aller plus loin] Variables globales et statiques ======
-+
-    int const i {}; +
-    // utilisation de i +
-} // i est détruit ici +
-</code>+
  
-Avec une portée locale, plus facile de suivre et comprendre le rôle et l'évolution des valeurs. Le comportement est déterministe, on sait quand sont créées les variables et quand elles sont détruites.+===== Variables globales =====
  
-Il est possible de créer des blocs, uniquement destinés à contrôler la durée de vie des variables :+Dans les chapitres précédentsvous avez vu uniquement les variables locales, qui était définie à partir de leur déclaration et n’était plus valide a la fin du bloc.
  
 <code cpp> <code cpp>
 +
 int main() { int main() {
-    int i { 123 };+    int i { 123 };                    // déclaration de i
     {     {
-        int const j { i + 456 }; +        int j { 456 };                // déclaration de j 
-        i += j; +        std::cout << <;< std::endl;  // j est valide 
-    } // j est détruit ici +    }                                 // destruction de 
-    cout << i << endl; +    std::cout << i << std::endl;      // i est valide 
-}+                                    // destruction de i
 </code> </code>
  
-  * Portée : partie du code dans laquelle une variable est liée à un identifiantun nom. C'est à dire, de sa déclaration à sa sortie de bloc. +Une variable //globale// est une variable dont la portée n’est pas limitée à un blocmais peut s’étendre à tout le programme.
-  * durée de vie : de la création de la variable à la destruction.+
  
-Actuellement, nous n'avons vu que des variables dont la durée de vie et la portée correspondent. Mais, vous verrez, par la suite, qu'il est possible de créer des objets qui ont une durée de vie différente de leur portée (au travers des objets alloués dynamiquement sur le Tas). +Un premier exemple simple est la déclaration d'une variable en dehors de la fonction ''main''.
- +
-Il existe également des variables qui ont une portée globale (visible dans tout le code) ou une valeur statique (la même pour tout le code), mais leur utilisation doit se faire avec beaucoup de précautions. En effet, la lecture du code est rendue plus difficile, surtout sur de gros projets (on ne peut savoir quand une variable est modifiée) et il peut vite devenir complexe de modifier le traitement de ces variables. +
- +
-L'utilisation de variables non locales doit toujours se faire avec des pincettes, en connaissant parfaitement tous les tenants et les aboutissants de cette décision. +
- +
-===== Variables globales ===== +
- +
-portée dans toutes l'application, pas dans un bloc.+
  
 <code cpp> <code cpp>
 int i {}; int i {};
- 
-void f() { 
-    cout << i << endl; 
-} 
  
 int main() { int main() {
     ++i;     ++i;
-    f();+    std::cout << i << std::endl;
     ++i;     ++i;
-    f();+    std::cout << i << std::endl;
 } }
 +</code>
 +
 +affiche :
 +
 +<code>
 +1
 +2
 </code> </code>
  
 ===== Variables statiques ===== ===== Variables statiques =====
  
-Une variable //statique// est une cariable dont la valeur est conservée.+Une variable //statique// est une variable dont la valeur est conservée.
  
 <code cpp> <code cpp>
Ligne 88: Ligne 77:
 ^ Chapitre précédent ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ Chapitre suivant ^ ^ Chapitre précédent ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ Chapitre suivant ^
  
-{{tag> Cours C++}} 
static.1438428621.txt.gz · Dernière modification: 2015/08/01 13:30 par 37.163.102.2