En la programación de ordenadores, código repetitivo o simplemente repetitivo son secciones de código que se repiten en múltiples lugares con poca o ninguna variación. Cuando se utilizan lenguajes que se consideran detallados , el programador debe escribir una gran cantidad de código para lograr solo una funcionalidad menor. Este código se llama repetitivo . [1]
La necesidad de repetición puede reducirse 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 la configuración (que proporciona buenos valores predeterminados, reduciendo la necesidad de especificar el programa). detalles en cada proyecto) e ingeniería basada en modelos (que utiliza modelos y generadores de modelo a código, eliminando la necesidad de un código repetitivo manual).
Origen
El término surgió del negocio de los periódicos . Las columnas y otras piezas que fueron distribuidas por los sindicatos de impresión se enviaron a los periódicos suscriptores en forma de planchas de impresión preparadas . Debido a su parecido con las placas de metal utilizadas en la fabricación de calderas , se las conoció como "placas de caldera", y su texto resultante - "texto repetitivo". Como las historias que se distribuían por medio de placas de calderas eran generalmente " rellenos " en lugar de noticias "serias", el término se convirtió en sinónimo de texto repetido y poco original. [2] [3]
Un término relacionado es el 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 actualizadas las estructuras de datos o manejar aspectos secundarios del programa.
Preámbulo
Una forma de repetición consiste en declaraciones que, aunque no forman parte de la lógica del programa o de la sintaxis esencial del lenguaje , se agregan al inicio de un archivo fuente como una cuestión de costumbre. El siguiente ejemplo de Perl demuestra un modelo estándar:
#! / usr / bin / perl use advertencias ; uso estricto ;
La primera línea es un shebang , que identifica el archivo como un script de Perl que se puede ejecutar directamente en la línea de comandos (en sistemas Unix / Linux). Los otros dos son pragmas que activan las advertencias y el modo estricto, que son obligatorios por el moderno Perl. estilo de programación .
El siguiente ejemplo es una repetición del lenguaje de programación C / C ++ , #include
guard .
#ifndef MYINTERFACE_H #define MYINTERFACE_H...#terminara si
Esto verifica y configura una bandera global para decirle al compilador si el archivo myinterface.h ya se ha incluido. Como muchos archivos interdependientes pueden estar involucrados en la compilación de un módulo, esto evita procesar el mismo encabezado varias veces (lo que daría lugar a errores debido a múltiples definiciones con el mismo nombre).
En programación orientada a objetos
En los programas orientados a objetos , las clases a menudo se proporcionan con métodos para obtener y establecer variables de instancia. Las definiciones de estos métodos a menudo se pueden considerar repetitivas. Aunque el código variará de una clase a otra, su estructura es lo suficientemente estereotipada como para que sea mejor generado automáticamente que escrito a mano. Por ejemplo, en la siguiente clase de Java que representa una mascota, casi todo el código es estándar, excepto las declaraciones de mascota , nombre y propietario :
Public class Pet { nombre de cadena privada ; propietario de persona privada ; Public Pet ( nombre de la cadena , propietario de la persona ) { this . nombre = nombre ; esto . propietario = propietario ; } public String getName () { nombre de retorno ; } setName public void ( nombre de cadena ) { this . nombre = nombre ; } persona pública getOwner () { propietario de devolución ; } public void setOwner ( Propietario de la persona ) { this . propietario = propietario ; } }
La mayor parte del texto estándar en este ejemplo existe para proporcionar encapsulación . Si el nombre y el propietario de las variables se declararan públicos , los métodos de acceso y mutador no serían necesarios.
Para reducir la cantidad de texto estándar, se han desarrollado muchos marcos, por ejemplo, Lombok para Java. [4] El mismo código anterior es generado automáticamente por Lombok usando anotaciones de Java , que es una forma de metaprogramación :
@AllArgsConstructor @Getter @Setter public class Pet { nombre de cadena privada ; propietario de persona privada ; }
En algunos otros lenguajes de programación, puede ser posible lograr lo mismo con menos repetición, cuando el lenguaje tiene soporte incorporado para construcciones tan comunes. Por ejemplo, el equivalente del código Java anterior se puede expresar en Scala usando solo una línea de código:
clase de caso Pet ( nombre de var : String , propietario de var : Person )
O en C # usando Propiedades automáticas con campos de respaldo generados por el compilador:
Public class Pet { public string Name { get ; establecer ; } propietario de la persona pública { get ; establecer ; } }
Método repetitivo
Además de las declaraciones, los métodos en los lenguajes de programación orientada a objetos también contribuyen a la cantidad de texto estándar. Un estudio de 2015 sobre proyectos populares de Java muestra que el 60% de los métodos se pueden identificar de forma única por la aparición del 4,6% de sus tokens, lo que hace que el 95,4% restante sea irrelevante para la lógica. Los investigadores creen que este resultado se traduciría en subrutinas en los lenguajes de procedimientos en general. [5]
HTML
En HTML , el siguiente texto estándar se utiliza como una plantilla vacía básica y está presente en la mayoría de las páginas web:
< html lang = "en" > < head > < meta charset = "UTF-8" /> < title > Prueba title > head > < body >cuerpo > html >
El estándar de vida HTML de WHATWG define que las etiquetas ,
y
pueden omitirse de forma segura en la mayoría de las circunstancias. [6] La
etiqueta también puede omitirse si el servidor web está configurado correctamente para enviar la codificación de caracteres junto con el tipo de contenido. [7] Google 's HTML / CSS guía de estilo recomienda que se omiten todas las etiquetas opcionales, [8] que resulta en un texto modelo mucho más compacto (por el W3C [9] elemento
no debe estar vacío, comprobar Nu HTML del inspector [10] ):
< título > Prueba título >
Ver también
- Directiva (programación) : construcción de lenguaje que especifica cómo un compilador debe procesar su entrada
- Procesador de macros de uso general: procesador de macros que no está vinculado ni integrado con un lenguaje o pieza de software en particular.
- "¡Hola Mundo!" programa : programa informático tradicional para principiantes
- Biblioteca (informática) : colección de recursos no volátiles utilizados por programas informáticos, a menudo para el desarrollo de software.
- Macro (informática) : en informática, una representación concisa de un patrón
- Preprocesador : programa que procesa la entrada para otro programa
- Fragmento (programación) : una pequeña región de código fuente, código de máquina o texto reutilizables
- Procesador de plantillas : software diseñado para combinar plantillas con un modelo de datos para producir documentos de resultados.
- Sistema de plantillas web : sistema de publicación web que permite a los diseñadores y desarrolladores web trabajar con plantillas web para generar automáticamente páginas web personalizadas.
- Scaffold (programación) : una técnica de generación de código o una técnica de generación de proyectos
Referencias
- ^ Lämmel, Ralf; Jones, Simon Peyton (2003). "Deseche su calderería: un patrón de diseño práctico para la programación genérica" . Actas del Taller Internacional ACM SIGPLAN 2003 sobre Tipos en Diseño e Implementación de Idiomas . TLDI '03. Nueva York: ACM . págs. 26–37. doi : 10.1145 / 604174.604179 . ISBN 9781581136494. S2CID 9472305 .
- ^ "Repetición" . Dictionary.com . Consultado el 27 de enero de 2018 .
- ^ "Repetición" . Merriam-Webster . Consultado el 27 de enero de 2018 .
- ^ Frankel, Nicolas (7 de diciembre de 2009). "Lombok reduce su código repetitivo" . DZone.com . Consultado el 2 de agosto de 2017 .
- ^ Martín Vélez; Dong Qiu; Tú, Zhou; Earl T. Barr; Zhendong Su (5 de febrero de 2015). "Sobre la distinción léxica del código fuente [fue: un estudio de" trigo "y" paja "en el código fuente]". arXiv : 1502.01410 [ cs ]. Parámetro desconocido
|url=
ignorado ( ayuda ) - ^ "Estándar HTML - La sintaxis HTML - Etiquetas opcionales" . WHATWG . 2017-05-05 . Consultado el 5 de mayo de 2017 .
- ^ "¿Se requiere la metaetiqueta charset con HTML5?" . stackoverflow.com . Consultado el 5 de mayo de 2017 .
- ^ "Guía de estilo HTML / CSS de Google" . google.github.io . Consultado el 5 de mayo de 2017 .
- ^ "W # C" . www.w3.org .
- ^ "Verificador Nu Html" . validator.w3.org .