By Ben Stallings |

Hace unos años contribuí con una sección a un artículo en Wikipedia, pero los editores consideraron que no era lo suficientemente notable como para mantenerlo en el artículo, así que lo comparto aquí.

Código de macarrones

Por analogía con el lenguaje macarónico, el código de macarrones mezcla dos o más lenguajes de computadora en un solo documento. Los ejemplos comunes incluyen incrustar expresiones regulares o consultas SQL en un lenguaje de programación e incrustar CSS o Javascript en HTML, o por el contrario, fragmentos de HTML en Javascript. Los ejemplos particularmente complejos se producen en lenguajes de programación del lado del servidor como PHP, que están explícitamente destinados a integrarse en el código HTML. Entonces el HTML puede contener CSS, JavaScript y PHP, mientras que el propio JavaScript puede contener HTML y PHP (potencialmente recursivamente), y el PHP puede contener expresiones regulares y SQL. En estos casos, es posible usar cuatro o más idiomas en un solo documento, como se muestra en este ejemplo de "Hola Mundo":

<!DOCTYPE html>
<html>
<head><title>Código de macarrones</title></head>
<body>
    <?php
        $ip = $_SERVER['REMOTE_ADDR'];
        $dbh = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');
        $statement = $dbh->query("SELECT lastlog FROM logins WHERE ip = '$ip'");
        $row = $statement->fetch(PDO::FETCH_ASSOC);
        $dbh->query("INSERT INTO logins VALUES ('$ip', CURRENT_TIMESTAMP) ON DUPLICATE KEY UPDATE lastlog = CURRENT_TIMESTAMP");
    ?>
    <p>Hello, <?php print $ip; ?>.</p>
    <script>
        var lastlog = "<?php print $row['lastlog']?>";
        if (lastlog > "") alert("Visitaste por última vez " + lastlog);
        else alert("Nunca has estado aquí antes.");
    </script>
</body>
</html>

El ejemplo anterior muestra HTML (rojo) que contiene PHP (naranja) y Javascript (verde), con el PHP que a su vez contiene SQL (azul) y el Javascript que contiene PHP. El Javascript es necesario para mostrar un cuadro de alerta; el SQL es necesario para almacenar y recuperar datos en una base de datos; y el PHP es necesario para determinar la dirección IP del usuario y interfacer con la base de datos.

Debido a que el código de macarrones puede ser difícil de leer y mantener, particularmente para las personas que no conocen todos los idiomas utilizados, los proyectos de código abierto a menudo se esfuerzan por aislar los distintos idiomas entre sí en archivos separados. El ejemplo anterior podría reescribirse como cuatro archivos separados (.html y .js enviados al navegador y .php y .sql restantes en el servidor), pero el Javascript necesitaría enviar una solicitud AJAX al script PHP para recuperar los valores de las dos variables que necesita para completar la página. Por lo tanto, cargar la página requeriría tres solicitudes HTTP (para .html, .js y AJAX) en lugar de solo una para el archivo de código de macarrones.