Que faire des globals?


#1

Bonjour,

Je me pose une question sur les globals. J’ai le sentiments que c’est mal mais j’ai du mal à l’expliqué.

Cela dit j’ai des examples d’utilisation de global très nefaste à la comprehension du code tel que c’est fait dans Django (à ce sujet aiohttp est beaucoup plus simple à comprendre, il y a pas de magie).

D’un autre coté, j’apprend que dans le langage scheme il y a un mecanisme the thread local relativement avancé (nommé fluid), c’est donc que les globales ne sont pas si mauvaise que ça?

Qu’est ce que vous en pensez?


#2

Les globals c’est mal car cela introduit des side-effects dans ton code :

Si tu écris :

var noSideEffectFunction = function(counter) {
  return counter + 3;
};

tu sais très bien ce que va te retourner noSideEffectFunction(5), tandis que:

var sideEffectFunction = function() {
  return window.currentCounter + 3; // Les globals sont accessibles via window en JS
};

là c’est plus compliqué, en tout cas incompréhensible à la lecture du code.

L’idée générale en programmation, c’est donc de limiter les side-effects au maximum, et de faire des programmes le plus stateless possible (toute forme d’état est une variable globale en puissance eg. le contenu d’un fichier, une variable d’environnement, etc.)

Bien-sûr on ne peut pas faire sans état, mais si tu penses tous tes programmes comme des transformateurs d’états, avec l’état d’entrée en paramètre et qui retourne l’état de sortie, tu évites les side-effects.

Si tu veux apprendre les bases de la programmation fonctionnelle, je t’invite à lire cet excellent article :

https://maryrosecook.com/blog/post/a-practical-introduction-to-functional-programming