Código repetitivo
En programación informática, el código repetitivo, en ingles su concepto viene del boilerplate termino que viene desde la impresión del periódico, son secciones de código que se repiten en múltiples lugares con poca o ninguna variación. Al usar lenguajes considerados verbosos, el programador debe escribir mucho código repetitivo para lograr solo una funcionalidad menor. [1]
La necesidad de código repetitivo se puede reducir mediante mecanismos de alto nivel como la metaprogramación (que hace que la computadora escriba automáticamente el código repetitivo necesario o lo inserte en el momento de la compilación ), la convención sobre configuración (que brinda buenos valores predeterminados, lo que reduce la necesidad de especificar detalles del programa en cada proyecto) y la ingeniería basada en modelos (que utiliza modelos y generadores de modelo a código, lo que elimina la necesidad de código repetitivo manual).
También es posible trasladar código repetitivo a una clase abstracta para que pueda ser heredado por cualquier número de clases concretas . Otra opción sería trasladarlo a una subrutina para que pueda ser invocado en lugar de ser duplicado.
Origen
[editar]El término surgió del sector periodístico . Las columnas y otros artículos distribuidos por los sindicatos de impresores se enviaban a los periódicos suscriptores en forma de planchas de impresión preparadas. Debido a su parecido con las planchas metálicas utilizadas en la fabricación de calderas (en ingles boiler), se las conoció como «placas de caldera», y el texto resultante, como «texto de placa de caldera». Dado que las historias distribuidas por las planchas de impresión solían ser « de relleno » en lugar de noticias «serias», el término se convirtió en sinónimo de texto repetitivo y poco original. [2] [3]
Un término relacionado es código de contabilidad, que se refiere al código que no es parte de la lógica empresarial pero que está intercalado con ella para mantener las estructuras de datos actualizadas o manejar aspectos secundarios del programa.
Preámbulo
[editar]Una forma de texto repetitivo consiste en declaraciones que, si bien no forman parte de la lógica del programa ni de la sintaxis esencial del lenguaje, se añaden al inicio de un archivo fuente de forma personalizada. El siguiente ejemplo de Perl muestra texto repetitivo:
#!/usr/bin/env perl use warnings; use strict; La primera línea es un shebang, que identifica el archivo como un script de Perl ejecutable directamente en la línea de comandos en sistemas Unix/Linux. Las otras dos son pragmas que activan las advertencias y el modo estricto, requisitos del estilo de programación de Perl. El siguiente ejemplo es un código repetitivo del lenguaje de programación C/C++, <code id="mwRA">#include</code> guard .
#ifndef MYINTERFACE_H #define MYINTERFACE_H ... #endif Esto comprueba y configura un indicador global para indicar al compilador si el archivo myinterface.h ya se ha incluido. Dado que la compilación de un módulo puede incluir muchos archivos interdependientes, esto evita procesar el mismo encabezado varias veces (lo que provocaría errores debido a múltiples definiciones con el mismo nombre).
En Java y plataformas similares
[editar]En los programas Java, las clases DTO suelen incluir métodos para obtener y establecer variables de instancia. Las definiciones de estos métodos suelen considerarse repetitivas. Aunque el código varía de una clase a otra, su estructura es lo suficientemente típica como para que sea mejor generarlo automáticamente que escribirlo manualmente. Por ejemplo, en la siguiente clase Java que representa una mascota, casi todo el código es repetitivo, excepto las declaraciones de Pet, name y owner :
Java
[editar]public class Pet { private String name; private Person owner; public Pet(String name, Person owner) { this.name = name; this.owner = owner; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Person getOwner() { return owner; } public void setOwner(Person owner) { this.owner = owner; } } La mayor parte del código repetitivo de este ejemplo existe para cumplir con los requisitos de JavaBeans . Si las variables name y owner se declararan como públicas, los métodos de acceso y mutación no serían necesarios.
En Java 14, se agregaron clases de registro para solucionar este problema. [4] [5] [6]
Para reducir la cantidad de código repetitivo, se han desarrollado muchos marcos, por ejemplo, Lombok para Java. [7] El mismo código que el anterior es generado automáticamente por Lombok usando anotaciones de Java, que es una forma de metaprogramación :
@AllArgsConstructor @Getter @Setter public class Pet { private String name; private Person owner; } Scala
[editar]En otros lenguajes de programación, es posible lograr lo mismo con menos código repetitivo, siempre que el lenguaje tenga soporte integrado para estas construcciones comunes. Por ejemplo, el equivalente del código Java anterior se puede expresar en Scala con una sola línea de código:
case class Pet(var name: String, var owner: Person) C#
[editar]O en C# usando propiedades automáticas con campos de respaldo generados por el compilador:
public class Pet { public string Name { get; set; } public Person Owner { get; set; } } A partir de C# 9.0 existe la posibilidad de utilizar registros que generan clases con propiedades automáticamente:
public record Pet(string Name, Person Owner); HTML
[editar]En HTML, el siguiente texto repetitivo se utiliza como una plantilla vacía básica y está presente en la mayoría de las páginas web:
El estándar HTML Living Standard de WHATWG define que las etiquetas <html> <head> <body> pueden omitirse sin problemas en la mayoría de las circunstancias. [8] La etiqueta <meta charset="UTF-8"> es técnicamente redundante cuando proviene directamente de un servidor web configurado para enviar la codificación de caracteres en una cabecera HTTP, aunque resulta útil cuando la respuesta HTML se guarda en un archivo .html, caché o archivo web. [9] La guía de estilo HTML/CSS de Google recomienda omitir todas las etiquetas opcionales, [10] lo que resulta en una mayor reducción de texto repetitivo. El Consorcio World Wide Web establece que el <title> no debe estar vacío: [11]
Referencias
[editar]- ↑ Lämmel, Ralf; Jones, Simon Peyton (2003). «Scrap your boilerplate: a practical design pattern for generic programming». Proceedings of the 2003 ACM SIGPLAN International Workshop on Types in Languages Design and Implementation. TLDI '03. New York: ACM. pp. 26-37. ISBN 9781581136494. doi:10.1145/604174.604179.
- ↑ «Boilerplate». Dictionary.com. Consultado el 27 de enero de 2018.
- ↑ «Boilerplate». Merriam-Webster (en inglés). Consultado el 27 de enero de 2018.
- ↑ «Record Classes». docs.oracle.com.
- ↑ «JEP 395: Record». openjdk.org.
- ↑ Evans, Ben (1 de noviembre de 2020). «Records Come to Java». blogs.oracle.com.
- ↑ Frankel, Nicolas (7 de diciembre de 2009). «Lombok reduces your boilerplate code». DZone.com. Consultado el 2 de agosto de 2017.
- ↑ «HTML Standard - The HTML syntax - Optional tags». WHATWG. 5 de mayo de 2017. Consultado el 5 de mayo de 2017.
- ↑ «Is the charset meta tag required with HTML5?». stackoverflow.com. Consultado el 5 de mayo de 2017.
- ↑ «Google HTML/CSS Style Guide». google.github.io (en inglés). Consultado el 5 de mayo de 2017.
- ↑ «HTML page has non-empty title». www.w3.org (en inglés). Consultado el 22 de julio de 2021.
- Lämmel, Ralf; Jones, Simon Peyton (2003). «Scrap your boilerplate: a practical design pattern for generic programming». Proceedings of the 2003 ACM SIGPLAN International Workshop on Types in Languages Design and Implementation. TLDI '03. New York: ACM. pp. 26-37. ISBN 9781581136494. S2CID 9472305. doi:10.1145/604174.604179.
- «Boilerplate». Dictionary.com. Consultado el 27 de enero de 2018.
- «Boilerplate». Merriam-Webster (en inglés). Consultado el 27 de enero de 2018.
- «Record Classes». docs.oracle.com.
- «JEP 395: Record». openjdk.org.
- Evans, Ben (1 de noviembre de 2020). «Records Come to Java». blogs.oracle.com.
- Frankel, Nicolas (7 de diciembre de 2009). «Lombok reduces your boilerplate code». DZone.com. Consultado el 2 de agosto de 2017.
- «HTML Standard - The HTML syntax - Optional tags». WHATWG. 5 de mayo de 2017. Consultado el 5 de mayo de 2017.
- «Is the charset meta tag required with HTML5?». stackoverflow.com. Consultado el 5 de mayo de 2017.
- «Google HTML/CSS Style Guide». google.github.io (en inglés). Consultado el 5 de mayo de 2017.
- «HTML page has non-empty title». www.w3.org (en inglés). Consultado el 22 de julio de 2021.