Qu'est-ce qu'une fonction pure ?
Eh bien, une fonction pure ressemble à ceci, nous avons une fonction, donc au lieu d'une boîte que nous avions auparavant d'objets
de toutes ces fonctionnalités, pensez plutôt à cela comme à une simple fonction.
Et disons que nous lui donnons une liste contenant un, deux et trois.
Si nous donnons cette entrée à cette fonction, ce à quoi nous nous attendrions avec une fonction pure, c'est qu'il se passe quelque
chose à cette entrée qui entraîne à chaque fois la même chose.
Alors disons que nous multiplions cela par deux, nous recevrions deux, quatre et six.
Or, une fonction pure a deux règles.
La première est que, étant donné la même entrée, elle renverra toujours la même sortie, c'est-à-dire que chaque fois que nous donnons un, deux et
trois à cette liste, nous la donnons à une fonction que nous créons.
Il doit toujours renvoyer la même sortie.
Donc, si j'exécute cette fonction des millions de fois avec la même entrée, cela devrait donner la même sortie.
Et le deuxième point est que cette idée de fonction ne devrait pas produire d'effets secondaires.
Quels sont les effets secondaires ?
Les effets secondaires sont des choses qui fonctionnent.
Cela affecte-t-il le monde extérieur ?
Par exemple, si je devais imprimer quelque chose à l'intérieur de cette fonction, cela affecterait le monde extérieur, n'est-ce pas ?
Parce que j'imprime quelque chose sur un écran.
L'écran est le monde extérieur.
Ou, par exemple, si cette fonction touchait une variable qui vivait en dehors d'une portée différente, c'est
un effet secondaire.
Regardons.
Un code pour comprendre un peu plus ce concept.
Disons que nous avions une fonction et que cette fonction se multipliera.
Par à une liste, disons simplement un allié, qui sera notre liste, et ici ce que nous voulons faire est
de boucler sur l'élément.
À la fin.
Et puis chaque élément que nous voulons multiplier et ajouter à une nouvelle liste.
Créons donc une nouvelle liste qui sera une liste vide.
Et ici, nous dirons nouvelle liste, ajoutez un point.
Et le faire en multipliant par deux.
Et puis enfin, à la fin de cette fonction, on veut retourner la nouvelle liste.
Essayons ça.
Si je dis multipliez par deux et donnez-lui un, deux, trois et imprimons.
Ici, la sortie.
Si je clique, cours.
J'en reçois deux, quatre, six.
Est-ce une fonction pure, réfléchissons-y.
La première règle étant donnée la même entrée, c'est-à-dire un, deux et trois.
Il renverra toujours la même sortie, peu importe le nombre de fois que je l'exécute, cela me donnera
toujours la même sortie.
Donc, OK, nous avons réussi le premier test.
Qu'en est-il du deuxième test selon lequel il ne produit aucun effet secondaire ?
Cela produit-il des effets secondaires ?
Cela touche-t-il quelque chose dans le monde extérieur ?
Pensez-y.
Non, il n'écrit rien dans le monde extérieur qui compte pour cette fonction.
Parce que tout est contenu ici.
Si, par exemple, au lieu d'avoir print ici, nous avons simplement print.
Et ici.
Si je clique, cours.
Nous obtenons le même résultat, mais cela a-t-il des effets secondaires ?
Eh bien, oui, il le fait.
Il interagit avec le monde extérieur, qui est la déclaration d'impression.
La déclaration d'impression me dit, hé, je vais imprimer sur n'importe quel écran de cette machine.
Dans notre cas, il va s'imprimer ici, mais nous ne savons pas vraiment ce que fait l'instruction print
car elle interagit avec l'écran de ce côté.
Donc ça.
Effets secondaires, nous donnons le contrôle à l'impression, mais nous ne savons pas ce que l'impression va faire.
Un autre exemple que je peux vous donner.
Est-ce que cela se passe si nous avons ici une nouvelle liste que nous définissons réellement à l'extérieur ?
Ainsi.
Pour que nous ayons une nouvelle liste comme celle-ci, si je clique sur exécuter.
J'arrive toujours à quatre, six, mais cela a-t-il des effets secondaires ?
Eh bien, oui, il le fait.
Il interagit avec le monde extérieur et ce qu'il y a en dehors de ce monde d'une fonction dont
on se souvient, c'est la portée, eh bien, il interagit avec cette nouvelle liste.
Il arrive à cette nouvelle liste.
Donc, si un programmeur arrive et peut-être avant d'exécuter cette fonction, nous décidons de dire nouvelle liste.
Nous le changeons en une chaîne vide.
Eh bien, quand j'exécute cette fonction.
J'obtiens une erreur car maintenant cette nouvelle liste est un objet chaîne.
Ainsi, la nouvelle liste qui vit dans le monde extérieur de cette fonction peut être modifiée par un autre développeur ou par
un programme et nous ne le saurons pas.
Et lorsque nous exécutons cette fonction, cela va nous donner une erreur.
Il a un effet secondaire.
Donc idéalement, nous contiendrons nos fonctions.
Et rendez-les purs, parce que, comme vous pouvez le voir, nous n'aurons jamais de bogue ou d'erreur dans notre code à moins que nous ayons
écrit quelque chose de mal ici, mais parce que nous ne nous soucions pas du monde extérieur, parce que
tout ce que nous donner comme entrée va toujours produire une bonne sortie, ça va être pur.
Maintenant, il est difficile de vraiment comprendre pourquoi il s'agit d'un concept si puissant sans avoir un peu d'expérience sur le lieu
de travail.
Mais laissez-moi juste vous dire ceci, que lorsque vous avez des fonctions pures.
Vous avez moins de code bogué, vous pouvez mieux tester votre code.
Il est plus facile de comprendre votre code et dans l'ensemble.
Vous avez les avantages de ne pas avoir différentes parties de votre code, de se toucher et de
s'affecter, ce qui rend votre vie de programmeur tellement plus facile.
Donc cette idée de fonctions pures est vraiment importante.
Mais la seule chose que je veux que vous reteniez de ceci, c'est que les fonctions pures sont plus une ligne
directrice qu'un absolu.
Il est impossible d'avoir des fonctions pures partout parce que si une fonction n'affecte pas du tout le monde extérieur,
eh bien, nous n'aurions pas de programmes.
Nous ne serions pas en mesure d'afficher des choses.
Nous ne serions pas en mesure de sauvegarder des éléments tels que notre profil de jeu.
Il est donc impossible d'avoir des fonctions pures partout.
Cependant, quand vous le pouvez partout où vous le pouvez, la programmation fonctionnelle nous apprend que vos fonctions sont bonnes.
Essayez de créer des fonctions pures et n'ayez que quelques fonctions non pures qui interagissent peut-être avec le monde extérieur
vers lesquelles nous pouvons revenir chaque fois que nous avons des bogues dans notre code, car ce sont
très probablement celles qui vont avoir des bogues puis des fonctions pures comme ceci pour finaliser notre concept de programmation fonctionnelle.
Si, par exemple, c'était notre assistant des vidéos précédentes avec programmation fonctionnelle, nous aurions
un objet assistant.
Ou le dictionnaire Wizzard qui avait un nom.
Disons Marlon.
Et le pouvoir.
De 50.
Et au lieu de les contenir dans une classe, j'aurais différentes méthodes telles que l'attaque.
Et ce ne serait pas une méthode, ce serait une fonction car elle ne vit pas à l'intérieur d'une classe.
En programmation fonctionnelle, ils disent, hé, nous n'avons pas besoin de combiner des données avec des
fonctions, gardons-les séparés, créons simplement des fonctions pures qui peuvent être transmises comme un caractère.
Et de cette façon, nous gardons ces deux choses séparées afin que nous puissions nous concentrer sur les fonctions pures et nous pouvons nous concentrer
sur les données, c'est donc là que se trouve la différence.
En fin de compte, il s'agit d'essayer de garder notre manteau propre et d'éviter les bugs dans notre manteau, un gros
problème que les programmeurs ont tout le temps.
C'est donc juste une façon différente de penser.
Apprenons-en plus dans la prochaine vidéo.