OK. Le .net les interdits quand elles sont managés pour les mêmes raison?
Version imprimable
OK. Le .net les interdits quand elles sont managés pour les mêmes raison?
Elles ne sont pas si interdites que ça: Une variable membre statique est l'équivalent d'une variable globale, surtout si elle est publique...
De ce point de vue c'est vrai.
Juste une remarque pour dire que les exemples du SDK de directx utilisent les variables globales:
Code:
1
2
3
4
5
6
7 //----------------------------------------------------------------------------- // Global variables //----------------------------------------------------------------------------- LPDIRECT3D9 g_pD3D = NULL; // Used to create the D3DDevice LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // Our rendering device
Oui, mais beaucoup d'exemples font des choses questionables. Parfois par soucis de simplicité (vu qu'utiliser une variable globale est généralement plus simple que les alternatives propres, comme SetWindowLongPtr()).
ben il faut savoir faire la différence d'un code d'example qui se veut simple et compréhensible de suite, et un code d'un vrai projet avec différentes contraintes (des threads, plusieurs développeurs etc..)
C'est ça qui est difficile pour quelqu'un qui débute, car souvent les exemples sont donnés en prenant en considération que celui qui les lit connait bien le C++ et sait que dans un vrai projet il ne mettra pas tout dans des variables globales.
Et bien sûr, quand on dit "il ne faut pas utiliser de variables globales", il faut entendre "il ne faut pas en utiliser, sauf quand tu sauras vraiment pourquoi tu vas en utiliser".
Aussi, on va trouver toute sorte de variables globales "cachés" dans nos programmes: des singletons, des membres statiques, des constantes...
(bien sûr il ne faut pas non plus abuser des singletons etc..sous prétexte que c'est le seul design pattern dont on a retenu l'idée mais c'est un autre débat)
L'idée à comprendre est juste qu'il faut limiter au maximum la portée des variables pour éviter les problèmes.
Martin Fowler, Patterns of Enterprise Application Architecture (je reprends la citation dans le billet sur les singletons) :
Ce qui revient à ce que tu dis :mrgreen:.Citation:
Rappelez vous que toute variable globale est toujours coupable jusqu’à ce que vous ayez prouvé qu’elle est innocente.