{"id":229021,"date":"2022-11-01T18:12:00","date_gmt":"2022-11-01T15:12:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229021"},"modified":"2022-11-09T05:13:21","modified_gmt":"2022-11-09T02:13:21","slug":"sobre-escribir-codigo-inteligente-con-matrices-en-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/sobre-escribir-codigo-inteligente-con-matrices-en-wordpress\/","title":{"rendered":"Sobre escribir c\u00f3digo inteligente con matrices en WordPress"},"content":{"rendered":"\n<p>No s\u00e9 si existe un est\u00e1ndar para lo que se considera &quot;c\u00f3digo inteligente&quot;, pero creo que si mostraras varias muestras de c\u00f3digo a los programadores, podr\u00edan saberlo cuando lo vean.<\/p>\n<p>Y hubo un momento en mi carrera en el que estaba muy interesado en escribir c\u00f3digo inteligente. Pero cuanto mayor me hago y cuanto m\u00e1s trabajo hago en el mantenimiento de proyectos, menos me preocupa escribir c\u00f3digo inteligente y m\u00e1s interesado estoy en escribir c\u00f3digo que sea claro y le\u00eddo y, por lo tanto, mantenido.<\/p>\n<p>El c\u00f3digo inteligente es para los p\u00e1jaros. Perd\u00f3n por estos est\u00fapidos juegos de palabras.<\/p>\n<p>Cuando trabajamos con WordPress, es probable que estemos lidiando mucho con matrices, especialmente dado que gran parte de las funciones internas de WordPress se basan en ellas (s\u00ed, tambi\u00e9n hay algunos objetos, pero las matrices son omnipresentes).<\/p>\n<p>Entonces, \u00bfc\u00f3mo se ve el c\u00f3digo inteligente con matrices en WordPress en comparaci\u00f3n con el c\u00f3digo menos inteligente? Y adem\u00e1s, \u00bfdeber\u00edamos evitar apuntar a escribir c\u00f3digo inteligente?<\/p>\n<h2>C\u00f3digo inteligente con matrices<\/h2>\n<p>Podr\u00eda decirse que las funciones de matriz son uno de los conjuntos de funciones m\u00e1s grandes de PHP.<\/p>\n<p>Naturalmente, escribir c\u00f3digo inteligente con WordPress parece encajar parcialmente con el entorno, \u00bfverdad? No digo que sea malo en absoluto. Solo digo que cuando tiene funciones en el espacio de nombres global que funcionan con matrices que devuelven matrices, es demasiado f\u00e1cil escribir llamadas anidadas que, en \u00faltima instancia, requieren un poco m\u00e1s de trabajo mental para analizar lo que est\u00e1 haciendo el c\u00f3digo.<\/p>\n<p>Claro, escribir sobre eso es una cosa, pero tal vez tenga sentido ver un ejemplo de c\u00f3mo se ver\u00eda un c\u00f3digo inteligente con WordPress y luego c\u00f3mo se puede refactorizar.<\/p>\n<h3>Un ejemplo<\/h3>\n<p>Digamos, por ejemplo, que tenemos una publicaci\u00f3n y estamos actualizando el extracto de la publicaci\u00f3n, por lo que es necesario eliminar un nombre que est\u00e1 contenido en el extracto. Cuando esto sucede, no es necesariamente importante (aunque <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/delete_user\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">delete_user<\/a> no es dif\u00edcil de imaginar, \u00bfverdad?)<\/p>\n<p>Desde el principio, se nos da:<\/p>\n<ul>\n<li>la identificaci\u00f3n de la publicaci\u00f3n,<\/li>\n<li>el nombre de la persona a eliminar.<\/li>\n<\/ul>\n<p>Una forma de hacer esto ser\u00eda usar una combinaci\u00f3n de <a href=\"https:\/\/php.net\/manual\/en\/language.types.array.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.array-map.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_map<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.explode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">explosion<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.array-diff.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_diff<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.implode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">implode<\/a>. Todo por este motivo:<\/p>\n<ul>\n<li>matriz para crear una matriz de la persona (porque, como matriz, se requiere m\u00e1s adelante),<\/li>\n<li>array_map para recortar el espacio en blanco despu\u00e9s de explotar el extracto en una matriz,<\/li>\n<li>array_diff para encontrar las cadenas que quedan despu\u00e9s de eliminar un nombre,<\/li>\n<li>e implosionar para reconstruir el resultado nuevamente en una cadena para post_excerpt.<\/li>\n<\/ul>\n<p>Bien, dicho esto, as\u00ed es <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13ff8610716de3cb5b5e612d80267e9e#file-00-clever-code-with-arrays-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como se ve<\/a> un ejemplo de c\u00f3digo inteligente en WordPress :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Get the excerpt from the incoming post.\n$post    = get_post( $post_id );\n$excerpt = $post-&gt;post_excerpt;\n\n\/**\n * And we update the post content without the information (and we don't need\n * paragraph tags).\n *\/\n$event_post-&gt;post_excerpt = \n  apply_filters( \n    'the_excerpt', \n    implode( ', ', \n      array_diff( \n        array_map( \n          'trim', \n          explode( ',', $excerpt) ), \n      array( $name) ),\n    ),\n  );<\/code><\/pre>\n<p>Pero es mucho anidamiento, y generalmente tenemos que comenzar desde afuera hacia adentro y saber qu\u00e9 est\u00e1 haciendo cada funci\u00f3n, \u00bfverdad?<\/p>\n<p>Para limpiarlo, todav\u00eda tenemos que lidiar con las funciones que se enumeran anteriormente, pero podemos dividir las cosas en pasos m\u00e1s f\u00e1ciles de leer (junto con los comentarios del c\u00f3digo) para que sea m\u00e1s f\u00e1cil de analizar para otro desarrollador.<\/p>\n<p>Tal vez podr\u00eda verse algo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13ff8610716de3cb5b5e612d80267e9e#file-00-verbose-with-arrays-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">como esto<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Get the excerpt from the incoming post.\n$post    = get_post( $post_id );\n$excerpt = $post-&gt;post_excerpt;\n\n\/\/ Remove the name from the array of names in the excerpt.\n$to_remove = array( $name );\n$names     = array_map( 'trim', explode( ',', $excerpt) );\n$result    = array_diff( $names, $to_remove );\n\n\/\/ Now creae the new excerpt.\n$new_excerpt = implode( ', ', $result );\n\n\/**\n * And we update the post content without the information (and we don't need\n * paragraph tags).\n *\/\n$event_post-&gt;post_excerpt = apply_filters( 'the_excerpt', $new_excerpt );<\/code><\/pre>\n<p>Ahora, \u00bfes esta la manera de hacerlo? No s\u00e9. Pero es una manera de hacerlo. Y es una de esas situaciones que es m\u00e1s f\u00e1cil de leer y seguir.<\/p>\n<p>Entonces, tal vez no sea escribir un c\u00f3digo inteligente en WordPress, pero no s\u00e9, ni creo, que ese sea el objetivo.<\/p>\n<h2>\u00bfDeber\u00edamos apuntar a escribir un c\u00f3digo inteligente?<\/h2>\n<p>El <a href=\"https:\/\/make.wordpress.org\/core\/handbook\/best-practices\/coding-standards\/php\/#clever-code\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">manual de WordPress<\/a> establece lo siguiente:<\/p>\n<blockquote>\n<p>En general, la legibilidad es m\u00e1s importante que la inteligencia o la brevedad.<\/p>\n<\/blockquote>\n<p>Y luego procede a dar un ejemplo. En este punto de mi carrera, tiendo a estar de acuerdo:<\/p>\n<ul>\n<li>c\u00f3digo inteligente no equivale a un c\u00f3digo de mayor rendimiento,<\/li>\n<li>el c\u00f3digo inteligente a menudo tarda m\u00e1s en saltar a trav\u00e9s de m\u00e1s aros mentales que el c\u00f3digo detallado,<\/li>\n<li>Por lo tanto, el c\u00f3digo inteligente es m\u00e1s dif\u00edcil de mantener, especialmente cuando se salta a una base de c\u00f3digo m\u00e1s antigua.<\/li>\n<\/ul>\n<p>Finalmente, creo que diferentes personas podr\u00edan considerar un c\u00f3digo m\u00e1s inteligente que otro, pero tambi\u00e9n hay c\u00f3digo que muchos de nosotros considerar\u00edamos un intento de ser m\u00e1s inteligente que no.<\/p>\n<p>En \u00faltima instancia, trate de escribir c\u00f3digo como quiera, pero escriba pensando en otro desarrollador: si alguna vez se ha quejado de que un fragmento de c\u00f3digo es dif\u00edcil de descifrar a primera vista, lo m\u00e1s probable es que est\u00e9 mal escrito o sea un error. intentar ser inteligente. As\u00ed que no seas ese chico o chica que le pasa la pelota al siguiente desarrollador.<\/p>\n<p>En su lugar, trate de escribir un c\u00f3digo claro y use comentarios cuando sea necesario.<\/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>\u00bfC\u00f3mo se ve el c\u00f3digo inteligente con matrices en WordPress en comparaci\u00f3n con el c\u00f3digo menos inteligente? \u00bfY deber\u00edamos evitar apuntar a escribir c\u00f3digo inteligente?<\/p>\n","protected":false},"author":1,"featured_media":220968,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,800,861],"tags":[1172],"class_list":["post-229021","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-php-2","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229021","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=229021"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229021\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/220968"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=229021"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=229021"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=229021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}