{"id":229602,"date":"2022-11-09T14:36:00","date_gmt":"2022-11-09T11:36:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229602"},"modified":"2022-11-09T14:41:45","modified_gmt":"2022-11-09T11:41:45","slug":"quels-sont-les-effets-secondaires-de-la-programmation-de-toute-facon","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/quels-sont-les-effets-secondaires-de-la-programmation-de-toute-facon\/","title":{"rendered":"Quels sont les effets secondaires de la programmation, de toute fa\u00e7on\u00a0?"},"content":{"rendered":"\n<p>Chaque fois que nous parlons de certains concepts de programmation, je pense qu&rsquo;il est important de prendre du recul par rapport aux d\u00e9tails dont nous discutons et de regarder les choses dans le contexte d&rsquo;une vue d&rsquo;ensemble.<\/p>\n<p>Certains modules introduisent des effets secondaires ; certains ne le font pas. C&rsquo;est bon.<\/p>\n<p>Par exemple, <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/normes-de-codage-de-base-via-psr-1\/\" title=\"hier\">hier<\/a>, j&rsquo;ai bri\u00e8vement abord\u00e9 l&rsquo;id\u00e9e de programmer des effets secondaires, mais je l&rsquo;ai fait en parlant de l&rsquo;utilisation des PSR. Et pour ceux qui s&rsquo;int\u00e9ressent simplement aux aspects de la programmation dans un sens plus g\u00e9n\u00e9ral, il est \u00e9galement important de les comprendre.<\/p>\n<p>N&rsquo;oubliez pas que l&rsquo;id\u00e9e d&rsquo;effets secondaires <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">telle qu&rsquo;\u00e9nonc\u00e9e dans le PSR-1<\/a> est\u00a0:<\/p>\n<blockquote>\n<p>Un fichier DEVRAIT d\u00e9clarer de nouveaux symboles (classes, fonctions, constantes, etc.) et ne provoquer aucun autre effet secondaire, ou il DEVRAIT ex\u00e9cuter une logique avec des effets secondaires, mais NE DEVRAIT PAS faire les deux.<\/p>\n<\/blockquote>\n<p>Dans cet article, je ne suis pas tellement int\u00e9ress\u00e9 \u00e0 discuter de la logique avec des effets secondaires (car il y a des moments o\u00f9 des effets secondaires se produiront). Au lieu de cela, je suis plus pr\u00e9occup\u00e9 par la compr\u00e9hension des effets secondaires de la programmation (ce qu&rsquo;ils sont, ce qu&rsquo;il faut \u00e9viter, etc.).<\/p>\n<p>Apr\u00e8s tout, parler d&rsquo;effets secondaires dans un contexte peut signifier une chose alors qu&rsquo;en programmation, cela peut en signifier une autre.<\/p>\n<h2>Programmation des effets secondaires<\/h2>\n<p>D&rsquo;accord, donc toute l&rsquo;id\u00e9e ou la d\u00e9finition d&rsquo;un effet secondaire g\u00e9n\u00e9rique est simple, <a href=\"https:\/\/d.pr\/Jyf2Np\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">n&rsquo;est-ce pas<\/a>? <\/p>\n<blockquote>\n<p>un effet secondaire, g\u00e9n\u00e9ralement ind\u00e9sirable, d&rsquo;un m\u00e9dicament ou d&rsquo;un traitement m\u00e9dical.<\/p>\n<\/blockquote>\n<p>Supprimez tout l&rsquo;aspect traitement, et vous vous retrouvez avec un &quot;effet secondaire, &#8230; ind\u00e9sirable&quot;. Bon, voici la partie potentiellement d\u00e9routante\u00a0:<\/p>\n<ul>\n<li>nous choisissons d&rsquo;inclure un fichier,<\/li>\n<li>nous savons ce que fait le fichier,<\/li>\n<li>ainsi, si nous savons ce que nous incluons <a href=\"https:\/\/php.net\/manual\/en\/function.include-once.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">et<\/a> ce qu&rsquo;il fait, comment peut-il introduire quelque chose d&rsquo;ind\u00e9sirable ?<\/li>\n<\/ul>\n<p>Du moins, c&rsquo;est comme \u00e7a que je l&rsquo;entends souvent lorsqu&rsquo;il s&rsquo;agit de parler d&rsquo;effets secondaires. En programmation, j&rsquo;ai toujours g\u00e9n\u00e9ralis\u00e9 les effets secondaires comme tout ce qui modifie l&rsquo;\u00e9tat du programme.<\/p>\n<p>Assez facile, non?<\/p>\n<h3>Effets secondaires dans WordPress<\/h3>\n<p>Alors disons que vous travaillez avec WordPress, parce que c&rsquo;est ce que je fais <a href=\"https:\/\/tommcfarlin.com\/tag\/wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">et \u00e9cris sur<\/a> \ud83d\ude42, et nous avons un fichier qui est responsable de l&rsquo;ajout d&rsquo;un \u00e9l\u00e9ment de sous-menu \u00e0 l&rsquo;un des menus de niveau sup\u00e9rieur existants.<\/p>\n<p>Cette classe pourrait \u00eatre relativement simple en ce sens qu&rsquo;elle encapsule <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_submenu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">l&rsquo;appel d&rsquo;API WordPress appropri\u00e9<\/a>, qu&rsquo;elle se d\u00e9clenche lorsqu&rsquo;elle est attach\u00e9e au crochet [appropri\u00e9], puis ajoute le sous-menu, comme pr\u00e9vu.<\/p>\n<p>Mais disons que soit cette classe, une m\u00e9thode dans la classe, ou incluant un fichier que cette classe ajoute \u00e9galement du JavaScript ou des styles qui modifient l&rsquo;\u00e9tat de l&rsquo;\u00e9l\u00e9ment de sous-menu de sorte qu&rsquo;il est mis en surbrillance, il se comporte comme s&rsquo;il avait \u00e9t\u00e9 &quot;cliqu\u00e9&quot; ou il fait quelque chose que le programme ou l&rsquo;utilisateur n&rsquo;a pas l&rsquo;intention de faire.<\/p>\n<p>Ce serait un effet secondaire dans la mesure o\u00f9 cela changerait l&rsquo;\u00e9tat du programme.<\/p>\n<h2>Que doit faire le module\u00a0?<\/h2>\n<p>Cette classe elle-m\u00eame devrait faire <a href=\"https:\/\/en.wikipedia.org\/wiki\/Single_responsibility_principle\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">une chose<\/a> :<\/p>\n<blockquote>\n<p>Le principe de responsabilit\u00e9 unique est un principe de programmation informatique qui stipule que chaque module ou classe doit avoir la responsabilit\u00e9 d&rsquo;une seule partie de la fonctionnalit\u00e9 fournie par le logiciel, et que cette responsabilit\u00e9 doit \u00eatre enti\u00e8rement encapsul\u00e9e par la classe.<\/p>\n<\/blockquote>\n<p>Mais lorsque nous introduisons quelque chose qui s&rsquo;ajoute \u00e0 ce qu&rsquo;il est cens\u00e9 faire &#8211; lorsque nous ajoutons \u00e0 sa responsabilit\u00e9 ou changeons la chose de base qu&rsquo;il fait &#8211; alors nous avons introduit un effet secondaire.<\/p>\n<p>N&rsquo;oubliez pas que ce n&rsquo;est pas intrins\u00e8quement mauvais (selon la d\u00e9finition PSR-1 ci-dessus), mais il est important de reconna\u00eetre quand nous le faisons et quand nous ne le faisons pas.<\/p>\n<h2>Alors, comment ajoutons-nous des fonctionnalit\u00e9s\u00a0?<\/h2>\n<p>Je pense que la question naturelle est que si nous voulons ajouter des fonctionnalit\u00e9s \u00e0 un programme qui modifie son \u00e9tat, comment le faisons-nous (et est-ce faux)\u00a0?<\/p>\n<p>D&rsquo;abord, non, ce n&rsquo;est pas mal. Je veux dire que les programmes ont des \u00e9tats diff\u00e9rents bas\u00e9s sur une vari\u00e9t\u00e9 de choses, n&rsquo;est-ce pas\u00a0? Parfois, cela se produit lorsque quelque chose est \u00e9crit sur le disque ou dans une base de donn\u00e9es\u00a0; cela se produit parfois lorsque l&rsquo;utilisateur clique sur un \u00e9l\u00e9ment de l&rsquo;interface utilisateur, et ainsi de suite.<\/p>\n<p>Mais la fa\u00e7on dont ces \u00e9tats se produisent est l\u00e0 o\u00f9 la nature des effets secondaires entre en jeu.<\/p>\n<p>Prenons par exemple l&rsquo;id\u00e9e d&rsquo;un sous-menu. Il est cens\u00e9 faire une chose. Cela ne devrait rien changer d&rsquo;autre que ce que nous voyons \u00e0 l&rsquo;\u00e9cran.<\/p>\n<ul>\n<li>Il ne devrait pas \u00e9crire dans la base de donn\u00e9es,<\/li>\n<li>Il ne devrait pas configurer d&rsquo;\u00e9couteur d&rsquo;\u00e9v\u00e9nement lorsqu&rsquo;un autre objet ajoute un sous-menu,<\/li>\n<li>Il ne devrait pas modifier la pr\u00e9sentation de quoi que ce soit en dehors de lui-m\u00eame.<\/li>\n<li>Etc.<\/li>\n<\/ul>\n<p>L&rsquo;ajout de fonctionnalit\u00e9s fonctionne de la m\u00eame mani\u00e8re\u00a0: vous introduisez des classes charg\u00e9es de faire une chose sp\u00e9cifique et vous les laissez le faire. Lorsque ces composants fonctionnent en conjonction les uns avec les autres, vous avez alors un programme fonctionnel dans lequel chaque module (classe\/fonction\/peu importe) reste dans sa voie, pour ainsi dire.<\/p>\n<h2>Qu&rsquo;est-ce qu&rsquo;une r\u00e8gle empirique\u00a0?<\/h2>\n<p>Je suis s\u00fbr que beaucoup d&rsquo;entre vous qui lisez ceci ont votre avis sur ce que sont les effets secondaires et ce qu&rsquo;ils ne sont pas. Et comme toi, j&rsquo;ai le mien.<\/p>\n<p>Pense-y de cette fa\u00e7on:<\/p>\n<p>Si vous appelez une m\u00e9thode et qu&rsquo;elle renvoie une valeur, puis que vous appelez \u00e0 nouveau une m\u00e9thode avec le m\u00eame ensemble de donn\u00e9es, elle doit renvoyer la m\u00eame valeur.<\/p>\n<p>C&rsquo;est ainsi que vous savez que votre fonction, classe ou module g\u00e9n\u00e9rique n&rsquo;a pas d&rsquo;effets secondaires.<\/p>\n<p>Et, comme pour tout, j&rsquo;ai fait ces erreurs (et je continuerai probablement) mais c&rsquo;est une question d&rsquo;essayer de m&rsquo;am\u00e9liorer pour ne pas le faire.<\/p>\n<p>Finalement, cela deviendra la nouvelle norme.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai d\u00e9j\u00e0 discut\u00e9 des effets secondaires de la programmation dans le contexte de PSR-1. Mais leur importance s&rsquo;\u00e9tend au-del\u00e0 d&rsquo;un seul langage et dans la programmation g\u00e9n\u00e9rale.<\/p>\n","protected":false},"author":1,"featured_media":223973,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717],"tags":[1167],"class_list":["post-229602","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229602","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=229602"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229602\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/223973"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229602"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229602"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}