Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
static [2014/09/29 13:28] gbdivers créée |
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). |
- | ====== Variables statiques et globales ====== | + | 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. |
- | Dans les chapitres précédents, les variables sont locales, elles sont détruites en sortant du bloc : | + | 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 !" |
- | <code cpp> | ||
- | { | ||
- | 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. | + | ====== [Aller plus loin] Variables globales et statiques ====== |
- | 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) | + | ===== Variables globales ===== |
- | L'utilisation de variables non locales doit toujours se faire après avoir vérifié que c'était la seule solution | + | Dans les chapitres précédents, vous 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> | ||
- | ===== Variables globales ===== | + | int main() { |
+ | int i { 123 }; // déclaration de i | ||
+ | { | ||
+ | int j { 456 }; // déclaration de j | ||
+ | std::cout << j << std::endl; // j est valide | ||
+ | } // destruction de j | ||
+ | std::cout << i << std::endl; // i est valide | ||
+ | } // destruction de i | ||
+ | </code> | ||
+ | |||
+ | Une variable //globale// est une variable dont la portée n’est pas limitée à un bloc, mais peut s’étendre à tout le programme. | ||
- | portée dans toutes l'application, pas dans un bloc. | + | Un premier exemple simple est la déclaration d'une variable en dehors de la fonction ''main''. |
<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 : |
- | valeur est conservée | + | <code> |
+ | 1 | ||
+ | 2 | ||
+ | </code> | ||
+ | |||
+ | ===== Variables statiques ===== | ||
+ | Une variable //statique// est une variable dont la valeur est conservée. | ||
<code cpp> | <code cpp> | ||
Ligne 67: | Ligne 74: | ||
3 | 3 | ||
</code> | </code> | ||
- | |||
- | |||
^ 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++}} |