{"id":229314,"date":"2022-11-09T14:31:00","date_gmt":"2022-11-09T11:31:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229314"},"modified":"2022-11-09T14:36:35","modified_gmt":"2022-11-09T11:36:35","slug":"que-son-los-efectos-secundarios-de-la-programacion","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/que-son-los-efectos-secundarios-de-la-programacion\/","title":{"rendered":"\u00bfQu\u00e9 son los efectos secundarios de la programaci\u00f3n?"},"content":{"rendered":"\n<p>Cada vez que hablamos de ciertos conceptos de programaci\u00f3n, creo que es importante dar un paso atr\u00e1s en los detalles que estamos discutiendo y mirar las cosas en el contexto del panorama general.<\/p>\n<p>Algunos m\u00f3dulos introducen efectos secundarios; algunos no. Est\u00e1 bien.<\/p>\n<p>Por ejemplo, <a href=\"https:\/\/wordpress.mediadoma.com\/es\/estandares-basicos-de-codificacion-a-traves-de-psr-1\/\" title=\"ayer\">ayer<\/a> mencion\u00e9 brevemente la idea de programar efectos secundarios, pero lo hice al hablar sobre el uso de PSR. Y para aquellos que simplemente est\u00e1n interesados \u200b\u200ben aspectos de la programaci\u00f3n en un sentido m\u00e1s general, tambi\u00e9n es importante entenderlos.<\/p>\n<p>Recuerde, la idea de los efectos secundarios <a href=\"http:\/\/www.php-fig.org\/psr\/psr-1\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como se establece en PSR-1<\/a> es:<\/p>\n<blockquote>\n<p>Un archivo DEBER\u00cdA declarar nuevos s\u00edmbolos (clases, funciones, constantes, etc.) y no causar otros efectos secundarios, o DEBER\u00cdA ejecutar l\u00f3gica con efectos secundarios, pero NO DEBER\u00cdA hacer ambas cosas.<\/p>\n<\/blockquote>\n<p>En esta publicaci\u00f3n, no estoy tan interesado en discutir la l\u00f3gica con los efectos secundarios (porque hay momentos en los que ocurrir\u00e1n efectos secundarios). En cambio, estoy m\u00e1s preocupado por comprender los efectos secundarios de la programaci\u00f3n (qu\u00e9 son, qu\u00e9 evitar, etc.).<\/p>\n<p>Despu\u00e9s de todo, hablar de efectos secundarios en un contexto puede significar una cosa mientras que, en programaci\u00f3n, puede significar otra.<\/p>\n<h2>Efectos secundarios de la programaci\u00f3n<\/h2>\n<p>Bien, entonces la idea o definici\u00f3n de un efecto secundario gen\u00e9rico es simple, \u00bf <a href=\"https:\/\/d.pr\/Jyf2Np\" class=\"external external_icon\" rel=\"nofollow\" target=\"_blank\">verdad<\/a>? <\/p>\n<blockquote>\n<p>un efecto secundario, t\u00edpicamente indeseable, de un f\u00e1rmaco o tratamiento m\u00e9dico.<\/p>\n<\/blockquote>\n<p>Elimina todo el aspecto del tratamiento y te quedas con un &quot;efecto secundario&#8230; indeseable&quot;. Bueno, aqu\u00ed est\u00e1 la parte potencialmente confusa:<\/p>\n<ul>\n<li>optamos por incluir un archivo,<\/li>\n<li>sabemos lo que hace el archivo,<\/li>\n<li>por lo tanto, si sabemos lo que estamos <a href=\"https:\/\/php.net\/manual\/en\/function.include-once.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">incluyendo<\/a> y lo que hace, \u00bfc\u00f3mo puede introducir algo indeseable?<\/li>\n<\/ul>\n<p>Al menos, as\u00ed es como a menudo escucho que me preguntan cuando se trata de efectos secundarios. En programaci\u00f3n, siempre he generalizado los efectos secundarios como cualquier cosa que altere el estado del programa.<\/p>\n<p>Bastante f\u00e1cil, \u00bfverdad?<\/p>\n<h3>Efectos secundarios en WordPress<\/h3>\n<p>Entonces, digamos que est\u00e1 trabajando con WordPress, porque eso es lo que hago <a href=\"https:\/\/tommcfarlin.com\/tag\/wordpress\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">y escribo<\/a> \ud83d\ude42, y tenemos un archivo que es responsable de agregar un elemento de submen\u00fa a uno de los men\u00fas de nivel superior existentes.<\/p>\n<p>Esa clase podr\u00eda ser relativamente simple en el sentido de que envuelve <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_submenu_page\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la llamada adecuada de la API de WordPress<\/a>, se activa cuando se adjunta al gancho [adecuado] y luego agrega el submen\u00fa, seg\u00fan lo previsto.<\/p>\n<p>Pero digamos que esa clase, un m\u00e9todo en la clase, o incluir un archivo que esa clase tambi\u00e9n agregue algo de JavaScript o estilos que alteren el estado del elemento del submen\u00fa de modo que est\u00e9 resaltado, se comporte como si hubiera sido &quot;clic&quot; o hace algo que ni el programa ni el usuario pretenden.<\/p>\n<p>Eso ser\u00eda un efecto secundario en el sentido de que cambia el estado del programa.<\/p>\n<h2>\u00bfQu\u00e9 debe hacer el m\u00f3dulo?<\/h2>\n<p>Esa clase en s\u00ed deber\u00eda hacer <a href=\"https:\/\/en.wikipedia.org\/wiki\/Single_responsibility_principle\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">una cosa<\/a> :<\/p>\n<blockquote>\n<p>El principio de responsabilidad \u00fanica es un principio de programaci\u00f3n inform\u00e1tica que establece que cada m\u00f3dulo o clase debe tener la responsabilidad sobre una sola parte de la funcionalidad proporcionada por el software, y esa responsabilidad debe estar completamente encapsulada por la clase.<\/p>\n<\/blockquote>\n<p>Pero cuando introducimos algo que se suma a lo que se supone que debe hacer, cuando a\u00f1adimos su responsabilidad o cambiamos el elemento central \u00fanico que hace, entonces introducimos un efecto secundario.<\/p>\n<p>Recuerde, esto no es intr\u00ednsecamente malo (seg\u00fan la definici\u00f3n de PSR-1 anterior), pero es importante reconocer cu\u00e1ndo lo estamos haciendo y cu\u00e1ndo no.<\/p>\n<h2>Entonces, \u00bfc\u00f3mo agregamos funcionalidad?<\/h2>\n<p>Creo que la pregunta natural es que si queremos agregar funcionalidad a un programa que altera su estado, \u00bfc\u00f3mo lo hacemos (y est\u00e1 mal)?<\/p>\n<p>Primero, no, no est\u00e1 mal. Me refiero a que los programas tienen diferentes estados basados \u200b\u200ben una variedad de cosas, \u00bfverdad? A veces sucede cuando se escribe algo en el disco o en una base de datos; a veces sucede cuando el usuario hace clic en un elemento de la interfaz de usuario, y as\u00ed sucesivamente.<\/p>\n<p>Pero c\u00f3mo ocurren estos estados es donde entra en juego la naturaleza de los efectos secundarios.<\/p>\n<p>Tomemos por ejemplo la idea de un submen\u00fa. Se supone que debe hacer una cosa. No deber\u00eda alterar nada m\u00e1s que lo que vemos en la pantalla.<\/p>\n<ul>\n<li>No deber\u00eda escribir en la base de datos,<\/li>\n<li>No deber\u00eda configurar un detector de eventos para cuando otro objeto agrega un submen\u00fa,<\/li>\n<li>No debe alterar la presentaci\u00f3n de nada fuera de s\u00ed mismo.<\/li>\n<li>Y as\u00ed.<\/li>\n<\/ul>\n<p>Agregar funcionalidad funciona de la misma manera: introduce clases que son responsables de hacer algo espec\u00edfico y les permite hacerlo. Cuando estos componentes funcionan en conjunto, entonces tiene un programa funcional en el que cada m\u00f3dulo (clase\/funci\u00f3n\/lo que sea) permanece en su carril, por as\u00ed decirlo.<\/p>\n<h2>\u00bfQu\u00e9 es una regla general?<\/h2>\n<p>Estoy seguro de que muchos de los que leen esto tienen su opini\u00f3n sobre qu\u00e9 son y qu\u00e9 no son los efectos secundarios. Y como t\u00fa, tengo la m\u00eda.<\/p>\n<p>Pi\u00e9nsalo de esta manera:<\/p>\n<p>Si llama a un m\u00e9todo y devuelve un valor, y luego vuelve a llamar a un m\u00e9todo con el mismo conjunto de datos, deber\u00eda devolver el mismo valor.<\/p>\n<p>As\u00ed es como sabe que su funci\u00f3n, clase o m\u00f3dulo gen\u00e9rico no tiene efectos secundarios.<\/p>\n<p>Y, como con cualquier cosa, he cometido estos errores (y probablemente contin\u00fae), pero es cuesti\u00f3n de tratar de mejorar para no hacerlo.<\/p>\n<p>Eventualmente, se convertir\u00e1 en la nueva normalidad.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Anteriormente discut\u00ed los efectos secundarios de la programaci\u00f3n en el contexto de PSR-1. Pero su importancia se extiende m\u00e1s all\u00e1 de un solo lenguaje y en la programaci\u00f3n general.<\/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":[892,716],"tags":[1172],"class_list":["post-229314","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229314","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=229314"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229314\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/223973"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=229314"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=229314"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=229314"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}