web-dev-qa-db-fra.com

La tâche de programme peut-elle être exprimée sans état?

C'est une question théorique, mais après de nombreuses années de programmation dans ce que je réalise maintenant, c'est une technique impérative "normale", en utilisant principalement C++, j'ai découvert cet autre monde de programmation fonctionnelle, que je suis tombé sur accidentellement tout en apprenant avec désinvolture JavaScript.

Cela m'a amené à me demander si vous pouviez techniquement remplacer tout programme complet axé sur l'état avec une implémentation différente purement fonctionnelle et sans état?

C'est une idée intrigante et je dois admettre qu'il existe une clarté et une élégance dans la programmation fonctionnelle qui a vraiment soufflé mon esprit.

13
johnbakers

L'état signifie que la capacité de réagir à un stimulus actuel de la manière qui dépend des stimuli antérieurs, non seulement sur la base du stimulus actuel.

Les programmes purement fonctionnels ne sont que des fonctions. Ainsi, pour des applications pratiques, le programme purement fonctionnel entrait une paire (Old_state * Present_Stimulus) et génère une paire (New_state * Present_Response). Un "looper" externe et standard est nécessaire pour attendre le prochain stimulus et propager l'état.

Un programme purement fonctionnel n'a pas de manière intrinsèquement état et n'est pas utilisé pour des applications pratiques directement.

Ainsi ,NO programme axé sur l'état peut être remplacé par une implémentation différente purement fonctionnelle et sans état.

0
Atsby

Pensez à la manière dont vous impliqueriez une "machine d'état" dans un langage de programmation sans état.

Vous pourriez probablement le faire, mais vous finiriez par utiliser des noms de fonction comme stockage. Se retrouver avec gook gobblé comme:

if (sm.atBegining()) sm.start() else if (sm.done()) sm.stop() ) else sm.progress()
0
James Anderson