Aujourd'hui, nous aborderons la programmation fonctionnelle. Plus précisément, nous examinerons la différence entre la programmation déclarative et impérative.

Tout d'abord, passons rapidement en revue les termes. Ensuite, nous comparerons ces styles de programmation et verrons comment ils apparaissent en Java et si le langage prend en charge leur heureuse coexistence.

La programmation fonctionnelle est un paradigme où les fonctions sont comprises comme des fonctions mathématiques, et non comme des sous-programmes, comme dans la programmation procédurale . Autrement dit, dans ces deux paradigmes, interprétez le mot "fonction" différemment. Rappelez-vous ceci et ne les confondez pas. Java ne vous laisse pas confondre, puisque les sous-programmes sont appelés «méthodes», tandis que les fonctions font référence à des fonctions mathématiques (également: fonctions lambda ou référence de méthode).

En pratique, en programmation procédurale, les fonctions dépendent non seulement des variables d'entrée, mais également de facteurs externes (comme d'autres variables extérieures à la fonction ou à l'état du système). Cela signifie que l'appel de la même fonction avec les mêmes arguments mais dans un contexte différent peut produire des résultats différents. En programmation fonctionnelle, lorsqu'une fonction est appelée avec les mêmes arguments, elle produit toujours le même résultat, car les fonctions ne dépendent que des données d'entrée.

Avantages de la programmation fonctionnelle

  • Amélioration de la fiabilité du code
  • Tests unitaires pratiques
  • Possibilités d'optimisation du code lors de la compilation
  • Opportunités de concurrence

Inconvénients de la programmation fonctionnelle

Les inconvénients de la programmation fonctionnelle proviennent de toutes ces mêmes caractéristiques :

  • Il n'y a pas de déclarations d'affectation. Au lieu de cela, les nouvelles valeurs sont stockées dans de nouvelles variables, ce qui nécessite d'allouer et de libérer automatiquement de la mémoire en permanence. Par conséquent, une récupération de place extrêmement efficace est un élément essentiel de tout système qui exécute des programmes fonctionnels.

  • L'évaluation non stricte signifie que l'ordre des appels de fonction est imprévisible, ce qui crée des problèmes d'E/S lorsque l'ordre des opérations est important.

Cela conclut notre examen rapide de la programmation fonctionnelle. Passons maintenant aux styles de programmation.

La programmation impérative est un paradigme de programmation caractérisé par les caractéristiques suivantes :

  • Le code source du programme est constitué d'instructions (instructions).

  • Les instructions doivent être suivies dans l'ordre.

  • Les données générées par l'exécution d'instructions précédentes peuvent être lues à partir de la mémoire par des instructions ultérieures.

  • Les données obtenues en exécutant une instruction peuvent être écrites en mémoire.

Voici les principales caractéristiques des langages impératifs :

  • Utilisation de variables booléennes.
  • Utilisation de l'opérateur d'affectation.
  • Utilisation d'expressions composées.
  • Utilisation de sous-programmes.

Un programme impératif est comme des ordres exprimés à l'impératif dans les langues naturelles. En d'autres termes, un programme impératif est une séquence de commandes.

Les langages de programmation impératifs incluent C et C++.

La programmation déclarative est un paradigme de programmation dans lequel la solution à un problème est spécifiée. C'est-à-dire que le résultat final est décrit, pas la manière d'y parvenir. HTML est un exemple de langage déclaratif. Lorsque nous écrivons des balises dans ce langage, nous ne pensons pas à la façon dont les éléments seront dessinés sur la page. Nous décrivons simplement à quoi la page devrait ressembler.

Un autre langage de programmation déclaratif est SQL.

Comparons les deux styles de programmation en prenant un exemple concret : comment expliquer à une personne comment se rendre à un certain endroit ?

Imaginez cette situation : un homme s'approche de nous dans la rue et nous demande : « Comment puis-je me rendre au musée ?

Avec une approche impérative, nous lui fournirions l'algorithme pour s'y rendre à pied :

  • faire demi-tour ici
  • marcher 2 pâtés de maisons en ligne droite
  • tourne à droite

Avec une approche déclarative, on donnerait simplement l'adresse, puis la personne se rendrait au bon endroit par elle-même.

Java est actuellement un langage de programmation multi-paradigme . Multi-paradigme signifie que le langage supporte plusieurs paradigmes.

Au cours de sa longue évolution, le langage a étendu son modèle orienté objet afin que ses utilisateurs disposent de différents outils et puissent choisir le meilleur pour leur tâche spécifique.

Par conséquent, Java prend actuellement en charge à la fois l'approche impérative (telle que l'écriture de code pour les appels de méthode) et l'approche déclarative (telle que les annotations disponibles au moment de l'exécution).

Résumons :

  • Il existe différents paradigmes de programmation.

  • Il existe des approches déclaratives et impératives.

  • Vous devez choisir celui qui convient le mieux à la tâche à accomplir.

  • Java est un langage multi-paradigme qui prend en charge les deux approches.