{"id":4180,"date":"2025-07-29T10:13:06","date_gmt":"2025-07-29T08:13:06","guid":{"rendered":"https:\/\/davidperezgar.com\/?p=4180"},"modified":"2025-07-29T11:27:20","modified_gmt":"2025-07-29T09:27:20","slug":"programacion-negativa-como-usarla-wordpress","status":"publish","type":"post","link":"https:\/\/davidperezgar.com\/es\/programacion-negativa-como-usarla-wordpress\/","title":{"rendered":"Programaci\u00f3n Negativa: qu\u00e9 es, Ventajas y c\u00f3mo usarla en PHP y WordPress"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 es la Programaci\u00f3n Negativa?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La <strong>programaci\u00f3n negativa<\/strong> consiste en utilizar primero los casos que <strong>no deber\u00edan continuar<\/strong> la ejecuci\u00f3n de una funci\u00f3n o bloque de c\u00f3digo. En lugar de ir directo al \"camino feliz\" (el caso ideal), se gestionan primero los errores, excepciones o condiciones de salida temprana.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este estilo se opone al enfoque tradicional de anidar condiciones positivas, y es muy \u00fatil para evitar niveles de anidamiento innecesarios.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\udde0 Ejemplo Cl\u00e1sico vs Programaci\u00f3n Negativa<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Enfoque tradicional (positiva):<\/h4>\n\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><code class=\"\">function process_user($user) {\n    if ($user &amp;&amp; $user-&gt;is_active) {\n        \/\/ procesar usuario\n        send_email($user);\n    }\n}\n<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Enfoque negativo:<\/h4>\n\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><code class=\"\">function process_user($user) {\n    if (!$user || !$user-&gt;is_active) {\n        return;\n    }\n\n    \/\/ procesar usuario\n    send_email($user);\n}\n<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 Ventajas de la Programaci\u00f3n Negativa<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Mejor legibilidad<\/strong>: el flujo del c\u00f3digo es m\u00e1s lineal y directo.<\/li>\n\n\n\n<li><strong>Menos anidaciones<\/strong>: facilita el mantenimiento y reduce errores.<\/li>\n\n\n\n<li><strong>Separaci\u00f3n clara de errores y l\u00f3gica principal<\/strong>.<\/li>\n\n\n\n<li><strong>F\u00e1cil de testear<\/strong>: puedes probar condiciones de salida de forma m\u00e1s aislada.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udee0 C\u00f3mo Aplicarla en PHP (con ejemplos)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Supongamos que est\u00e1s validando una solicitud AJAX en WordPress:<\/p>\n\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><code class=\"\">add_action('wp_ajax_my_action', 'handle_ajax_request');\n\nfunction handle_ajax_request() {\n    if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'my_action_nonce')) {\n        wp_send_json_error('Nonce inv\u00e1lido');\n        return;\n    }\n\n    if (empty($_POST['data'])) {\n        wp_send_json_error('Datos vac\u00edos');\n        return;\n    }\n\n    \/\/ Aqu\u00ed va la l\u00f3gica principal\n    $result = do_something($_POST['data']);\n    wp_send_json_success($result);\n}\n<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Este enfoque negativo permite ver claramente qu\u00e9 debe detenerse antes de ejecutar el \"camino feliz\".<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\udde9 Aplicaci\u00f3n en Funciones de WordPress<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si est\u00e1s escribiendo un <strong>shortcode<\/strong> o un <strong>hook<\/strong>, puedes aplicar esta t\u00e9cnica para hacer que tu c\u00f3digo sea m\u00e1s limpio:<\/p>\n\n\n\n<div class=\"cbc-code-wrapper\"><div class=\"cbc-code-bar\"><button class=\"cbc-copy-button\">Copy<\/button><\/div><pre class=\"wp-block-code\"><code class=\"\">function my_shortcode($atts) {\n    if (!is_user_logged_in()) {\n        return '&lt;p&gt;Debes iniciar sesi\u00f3n para ver este contenido.&lt;\/p&gt;';\n    }\n\n    $user = wp_get_current_user();\n    if (!$user || !in_array('subscriber', $user-&gt;roles)) {\n        return '&lt;p&gt;No tienes permisos.&lt;\/p&gt;';\n    }\n\n    return '&lt;p&gt;Contenido exclusivo para subscriptores.&lt;\/p&gt;';\n}\nadd_shortcode('contenido_privado', 'my_shortcode');\n<\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\udded Buenas Pr\u00e1cticas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utiliza <code>return<\/code> temprano para evitar bloques <code>if<\/code> profundos.<\/li>\n\n\n\n<li>Prioriza la legibilidad sobre intentar ahorrar l\u00edneas.<\/li>\n\n\n\n<li>Combina la programaci\u00f3n negativa con manejo de excepciones en entornos m\u00e1s robustos (por ejemplo, Laravel o Symfony).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\uddf6 Conclusi\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La <strong>programaci\u00f3n negativa<\/strong> es una forma simple pero poderosa de escribir c\u00f3digo m\u00e1s claro y mantenible, especialmente en proyectos PHP y WordPress. Es una pr\u00e1ctica que mejora el flujo de tus funciones y evita errores dif\u00edciles de rastrear.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfQu\u00e9 es la Programaci\u00f3n Negativa? La programaci\u00f3n negativa consiste en utilizar primero los casos que no deber\u00edan continuar la ejecuci\u00f3n de una funci\u00f3n o bloque de c\u00f3digo. En lugar de ir directo al \"camino feliz\" (el caso ideal), se gestionan primero los errores, excepciones o condiciones de salida temprana. Este estilo se opone al enfoque [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":14,"footnotes":""},"categories":[550],"tags":[],"class_list":["post-4180","post","type-post","status-publish","format-standard","hentry","category-codigo"],"_links":{"self":[{"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/posts\/4180","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/comments?post=4180"}],"version-history":[{"count":1,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/posts\/4180\/revisions"}],"predecessor-version":[{"id":5957,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/posts\/4180\/revisions\/5957"}],"wp:attachment":[{"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/media?parent=4180"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/categories?post=4180"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/davidperezgar.com\/es\/wp-json\/wp\/v2\/tags?post=4180"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}