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/02/14 16:37]
88.175.245.222 Erreur de frappe : "paS" -> "paR"
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 local, 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 =====
  
-Possible de créer des blocsjuste 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 pendant laquelle une variable est accessible. ie à partir du moment où elle est déclarée et détruite au moment où l'on sort du bloc. +Une variable //globale// est une variable dont la portée n’est pas limitée à un bloc, mais peut s’étendre à tout le programme.
-  * durée de vie : quand un objet est créé et quand il est détruit+
  
-Actuellement, on a vu que des variables dont la durée de vie et la portée sont identique. Vous verrez par la suite qu'il est possible de créer des objets qui ont une durée de vie différentes de la portée (objets dynamique sur le Tas). +Un premier exemple simple est la déclaration d'une variable en dehors de la fonction ''main''.
- +
-Possible d'avoir une portée globale ou une valeur statique, mais rend plus difficile la lecture du code, surtout sur de gros projets (on ne peut savoir quand une variable est modifiée) +
- +
-L'utilisation de variables non locales doit toujours se faire après avoir vérifié que c'était la seule solution +
- +
-===== 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> </code>
  
-===== Variables statiques =====+affiche : 
 + 
 +<code> 
 +
 +
 +</code>
  
-valeur est conservée+===== Variables statiques =====
  
 +Une variable //statique// est une variable dont la valeur est conservée.
  
 <code cpp> <code cpp>
Ligne 89: 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.1423928256.txt.gz · Dernière modification: 2015/02/14 16:37 par 88.175.245.222