stringtranslate.com

Fragmento (programación)

Ejemplo de un fragmento de código.

Un fragmento es un término de programación que designa una pequeña región de código fuente reutilizable , código de máquina o texto. Por lo general, se trata de unidades operativas definidas formalmente para incorporarlas en módulos de programación más grandes . La gestión de fragmentos es una característica de algunos editores de texto , editores de código fuente de programas , IDE y software relacionado . Permite al usuario evitar la escritura repetitiva en el curso de operaciones de edición de rutina. [1]

Definición

En la práctica de la programación, "fragmento" se refiere estrictamente a una porción de código fuente que un programa editor incluye literalmente en un archivo, y es una forma de programación de copiar y pegar . [2] Esta inclusión concreta contrasta con los métodos de abstracción, como las funciones o las macros , que son abstracciones dentro del lenguaje. Por lo tanto, los fragmentos se utilizan principalmente cuando estas abstracciones no están disponibles o no se desean, como en los lenguajes que carecen de abstracción, o por claridad y ausencia de sobrecarga.

Los fragmentos de código son similares a tener un preprocesamiento estático incluido en el editor y no requieren el soporte de un compilador. Por otro lado, esto significa que los fragmentos de código no se pueden modificar invariablemente después del hecho y, por lo tanto, son vulnerables a todos los problemas de la programación de copiar y pegar. Por este motivo, los fragmentos de código se utilizan principalmente para secciones simples de código (con poca lógica) o para texto repetitivo, como avisos de derechos de autor, prototipos de funciones, estructuras de control comunes o importaciones de bibliotecas estándar.

Descripción general

La gestión de fragmentos es una característica del editor de texto popular entre los desarrolladores de software u otras personas que requieren de forma rutinaria contenido de un catálogo de texto ingresado repetidamente (como código fuente o código repetitivo ). A menudo, esta característica se justifica porque el contenido varía solo levemente (o no varía en absoluto) cada vez que se ingresa.

Fragmentos en editores de texto

Los editores de texto que incluyen esta característica normalmente proporcionan un mecanismo para administrar el catálogo y los "fragmentos" separados de la misma manera que el editor de texto y el sistema operativo permiten la administración de archivos separados. Estas capacidades básicas de administración incluyen operaciones como ver, agregar, editar, eliminar, ordenar, filtrar, agrupar, renombrar y almacenar fragmentos en un repositorio , catálogo o base de datos . Algunos editores proporcionan una capacidad macro para los fragmentos que permite generar prototipos de funciones y estructuras de control de variables en función de una plantilla estándar.

Fragmentos en IDE

Algunas aplicaciones de programación como Eclipse , NetBeans y Visual Studio de Microsoft (que utiliza fragmentos inspirados en TextMate ) y otros IDE incluyen partes de estructura integradas para facilitar la codificación.

Otras aplicaciones como Macromedia Dreamweaver también utilizan estos fragmentos de código para el desarrollo web .

Fragmentos de código en compiladores JIT

Los compiladores Just-in-time ( JIT ) pueden "unir" secciones de código precompiladas como segmentos de código de objeto o código de máquina más largos . Esto reduce significativamente el tiempo de interpretación y, al mismo tiempo, acelera la ejecución.

Ejemplo animado que demuestra el uso de un fragmento de código en PowerShell ISE

Fragmentos en shells

Los fragmentos de código se pueden utilizar dentro de interfaces de línea de comandos como bash, zsh ( GNU Linux /similar a Unix) o powershell ( MS Windows ). Es posible que se admitan o no funciones como la finalización y la sustitución de marcadores de posición.

Ejemplo

Considere el proceso de intercambiar los valores de dos variables, x e y. Suponiendo que se utiliza un tipo débil y sin preocuparse por la colisión de nombres, esto se representa mediante el código:

temperatura = xx = yy = temperatura

Cuando se inserta el fragmento, se le solicita al programador los valores de los dos parámetros. Suponiendo que sean de tipo fooy bar, que son los nombres reales de las variables que desean intercambiar, esto generará el código:

temperatura = foofoo = barrabarra = temperatura

Si el fragmento se modifica posteriormente, por ejemplo para usar __tempen lugar de temp, no cambiará el código que ya se ha insertado, pero se usará en inserciones posteriores del fragmento.

Un fragmento de esto podría representarse así:

temperatura = $1$1 = $2$2 = temperatura

Convenciones

Además de las capacidades básicas de administración descritas anteriormente, las funciones de administración de fragmentos se pueden clasificar según el alcance de interactividad entre los fragmentos y el editor de texto o la aplicación que los aloja.

Estos grupos de funciones de fragmentos incluyen:

Estático
Los fragmentos de código de este tipo consisten principalmente en texto fijo que el usuario puede elegir insertar en el documento actual. El usuario no puede especificar nada más, excepto quizás la posición del cursor en relación con el texto recién insertado. Los fragmentos de código estáticos son similares a las macros simples , con la excepción de que las macros suelen evaluarse (o insertarse) mediante un programa de línea de comandos en lugar de IDE.
Dinámica
Los fragmentos de código consisten en texto fijo combinado con elementos dinámicos (marcadores de posición) que pueden ser modificados por el editor o por el usuario. El usuario puede especificar tanto el contenido de los elementos dinámicos como su posición relativa al texto fijo, como parte de la elección de lo que se insertará en el documento actual. Algunos ejemplos de elementos dinámicos podrían ser variables como la fecha actual o la hora del sistema, o la entrada del usuario que se proporciona a través de una GUI, o la entrada de otra aplicación. (ver también: macro programable ).
Scriptable
Los fragmentos de código consisten en segmentos de código ejecutables en un lenguaje de macros o de secuencias de comandos . Los fragmentos de código ejecutables proporcionan el mayor grado de flexibilidad al usuario, aunque eso depende en cierta medida de los lenguajes de programación compatibles con el editor de texto y de si el lenguaje de programación es conocido o particular y exclusivo de ese editor específico.

El tipo de soporte de scripts varía, pero puede incluir características como ejecutar comandos de shell , proporcionar un cuadro de diálogo GUI u otros métodos de interacción del usuario con el sistema operativo; otras aplicaciones; u otros subcomponentes de la propia aplicación de alojamiento.


Marcadores de posición de fragmentos

Los marcadores de posición son elementos dentro de un fragmento de código que el usuario u otro proceso externo deben proporcionar. Los valores de los marcadores de posición no se determinan hasta que se inserta el texto del fragmento de código durante una sesión de edición.

Los marcadores de posición pueden tener una sintaxis de marcado especial que permite al editor identificar los límites de los marcadores de posición en relación con el resto del texto en el búfer de edición actual.

Otras aplicaciones emplean interfaces gráficas de usuario y cuadros de diálogo modales que permiten al usuario ingresar uno o más valores que se proporcionarán para los marcadores de posición.

Identificadores de marcador de posición

Los marcadores de posición suelen indicarse mediante algún carácter especial o secuencia de caracteres para distinguirlos del resto del texto del fragmento. Algunos sistemas permiten que los marcadores de posición de fragmentos se denominen identificadores . Los identificadores pueden resultar útiles para admitir funciones como la duplicación o la transformación de marcadores de posición.

El siguiente ejemplo utiliza los identificadores first_name, last_name, y item:

Hola {% first_name %} {% last_name %} , Su envío de {% item %} ya está listo para ser recogido.¡Gracias {% first_name %} !

Ejemplo de un fragmento en sintaxis TexMate :

Hola ${ 1 : nombre } ${ 2 : apellido } ,  Su  envío  de ${ 3 : item } ya está listo para ser recogido .       ¡Gracias ${ 4 : first_name } ! 

Duplicación de marcador de posición

Esto permite al usuario indicar que el valor suministrado para un marcador de posición debe replicarse en varios lugares, en relación con todo el texto del fragmento programable. En el ejemplo anterior, el marcador de posición nombrado first_namees un ejemplo de este uso.

Transformación de marcador de posición

Esto permite al usuario indicar que uno o más valores suministrados para un marcador de posición deben replicarse y transformarse en otros lugares dentro del texto del fragmento programable. Por ejemplo, el usuario puede suministrar un título de documento en una parte del fragmento y especificar que el título del documento debe repetirse en otros lugares, con la primera instancia en mayúsculas y todas las demás instancias en minúsculas.

Funciones de programación de fragmentos

En el caso de las aplicaciones que admiten fragmentos de código programables , la gama de funciones de programación admitidas varía. A continuación, se enumeran algunas de las funciones que se implementan habitualmente para los fragmentos de código programables.

Texto simple

Aunque el texto simple es una característica fundamental incluida incluso en aplicaciones que solo admiten fragmentos "estáticos" no programables, los fragmentos programables también se utilizan para trabajar con texto simple.

Sin embargo, una complicación habitual es que los entornos que admiten fragmentos programables a menudo tienen que hacer distinciones entre lo que se considera "texto sin formato" y lo que se considera "instrucciones de programación". Para complicar aún más esta distinción, las aplicaciones que admiten fragmentos programables casi siempre incluyen compatibilidad con el reconocimiento de varios lenguajes de programación, ya sea mediante el resaltado de sintaxis básica o la ejecución de comandos integrados.

Por estas y otras razones, emitir texto simple desde fragmentos programables casi siempre implica tener cuidado para evitar problemas con la sintaxis y colisiones de delimitadores .

Constantes y variables

Los fragmentos programables suelen incluir la capacidad de establecer un enlace a un ámbito de variable o espacio de nombres existente, desde el cual el usuario puede seleccionar cualquiera de varias constantes o variables. Estas pueden incluir valores como la dirección de correo electrónico del usuario que ha iniciado sesión en una máquina determinada, la fecha y hora actuales del sistema o el valor de salida de una función.

Los fragmentos de código que se pueden programar suelen estar asociados a uno o más archivos activos en ese momento. En consecuencia, las variables también pueden incluir variables de entorno y argumentos que especifican el nombre del archivo, la posición del cursor y el directorio principal, entre otras estadísticas relacionadas con los archivos en una sesión de edición actual.

Código interpretado

Los fragmentos de código que se pueden programar pueden permitir la ejecución de código en uno o más lenguajes de programación . Esto puede incluir uno o más lenguajes independientes o un lenguaje específico de la aplicación en la que se aloja el lenguaje.

Alternativas

La alternativa más básica a los fragmentos de código son las subrutinas en bibliotecas. Las subrutinas se pueden incorporar a una biblioteca de software reutilizable y compartir entre varios proyectos de programación.

Los patrones de diseño en la programación orientada a objetos y la programación funcional son técnicas que permiten a los programadores evitar o reducir la práctica de insertar repetidamente fragmentos en diferentes fragmentos de código con ligeras variaciones cada vez. En los lenguajes de la familia C , a veces se utilizan preprocesadores para este propósito.

Sin embargo, la desventaja de este enfoque es que es más difícil recordar patrones o documentación.

Asistencia de software

A partir de 2021, surgieron algunas herramientas sofisticadas de aprendizaje profundo que pueden ayudar a inferir una funcionalidad específica a partir de un texto legible por humanos y generar fragmentos de código fuente correspondientes (por ejemplo, GitHub Copilot ). [3] [4]

Véase también

Referencias

  1. ^ "Gedit/Plugins/Snippets". Archivado desde el original el 25 de agosto de 2012. Consultado el 9 de enero de 2010 .Ejemplo de la función en el editor Gedit.
  2. ^ Kim, Miryung; Bergman, Lawrence; Lau, Tessa; Notkin, David (2004). "Un estudio etnográfico de las prácticas de programación de copiar y pegar en OOPL" (PDF) . Actas: Simposio internacional de 2004 sobre ingeniería de software empírica, ISESE 2004: 19-20 de agosto de 2004, Redondo Beach, California . Los Alamitos, CA: IEEE . págs. 83-92. ISBN. 978-0-7695-2165-7. OCLC  326620442. Archivado desde el original (PDF) el 19 de octubre de 2016 . Consultado el 18 de octubre de 2016 . Para cada instancia de C&P, también notamos la relación entre un fragmento de código copiado y el código en otra parte de la base de código.
  3. ^ HM LE, TRIET; CHEN, HAO; ALI BABAR, MUHAMMAD (2021). "Aprendizaje profundo para modelado y generación de código fuente". Encuestas de computación de ACM . 53 (3). La Universidad de Adelaida: 1–38. arXiv : 2002.05442 . doi :10.1145/3383458. S2CID  211096967.
  4. ^ "GitHub presenta una nueva herramienta de inteligencia artificial que hace sugerencias de codificación". TechCrunch . 29 de junio de 2021 . Consultado el 25 de julio de 2021 .