Définition : Un langage impératif utilise une séquence d'instructions pour déterminer comment atteindre un certain objectif. On dit que ces instructions modifient l'état du programme lorsque chacune d'entre elles est exécutée à tour de rôle.
Exemples : Java est un langage impératif. Par exemple, on peut créer un programme pour additionner une série de chiffres :
int total = 0;
int number1 = 5;
int number2 = 10;
int number3 = 15;
total = number1 + number2 + number3;
Chaque instruction modifie l'état du programme, depuis l'affectation de valeurs à chaque variable jusqu'à l'addition finale de ces valeurs. Une séquence de cinq instructions indique explicitement au programme comment additionner les nombres 5, 10 et 15.
Les langages fonctionnels : Le paradigme de la programmation fonctionnelle a été explicitement créé pour soutenir une approche purement fonctionnelle de la résolution de problèmes. La programmation fonctionnelle est une forme de programmation déclarative.
Avantages des fonctions pures : La principale raison d'implémenter les transformations fonctionnelles en tant que fonctions pures est que ces dernières sont composables, c'est-à-dire autonomes et sans état. Ces caractéristiques apportent un certain nombre d'avantages, notamment les suivants : Une lisibilité et une maintenabilité accrues. En effet, chaque fonction est conçue pour accomplir une tâche spécifique en fonction de ses arguments. La fonction ne dépend d'aucun état externe.
Développement réitératif plus facile. Parce que le code est plus facile à remanier, les modifications de la conception sont souvent plus faciles à mettre en œuvre. Par exemple, supposons que vous écriviez une transformation compliquée et que vous vous rendiez compte que certains codes sont répétés plusieurs fois dans la transformation. Si vous effectuez le remaniement à travers une méthode pure, vous pouvez appeler votre méthode pure à volonté sans vous soucier des effets secondaires.
Tests et débogage plus faciles. Comme les fonctions pures peuvent plus facilement être testées de manière isolée, vous pouvez écrire un code de test qui appelle la fonction pure avec des valeurs typiques, des cas limites valides et des cas limites invalides.
Pour les personnes OOP ou Langages impératifs :
Les langages orientés objet sont bons lorsque vous disposez d'un ensemble fixe d'opérations sur les choses et que, au fur et à mesure que votre code évolue, vous ajoutez principalement de nouvelles choses. Ceci peut être accompli en ajoutant de nouvelles classes qui implémentent des méthodes existantes et les classes existantes sont laissées tranquilles.
Les langages fonctionnels sont bons lorsque vous disposez d'un ensemble fixe de choses et que, au fur et à mesure que votre code évolue, vous ajoutez principalement de nouvelles opérations sur les choses existantes. Cela peut être accompli en ajoutant de nouvelles fonctions qui calculent avec les types de données existants et les fonctions existantes sont laissées tranquilles.
Cons :
Le choix de la méthode de programmation dépend des besoins de l'utilisateur. Il n'y a donc préjudice que si les utilisateurs ne choisissent pas la bonne méthode.
Quand l'évolution va dans le mauvais sens, vous avez des problèmes :
- L'ajout d'une nouvelle opération à un programme orienté objet peut nécessiter la modification de nombreuses définitions de classes pour ajouter une nouvelle méthode.
- L'ajout d'un nouveau type de chose dans un programme fonctionnel peut nécessiter la modification de nombreuses définitions de fonctions pour ajouter un nouveau cas.