<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>symfony</title><link>https://devtia.com/</link><description>Llevamos empresas a la nueva era digital. Te ayudamos a mejorar tus procesos a través de las métricas.</description><language>es</language><pubDate>Thu, 30 Apr 2026 08:28:13 +0200</pubDate><lastBuildDate>Thu, 30 Apr 2026 08:28:13 +0200</lastBuildDate><generator>DEVTIA</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><ttl>3600</ttl><item><title>empleo: backend developer php symfony remoto</title><link>https://devtia.com/post/backend-developer-php-symfony-remoto</link><description><![CDATA[<h2>&iquest;STRONGHOLD ASSET MANAGEMENT?</h2><p>Este es un anuncio para trabajar en: <a href="https://strongholdam.com/" target="_blank">STRONGHOLD ASSET MANAGEMENT</a>.</p><p>STRONGHOLD ASSET MANAGEMENT (SAM) es un fondo de inversi&oacute;n donde nos dedicamos a financiar operaciones de desarrollo inmobiliario. Es decir somos el socio capitalista para un promotor que quiere construir por ejemplo una promoci&oacute;n de chalets. SAM por lo tanto es una empresa a medio camino de una FINTECH y una PROPTECH. Puedes curiosear la web <a href="https://strongholdam.com/">https://strongholdam.com/</a> para entender un poco mejor qu&eacute; es lo que hacemos.</p><h2>Un poco de historia</h2><p>En torno al a&ntilde;o 2016 Matt Calner, nuestro socio director, lleg&oacute; a Madrid procedente de Londres, con la intenci&oacute;n de establecerse en Madrid. Seg&uacute;n sus propias palabras, la mejor ciudad del mundo.</p><p>Una vez aqu&iacute; se dio cuenta de que exist&iacute;a una posibilidad de negocio ya que hab&iacute;a dificultades para obtener financiaci&oacute;n inmobiliaria. Hab&iacute;a producto, hab&iacute;a mercado, pero el principal freno era la financiaci&oacute;n. Y con esta idea en la cabeza y esp&iacute;ritu emprendedor, se asoci&oacute; con algunos inversores, conocidos y amigos, y empezaron a hacer operaciones peque&ntilde;as, principalmente pr&eacute;stamos puente y reestructuraciones de deuda.</p><p>En el a&ntilde;o 2019 se fund&oacute; oficialmente SAM y en 2020 entr&oacute; como socio de referencia Goldman Sachs, <em>los que financian al FC Barcelona</em>, con una l&iacute;nea de cr&eacute;dito de 100 millones que ha ido incrementando con el paso del tiempo.</p><p>Dentro de este camino de maduraci&oacute;n de la compa&ntilde;&iacute;a, a mediados del a&ntilde;o 2020 nos contactan para desarrollar una plataforma que les ayude en su trabajo diario. Calculo de intereses, generaci&oacute;n de certificados, gesti&oacute;n documental, etc. Lo que ser&iacute;a un peque&ntilde;o proyecto de solo unos pocos meses nos llev&oacute; a finales del 2021 a incorporarnos a tiempo completo en la compa&ntilde;&iacute;a.</p><h3>Momento clave</h3><p>Durante el 2021, con una plantilla realmente peque&ntilde;a hemos sido capaces de financiar proyectos por un importe de m&aacute;s de 120 millones de euros y el objetivo es poder duplicar esa cifra cada a&ntilde;o. Creemos que es un momento clave para los objetivos de la compa&ntilde;&iacute;a, y queremos que nos ayudes a materializarlos.</p><h2>&iquest;Qu&eacute; cosas tenemos en mente?</h2><p>Estas entre otras cosas es lo que queremos hacer en el medio plazo.</p><ul><li>Continuar mejorando y optimizando las herramientas y procesos de la plataforma que ya tenemos.</li><li>Mejorar la inteligencia de negocio para ofrecer informaci&oacute;n &uacute;til en tiempo real.</li><li>Internacionalizar la compa&ntilde;&iacute;a.</li></ul><p>A nivel de IT nos gustar&iacute;a.</p><ul><li>Mejorar nuestras habilidades para producir c&oacute;digo cada vez m&aacute;s confiable, sostenido por una buena test suite, y que se pueda ampliar / modificar f&aacute;cilmente.</li><li>Innovar a&ntilde;adiendo nuevas piezas a nuestra infraestructura.</li></ul><h2>&iquest;Qu&eacute; vas a hacer?</h2><h3>En tus primeros d&iacute;as</h3><ul><li>Conocer a tus compa&ntilde;eros, familiarizarte con el entorno de trabajo y el c&oacute;digo que ya tenemos desarrollado.</li><li>Comenzar a asimilar toda la terminolog&iacute;a / conocimiento que necesitar&aacute;s para desarrollar tu trabajo.</li><li>Resolver algunas issues sencillas.</li></ul><h3>En algunas semanas</h3><ul><li>Resolver issues que requieran un mayor conocimiento del proyecto.</li><li>Gestionar tu trabajo diario, desde la toma de requisitos, hasta poner el c&oacute;digo en producci&oacute;n.</li></ul><h3>En algunos meses</h3><ul><li>Ayudar a definir y ejecutar la estrategia de IT, en base a los objetivos y necesidades de la compa&ntilde;&iacute;a. SAM es una empresa orientada a resultados.</li><li>Formar al equipo en aquello que creas que puedes aportar.</li></ul><h2>&iquest;Con que lo har&aacute;s?</h2><ul><li>La pieza principal de la arquitectura est&aacute; desarrollada en un monolito sobre Symfony 5.4 y PHP 8.1
	<ul><li>Nos preocupan los principios SOLID y el contenido del libro CLEAN CODE, aunque no somos talibanes.</li><li>Tenemos test funcionales ( smoke test ) + test unitarios, que se ejecutan adem&aacute;s de en local, en un entorno de integraci&oacute;n continua.</li></ul></li><li>Un poquito de javascript + bootstrap.</li><li>git + github.</li></ul><h2>&iquest;C&oacute;mo es el equipo?</h2><p>Ser&aacute;s el tercer compa&ntilde;ero de un peque&ntilde;o equipo de IT. Somos un equipo horizontal, aut&oacute;nomo y &aacute;gil. Tenemos total libertad para hacer lo que queramos.</p><h3>Alvaro Cebri&aacute;n</h3><p>Apasionado de la tecnolog&iacute;a y la inform&aacute;tica, le encanta probar todo tipo de tecnolog&iacute;as y lenguajes nuevos que van saliendo. Aunque a nivel profesional est&aacute; m&aacute;s enfocado en el desarrollo web, tambi&eacute;n le divierte programar mis aplicaciones de escritorio, en otros lenguajes como C o aplicaciones m&oacute;viles para Android.</p><ul><li><a href="https://www.linkedin.com/in/alvarocebriangarcia/">https://www.linkedin.com/in/alvarocebriangarcia/</a></li><li><a href="https://github.com/alvarocebrian">https://github.com/alvarocebrian</a></li></ul><h3>Daniel Gonz&aacute;lez</h3><p>Cree que nada es imposible si se hace con pasi&oacute;n y honestidad.</p><ul><li><a href="https://www.linkedin.com/in/desarrolla2/">https://www.linkedin.com/in/desarrolla2/</a></li><li><a href="https://github.com/desarrolla2">https://github.com/desarrolla2</a></li></ul><h2>&iquest;Qu&eacute; buscamos?</h2><h3>Indispensable</h3><ul><li>Experiencia consolidada en las todas o casi todas las siguientes tecnolog&iacute;as.
	<ul><li>PHP, Symfony, MySQL, Git, Linux, JavaScript, Bootstrap.</li></ul></li><li>S&oacute;lidos conocimientos de programaci&oacute;n.
	<ul><li>Principios SOLID, test unitarios y funcionales.</li></ul></li><li>Capacidad para entender y proponer soluciones a problemas de negocio. No nos pagan por resolver issues, nos pagan por ayudar a la compa&ntilde;&iacute;a a llegar al siguiente nivel.</li><li>Alto rendimiento en el d&iacute;a a d&iacute;a, somos un equipo peque&ntilde;o, pero muy productivo.</li></ul><h3>Interesante</h3><ul><li>Conocimientos en el mundo financiero y/o del mercado inmobiliario.</li><li>Anal&iacute;tica de datos.</li><li>Comunicaci&oacute;n en ingl&eacute;s.</li><li>Docker.</li></ul><h2>&iquest;Qu&eacute; ofrecemos?</h2><ul><li>Lo b&aacute;sico
	<ul><li>Contrato indefinido / 23 d&iacute;as de vacaciones / flexibilidad horaria.</li><li>100% remoto, o si lo prefieres puedes venir a nuestra oficina en Castellana 60, Madrid.</li><li>40k - 70k brutos anuales.</li></ul></li><li>Otros perks:
	<ul><li>Formaci&oacute;n continua.</li><li>Cheques restaurante / guarder&iacute;a / transporte / seguro m&eacute;dico.</li><li>Viaje anual de toda la compa&ntilde;ia. Viaje a una conferencia del equipo de IT.</li></ul></li></ul><h2>&iquest;Quieres participar?</h2><p>Si estas interesad@ &iexcl;Queremos crecer junt@s!.</p><p><a class="btn btn--red" href="/work-with-us/as-developer/" style="margin-top:20px">aplica aqu&iacute;</a></p>
]]></description><guid>https://devtia.com/post/backend-developer-php-symfony-remoto</guid><pubDate>Mon, 12 Jul 2021 10:29:29 +0200</pubDate></item><item><title>Tecnología</title><link>https://devtia.com/post/tecnologia</link><description><![CDATA[<p>En nuestra opini&oacute;n la tecnolog&iacute;a no es el factor m&aacute;s importante a la hora de elegir uno u otro proveedor. Nos gusta decir que un mal programador con el mejor stack obtendr&aacute; peores resultados que un buen programador con un stack menos &oacute;ptimo.</p><p>No obstante hemos elegido un stack que se encuentra a la cabeza de la <strong>innovaci&oacute;n en el desarrollo de proyectos web</strong>, para ofrecer el mejor servicio para nuestros clientes.</p><p>En esta entrada queremos explicarte cu&aacute;les son las diferentes partes que lo componen. Por supuesto <strong>dependiendo de las necesidades de cada proyecto algunas de las piezas pueden variar</strong>.</p><div class="row"><div class="col-sm-9"><h2>UBUNTU</h2><p>El sistema operativo es la base sobre la que se va a ejecutar todo lo dem&aacute;s. Nosotros utilizamos Ubuntu en los servidores de producci&oacute;n, por ser un <strong>sistema operativo seguro</strong>, con muy buen soporte y a la vez muy sencillo de usar y de optimizar.</p><h2>MYSQL</h2><p>Mysql es la<strong> base de datos m&aacute;s utilizada en entornos web</strong>. Adem&aacute;s tiene muy buena integraci&oacute;n con php y symfony lo que nos permite avanzar a un ritmo acelerado.</p></div><div class="col-sm-3"><p><img alt="stack tecnologico" loading="lazy" src="/uploads/content/image/image/d7b928274d2609ea9e73dc5517bc050ba7549a48.png" title="stack tecnologico"></p></div></div><h2 class="mt-4">PHP / SYMFONY</h2><p>Symfony es un marco de trabajo para el desarrollo web que ha revolucionado el desarrollo en este lenguaje de programaci&oacute;n. Es en nuestra opini&oacute;n el mejor marco de trabajo para este tipo de proyectos que existe en la actualidad, as&iacute; lo hicimos en nuestra charla en <a href="/post/seleccionados-para-dar-una-charla-en-la-conferencia-symfony-live-2021" target="_blank">Symfony Live</a>, <strong>la conferencia oficial y la m&aacute;s importante en relaci&oacute;n con el framework Symfony.</strong></p><h2>BOOTSTRAP / GRUNT / LESS</h2><p>Bootstrap es un <strong>marco de trabajo que facilita el desarrollo de interfaces responsive</strong> para aquellas empresas que no son especialistas en este tipo de trabajo.</p>
]]></description><guid>https://devtia.com/post/tecnologia</guid><pubDate>Thu, 11 Mar 2021 10:36:43 +0100</pubDate></item><item><title>Symfony live 2021</title><link>https://devtia.com/post/seleccionados-para-dar-una-charla-en-la-conferencia-symfony-live-2021</link><description><![CDATA[<p><strong>Hemos sido seleccionados</strong> para dar una de las charlas de esta edici&oacute;n de la conferencia Symfony Live. Concretamente para la edici&oacute;n en <strong>castellano</strong>, edici&oacute;n que este a&ntilde;o ser&aacute; <strong>online</strong> y que tendr&aacute; lugar el d&iacute;a <strong>7 de Mayo</strong>.</p><p>Compartimos el cartel con gente tan importante en esta comunidad como: Fabien Potencier, Javier Eguiluz, Nicolas Grekas o Ryan Weaver. <strong>Es un honor compartir cartel con todos estos grandes desarrolladores</strong>. Puedes ver el panel completo en este <a href="https://live.symfony.com/2021-spain/schedule">enlace</a>.</p><p>Desde aqu&iacute; dar las <strong>gracias a la organizaci&oacute;n por confiar en nosotros</strong>. WE LOVE YOU!</p><h2>&iquest;Qu&eacute; es Symfony Live?</h2><div class="row"><div class="col-sm-8"><p><img alt="Symfony Live Spanish Edition 2021" loading="lazy" src="/cache/thumb_1200_0600/uploads/content/image/image/77d5e6b50a31a57ec9f055df960b8b6f280d7e83.png" title="Symfony Live Spanish Edition 2021"></p></div></div><p>Symfony Live es <strong>la conferencia oficial y la m&aacute;s importante en relaci&oacute;n con el framework Symfony</strong>. En ella se tratan temas relacionados con el framework, con el ecosistema php, con las tendencias en buenas pr&aacute;cticas en el &aacute;mbito del desarrollo de software.</p><p>Esta ser&aacute; una edici&oacute;n online, en la que se pierde una parte importante de la esencia de acudir a un evento, y es conocer y relacionarte con profesionales y empresas del sector.</p><p>Sin embargo al ser online tienes la ventaja de que el l&iacute;mite de asistentes no es el espacio disponible en la sala de conferencias, por lo que posiblemente la audiencia ser&aacute; mucho mayor. Adem&aacute;s las charlas quedar&aacute;n grabadas, por lo que los asistentes podr&aacute;n verlas de nuevo en cualquier momento.</p><h2>&iquest;De que vamos a hablar?</h2><p>Todav&iacute;a no hemos preparado la charla por lo que el contenido est&aacute; definido del todo, pero la charla tiene el t&iacute;tulo "<strong>refactoring with phpstorm</strong>", por lo tanto hablaremos de dos cosas que ya hemos profundizado bastante en este blog y en nuestro <a href="https://www.youtube.com/c/bestias_del_desarrollo/">canal de youtube</a> que es de <a href="/series/codigo-limpio">c&oacute;digo limpio</a>, y de edici&oacute;n con <a href="/series/maneja-intellij-idea-como-una-bestia">phpstorm</a>.</p><p>Dar una charla siempre es una oportunidad para aprender, por lo que de aqu&iacute; al 7 de mayo vamos a estar poni&eacute;ndonos a tope para mejorar estos contenidos y a&ntilde;adir nuevos, leyendo nuevos libros como por ejemplo el "<a href="https://amzn.to/2Rdugvy">Refactoring: Improving the Design of Existing Code</a>" de Martin Fowler, al que le ten&iacute;amos ganas.</p><p>Mezclando estos cuatro conceptos: <strong>symfony, clean code, refactoring</strong>, y por supuesto nuestro editor favorito, <strong>phpstorm</strong>, creo que nos <strong>puede quedar una charla m&aacute;s que interesante</strong>.</p><p>Estate atento al blog y al canal, por que probablemente publicaremos contenidos relacionados pr&oacute;ximamente.</p><h2>&iquest;Por qu&eacute; nos encanta participar en este tipo de eventos?</h2><p>Como ya hemos dicho dar una charla en un evento, especialmente cuando tiene mucha repercusi&oacute;n es una situaci&oacute;n que te pone al l&iacute;mite. De golpe est&aacute;s fuera de tu zona de confort, y vas a tener que enfrentar ante una audiencia de mucho nivel, que ha pagado por verte y que no se va a sentir feliz ante una charla de baja calidad.</p><p>Es por esto que debemos enfocar esto como una oportunidad para:</p><ol><li><strong>Seguir aprendiendo</strong>, y profundizando en el &aacute;mbito del contenido de la charla.</li><li>Demostrar que <strong>desde una empresa peque&ntilde;a</strong> como la nuestra y con unos recursos contenidos <strong>se pueden hacer cosas de mucho nivel</strong>.</li><li>Dar <strong>visibilidad a nuestra marca</strong>.</li></ol><p>Si todav&iacute;a no tienes tu entrada y quieres hacerte con ella, puedes conseguirla en este <a href="https://live.symfony.com/2021-spain/registration/">enlace</a>.</p><p>&iexcl;Nos vemos por all&iacute;!</p>
]]></description><guid>https://devtia.com/post/seleccionados-para-dar-una-charla-en-la-conferencia-symfony-live-2021</guid><pubDate>Fri, 09 Apr 2021 13:32:25 +0200</pubDate></item><item><title>Código limpio: Deja de comentar</title><link>https://devtia.com/post/codigo-limpio-deja-de-comentar</link><description><![CDATA[<p>En esta entrada vamos a analizar cu&aacute;ndo y c&oacute;mo es conveniente el uso de comentarios durante la fase de desarrollo de software.</p><h2>bloques de c&oacute;digo</h2><p>Por regla general <strong>deber&iacute;as evitar el uso de comentarios</strong>. Los comentarios pueden parecer una herramienta muy &uacute;til ya que cuando estamos desarrollando puede que nos encontremos con que queremos explicar mejor c&oacute;mo funciona nuestro c&oacute;digo o por que hemos tomado una determinada decisi&oacute;n.</p><p>Pero cuando usamos un comentario de c&oacute;digo donde antes ten&iacute;amos un problema: que nuestro c&oacute;digo no era suficientemente sencillo de entender, ahora tenemos dos: nuestro c&oacute;digo sigue sin entenderse con facilidad, y ahora adem&aacute;s debo ocuparme de mantener los comentarios que he realizado.</p><p>Puedes pensar que mantener ese comentario no es mucho trabajo, pero que tal si esa energ&iacute;a qu&eacute; has gastado en mantener un comentario la hubieras gastado en <strong>hacer algo m&aacute;s productivo</strong>. &iquest;mejor, no?.</p><p>Vemos un ejemplo con el <code>TokenStorage</code> del componente <code>Security</code> de <code>Symfony</code>.</p><pre><code class="php">namespace Symfony\Component\Security\Core\Authentication\Token\Storage;

use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Contracts\Service\ResetInterface;

/**
 * TokenStorage contains a TokenInterface.
 */
class TokenStorage implements TokenStorageInterface, ResetInterface
{
    // ..
    public function setToken(TokenInterface $token = null)
    {
        if ($token) {
            // ensure any initializer is called
            $this-&gt;getToken();
        }

        $this-&gt;initializer = null;
        $this-&gt;token = $token;
    }
    //..
}</code></pre><p>El autor de este c&oacute;digo necesitaba hacer algunas llamadas antes de configurar el token. Se dio cuenta que que no era sencillo de entender y que otra persona que viniera detr&aacute;s probablemente no entender&iacute;a el motivo de esa llamada, asi que utiliz&oacute; un comentario para aclararlo todo. &iquest;Pero que te parece si hubiera hecho esto?</p><pre><code class="php">namespace Symfony\Component\Security\Core\Authentication\Token\Storage;

use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Contracts\Service\ResetInterface;

/**
 * TokenStorage contains a TokenInterface.
 */
class TokenStorage implements TokenStorageInterface, ResetInterface
{
    // ..
    public function setToken(TokenInterface $token = null)
    {
        if ($token) {
            $this-&gt;callInitializer();
        }

        $this-&gt;initializer = null;
        $this-&gt;token = $token;
    }

    private function callInitializer(): void
    {
        $this-&gt;getToken();
    }
    //..
}</code></pre><p>Como ves <strong>hemos eliminado el comentario y hemos mantenido e incluso mejorado la expresividad</strong>, ya que el c&oacute;digo es igual de expl&iacute;cito. Por lo tanto siempre que nos veamos en la necesidad de a&ntilde;adir comentarios, debemos plantearnos si podr&iacute;amos mejorar la expresividad de nuestro c&oacute;digo mejorando los nombres que estamos utilizando o extrayendo m&eacute;todos como en el ejemplo.</p><h2>DocBlock y documentaci&oacute;n autogenerada</h2><p>Algunos editores de texto a&ntilde;aden documentaci&oacute;n de forma m&aacute;s o menos autom&aacute;tica que permite indicar los tipos de los argumentos y del valor devuelto, as&iacute; como informaci&oacute;n adicional.</p><p>Veamos un ejemplo</p><pre><code class="php">    /**
     * get movements
     *
     * @return array
     */
    public function getMovements()
    {
        return $this-&gt;movements;
    }</code></pre><p>Este tipo de documentaci&oacute;n <strong>no aporta ning&uacute;n valor adicional</strong> ya que simplemente est&aacute; repitiendo lo mismo que ya dice el nombre de la funci&oacute;n. Quiz&aacute; esto ten&iacute;a sentido antes de la versi&oacute;n 7, para ayudar al IDE en el autocompletado. Pero a partir de esta versi&oacute;n es mucho mejor eliminar estos comentarios y utilizar el tipado nativo del lenguaje.</p><pre><code class="php">   public function getMovements(): array
    {
        return $this-&gt;movements;
    }</code></pre><h2>Usos permitidos</h2><p>Por supuesto el autor contempla algunos casos en los que s&iacute; estar&iacute;a permitido y justificado el uso de comentarios.</p><h3>Licencias y textos legales</h3><p>Es un uso completamente justificado el incluir la licencia y otros textos legales en el encabezado de nuestros ficheros. Adem&aacute;s esto no supone ning&uacute;n trabajo adicional, por que es habitual utilizar sistemas que se encargan de a&ntilde;adir estos comentarios de forma autom&aacute;tica, y adem&aacute;s los IDE suelen ocultarlos por lo que no molestan.</p><h3>APIs</h3><p>Si est&aacute;s construyendo una api y probablemente quieras generar la documentaci&oacute;n a trav&eacute;s de alg&uacute;n sistema autom&aacute;tico, s&iacute; estar&iacute;a justificado el incluir toda esta informaci&oacute;n adicional en tu c&oacute;digo.</p>
]]></description><guid>https://devtia.com/post/codigo-limpio-deja-de-comentar</guid><pubDate>Fri, 17 Jul 2020 14:46:07 +0200</pubDate></item><item><title>Código limpio: El malvado argumento booleano</title><link>https://devtia.com/post/codigo-limpio-el-malvado-argumento-booleano</link><description><![CDATA[<p>En la entrada anterior revisamos la importancia de elegir buenos argumentos. En esta entrada vamos a centrarnos en entender los motivos de un tipo de argumento concreto. El argumento booleano. Para ello analizamos este tipo de argumentos en el c&oacute;digo del componente <code>Config</code> y el componente <code>Crawler</code> de <code>Symfony</code>.</p><h2>Confunden al lector</h2><p>En general los argumentos booleanos confunden al lector. Veamos un ejemplo, con una clase del componente <code>Config</code>. Esta clase en concreto es la responsable de buscar un fichero de un determinado nombre en un array de paths definidos en los que se podr&iacute;a encontrar.</p><pre><code class="php">namespace Symfony\Component\Config;

/**
 * FileLocator uses an array of pre-defined paths to find files.
 */
class FileLocator implements FileLocatorInterface
{
    // ..
    public function locate(string $name, string $currentPath = null, bool $first = true)
    {
        // ..
    }
   // ..
}</code></pre><p>&iquest;Sabr&iacute;as decirme qu&eacute; hace exactamente el tercer argumento? Quiz&aacute; tengas la siguiente intuici&oacute;n, si le pasamos <code>true</code> probablemente devolver&aacute; la primera coincidencia, pero &iquest;qu&eacute; ocurre si le paso un <code>false?</code>. Si realmente quiero entender esta funci&oacute;n voy a necesitar ir al c&oacute;digo y leer que es lo que hace.</p><p>Una vez que ya nos hemos le&iacute;do el c&oacute;digo entendemos que el funcionamiento es el siguiente:</p><ul><li>si le paso un <code>true</code>, me devolver&aacute; la primera coincidencia</li><li>si le paso un <code>false</code> me devolver&aacute; todas.</li></ul><p>&iquest;No se lo pondr&iacute;amos mucho m&aacute;s f&aacute;cil al lector si somos expl&iacute;citos de esta forma?</p><pre><code class="php">namespace Symfony\Component\Config;

/**
 * FileLocator uses an array of pre-defined paths to find files.
 */
class FileLocator implements FileLocatorInterface
{
    // ..
    public function locateAll(string $name, string $currentPath = null)
    {
        // ..
    }

    public function locateFirst(string $name, string $currentPath = null)
    {
        // ..
    }
   // ..
}</code></pre><p>Como siempre esto no significa que debamos duplicar el c&oacute;digo, ya que probablemente podemos encontrar la forma de que uno llame a otro o utilizar funciones privadas m&aacute;s peque&ntilde;as, para evitar cualquier duplicidad.</p><h2>Hace dos cosas</h2><p>En muchas ocasiones un argumento booleano indica que la funci&oacute;n hace dos cosas diferentes. Como ya vimos en la entrada dedicada a funciones, estas deber&iacute;an hacer una &uacute;nica cosa y deber&iacute;an hacerla bien.</p><p>Veamos un ejemplo con el componente <code>DomCrawler</code> de <code>Symfony</code>. Este componente permite crear un cliente que simula ser un navegador y que se utiliza en pruebas funcionales y para tareas de scrapping.</p><p>La funci&oacute;n que vamos a ver se llama despu&eacute;s de haber ejecutado una query sobre un documento HTML <code>$message = $crawler-&gt;filterXPath('//body/p')-&gt;text();</code></p><pre><code class="php">namespace Symfony\Component\DomCrawler;

/**
 * Crawler eases navigation of a list of \DOMNode objects.
 */
class Crawler implements \Countable, \IteratorAggregate
{
    // ..
    /**
     * Returns the text of the first node of the list.
     *
     * Pass true as the second argument to normalize whitespaces.
     */
    public function text(string $default = null, bool $normalizeWhitespace = true)
    {
        // ..
    }
    // ..
}</code></pre><p>&iquest;No da la sensaci&oacute;n de que el segundo argumento responde a una necesidad del programador que a una decisi&oacute;n de dise&ntilde;o? &iquest;Qui&eacute;n realizar&iacute;a un dise&ntilde;o as&iacute;? Obviamente el siguiente ejemplo es mejor.</p><pre><code class="php">namespace Symfony\Component\DomCrawler;

/**
 * Crawler eases navigation of a list of \DOMNode objects.
 */
class Crawler implements \Countable, \IteratorAggregate
{
    // ..
    public function text(string $default = null)
    {
        // ..
    }

    public function normalizeWhitespace(string $text)
    {
        // ..
    }
    // ..
}</code></pre><p>Y una vez realizado este dise&ntilde;o, &iquest;no parece evidente que <code>normalizeWhitespace</code> deber&iacute;a ir en otra clase? esto lo veremos m&aacute;s adelante en la entrada dedicada a las clases.</p>
]]></description><guid>https://devtia.com/post/codigo-limpio-el-malvado-argumento-booleano</guid><pubDate>Sun, 12 Jul 2020 13:31:24 +0200</pubDate></item></channel></rss>