Articulo de referencia

plegado de código

Ejemplo de plegado de código en PHP con Vim El plegado de código o texto , o menos comúnmente el holofraseo , [ 1 ] es una función de algunas interfaces gráficas de usuario que ...

Ejemplo de plegado de código en PHP con Vim

El plegado de código o texto , o menos comúnmente el holofraseo , [ 1 ] es una función de algunas interfaces gráficas de usuario que permite ocultar ("plegar") o mostrar ("desplegar") selectivamente partes de un documento. Esto permite gestionar grandes cantidades de texto visualizando solo las subsecciones de interés. Se suele utilizar con documentos que tienen una estructura de árbol natural compuesta por elementos anidados. Otros nombres para estas funciones son expandir y contraer , ocultar código y esquematizar . En Microsoft Word , la función se denomina "esquematizar contraíble".

Muchas interfaces de usuario proporcionan widgets de divulgación para plegar el código en una barra lateral, indicados, por ejemplo, por un triángulo que apunta hacia los lados (si está contraído) o hacia abajo (si está expandido), o por un [-]cuadro para texto plegable (expandido) y un [+]cuadro para texto expandible (contraído).

El plegado de código se encuentra en editores de texto , editores de código fuente e IDE . La estructura de plegado generalmente sigue el árbol sintáctico del programa definido por el lenguaje de programación . También puede definirse mediante niveles de indentación o especificarse explícitamente mediante un marcador interno (guardado como parte del código fuente) o externo.

El plegado de texto es una función similar a la que se usa en texto normal, donde los elementos anidados consisten en párrafos, secciones o niveles de esquema . Algunos programas que ofrecen esta función son los editores de plegado , los generadores de esquemas y algunos procesadores de texto .

El plegado de datos se encuentra en algunos editores hexadecimales y se utiliza para estructurar un archivo binario u ocultar secciones de datos inaccesibles. [ 2 ]

El plegado también se utiliza con frecuencia en la comparación de datos , para seleccionar una versión u otra, o solo las diferencias.

Historia

El primer ejemplo conocido de plegado de código en un editor se encuentra en NLS . [ 3 ] Probablemente el primer editor de plegado ampliamente disponible fue el editor Structured Programming Facility (SPF) de 1974 para mainframes IBM 370 , que podía ocultar líneas según su indentación. Se mostraba en terminales 3270 con mapeo de caracteres. [ 4 ] Fue muy útil para lenguajes prolijos como COBOL . Evolucionó hasta convertirse en Interactive System Productivity Facility ( ISPF ).

Usar

El plegado de código tiene varios patrones de uso , principalmente para organizar el código u ocultar información menos útil para poder centrarse en la información más importante. A continuación se muestran algunos patrones comunes. [ 5 ]

Esquema

Básicamente, las aplicaciones utilizan el plegado de código para organizar el código fuente, reduciendo cada bloque a una sola línea. Esto puede aplicarse solo a bloques de nivel superior, como funciones y clases; a bloques anidados, como funciones y métodos anidados; o a todos los bloques, especialmente a los de control de flujo. Esto permite obtener una visión general del código, navegar y reorganizarlo fácilmente, y profundizar en los detalles según sea necesario, sin distracciones. En cuanto a la visualización, permite ver rápidamente una lista de todas las funciones (sin su cuerpo), mientras que en cuanto a la navegación, reemplaza la paginación extensa o la búsqueda del objetivo por la posibilidad de acceder directamente a la siguiente función.

Ocultar código estándar

Algunos lenguajes o bibliotecas requieren una gran cantidad de código repetitivo . Esto da como resultado un código extremadamente largo, que puede dificultar la comprensión del punto principal. Además, parte del código sustancial puede perderse entre el código repetitivo.

Por ejemplo, en Java, un único campo privado con un método getter y un método setter requiere al menos 3 líneas, si cada uno está en una línea separada:

private String nombre = null ; public String obtenerNombre ( ) { return nombre ; } public void establecerNombre ( String nombre ) { this.nombre = nombre ; }

Esto se expande a 10 líneas con saltos de línea de función convencionales y espaciado entre funciones (incluido el salto de línea final):

cadena privada nombre = null ;public String getName () { return nombre ; }public void setName ( String name ) { this . name = name ; }

La documentación con Javadoc amplía esto a 20 líneas:

/** * Propiedad <code>name</code> legible/escribible. */ private String name = null ;/** * Método getter para la propiedad <code>name</code> */ public String getName () { return name ; }/** * Método para establecer el nombre de la propiedad <code>name</code>. * @param name */ public void setName ( String name ) { this . name = name ; }

Si existen muchos campos de este tipo, el resultado puede ser fácilmente cientos de líneas de código con muy poco contenido "interesante". El plegado de código puede reducirlo a una sola línea por campo, o incluso a una sola línea para todos los campos. Además, si se pliegan todos los campos rutinarios, pero no los campos no rutinarios (donde el método getter o setter no se limita a devolver o asignar un valor a un campo privado), resulta más fácil visualizar el código principal.

Metadatos colapsados

Los metadatos pueden ser extensos y, por lo general, son menos importantes que los datos que describen. La agregación de metadatos permite centrarse principalmente en los datos, no en los metadatos. Por ejemplo, una larga lista de atributos en C# se puede agregar manualmente de la siguiente manera: [ 6 ]

#region Atributos [Navegable(false)] [PropiedadFusionable(false)] [ValorPredeterminado(null)] [ModoPersistencia(ModoPersistencia.PropiedadInterior)] [ContenedorTempla(tipo(MiTipo))] [InstanciaTempla(InstanciaTempla.Única)] #endregion public ITemplate ContentTemplate { obtener ; establecer ; }

El código resultante se muestra como:

Atributos públicos ITemplate ContentTemplate { obtener ; establecer ; }

Comentarios ocultos

Los comentarios son una forma de metadatos legibles para humanos, y los comentarios extensos pueden interrumpir el flujo del código. Esto puede ocurrir tanto con un comentario largo para una sección corta de código, como un párrafo para explicar una línea, como con comentarios para generadores de documentación , como Javadoc o la documentación XML . El plegado de código permite incluir comentarios largos, pero mostrarlos solo cuando sea necesario. En los casos en que un comentario largo tiene una sola línea de resumen, como en las cadenas de documentación de Python, el resumen se puede seguir mostrando incluso cuando la sección está contraída, lo que permite una vista resumida y detallada.

Mostrar la estructura o el código sándwich en la programación estructurada.

La programación estructurada consiste en bloques de código anidados, y los bloques de código largos, como las sentencias switch largas, pueden ocultar la estructura general. El plegado de código permite ver la estructura general y expandirla a un nivel específico. Además, en algunos usos, particularmente en la programación estructurada estricta (salida de una sola función), existen patrones de código que son difíciles de ver al observar el código expandido. Por ejemplo, en la gestión de recursos en la programación estructurada, generalmente se adquiere un recurso, seguido de un bloque de código que lo utiliza y finaliza con su liberación. El par adquisición/liberación es difícil de ver si hay un bloque de código largo entre ellos, pero es fácil de ver si el bloque intermedio está plegado. De manera similar, en el código condicional if...then...else, los bloques secundarios pueden estar lejos de la sentencia de condición.

Código de agrupación

Los grupos de pliegue se pueden usar para agrupar código, ya sea mediante una agrupación explícita, similar a los bloques de comentarios que separan un módulo en secciones o a los miembros de una clase en grupos asociados, o de forma implícita, como agrupando automáticamente a los miembros de una clase por nivel de acceso.

Ocultar código heredado

El código heredado, o cualquier código que un desarrollador no desee ver o modificar en un momento dado, se puede ocultar para que los programadores puedan concentrarse en el código que están analizando.

Ocultar tablas de datos en la fuente

Convenciones

Para admitir el plegado de código, el editor de texto debe proporcionar un mecanismo para identificar los "puntos de plegado" dentro de un archivo de texto. Algunos editores de texto proporcionan este mecanismo automáticamente, mientras que otros ofrecen configuraciones predeterminadas que el usuario puede modificar o ampliar.

Existen diversos mecanismos, que se dividen a grandes rasgos en automáticos y manuales. ¿Requieren alguna especificación por parte del programador? Los puntos de plegado suelen determinarse mediante uno o más de los siguientes mecanismos. Cada uno de ellos tiene sus propias ventajas y dificultades, y la decisión sobre cuál implementar recae fundamentalmente en los desarrolladores del editor de texto. Los editores de texto que admiten múltiples mecanismos de plegado suelen permitir al usuario elegir el más adecuado para el archivo que se está editando.

Dependiente de la sintaxis

Los puntos de plegado dependientes de la sintaxis son aquellos que se basan en el contenido del archivo que se está editando para especificar dónde deben comenzar y terminar las regiones de plegado. Los puntos de plegado basados ​​en la sintaxis suelen definirse en torno a una o varias de las características estándar del lenguaje de marcado o de programación en uso. Son deseables por ser automáticos y ajustarse a la estructura del código, pero su implementación puede requerir un trabajo considerable y tiempo de cálculo al editar un archivo.

Basado en indentación

Los puntos de plegado basados ​​en la indentación se especifican generalmente por la posición y la secuencia de los espacios en blanco no imprimibles, como tabulaciones y espacios, dentro del texto. Esto se utiliza con mayor frecuencia como una forma sencilla de plegado basado en la sintaxis, ya que la indentación casi siempre refleja el nivel de anidamiento en los estilos de indentación de los lenguajes de programación estructurados.

Esta convención es especialmente adecuada para sintaxis con una regla de sangría , de modo que la estructura coincide en gran medida con la sangría. Algunos ejemplos son Python y los archivos de texto que requieren sangría como regla general. Sin embargo, incluso en estos casos, la estructura no siempre coincide exactamente con la sangría, como en la continuación de línea , por lo que se prefiere el plegado dependiente de la sintaxis.

Basado en tokens

Los puntos de plegado basados ​​en tokens se especifican mediante delimitadores especiales que no tienen otra función en el texto que la de identificar los límites de dichos puntos. Esta convención se puede comparar con los puntos de plegado basados ​​en sangría, donde se utilizan caracteres imprimibles en lugar de espacios en blanco. Los tokens delimitadores más comunes son {{{para iniciar y}}} finalizar la sección plegada.

Otro token destacable son las directivas #regionde C# y las directivas #Regionde Visual Basic , utilizadas en el editor de código de Microsoft Visual Studio . Estas se tratan sintácticamente como directivas del compilador , aunque no afectan a la compilación.

Como método manual, el plegado basado en tokens permite discreción a la hora de agrupar el código en función de criterios arbitrarios, como "funciones relacionadas con una tarea determinada", que no se pueden inferir del análisis sintáctico.

El plegado basado en tokens requiere señalización interna, donde los tokens de plegado son esencialmente comentarios estructurados y, a diferencia de otros métodos, están presentes en el código fuente y son visibles para otros programadores. Esto permite compartirlos, pero también exige su uso (o conservación) por parte de todos los programadores que trabajan en un archivo en particular, lo que puede generar fricción y una mayor carga de mantenimiento.

Especificado por el usuario

El plegado especificado por el usuario permite plegar secciones de texto mediante un método de selección genérico, pero sin modificar el código fuente (de forma externa), sino que la configuración se especifica únicamente en el editor. Por ejemplo, un programador puede seleccionar algunas líneas de texto y especificar que se plieguen. El texto plegado puede ser anónimo o tener nombre, y esta configuración puede conservarse entre sesiones de edición o descartarse. A diferencia del plegado basado en tokens, este método no modifica el texto fuente; por lo tanto, no se comparte con otros editores del archivo y no es visible en el código.

Ejemplos

El siguiente documento contiene tokens de plegado ( {{{ ... }}}):

Encabezado 1 {{{ Cuerpo }}} Encabezado 2 {{{ Cuerpo }}} Encabezado 3 {{{ Cuerpo }}} 

Al cargarlo en un editor plegable, se mostrará la estructura del esquema:

Encabezado 1 {{{ ... Encabezado 2 {{{ ... Encabezado 3 {{{ ... 

Normalmente, al hacer clic en las {{{marcas aparece el texto correspondiente.

Software con capacidad de plegado de código

Uno de los primeros editores de plegado fue STET , un editor escrito para el sistema operativo VM/CMS en 1977 por Mike Cowlishaw . STET es un editor de texto (para documentación, programas, etc.) que pliega archivos en función de bloques de líneas; cualquier bloque de líneas puede plegarse y reemplazarse por una línea de nombre (que a su vez puede formar parte de un bloque que también puede plegarse).

Un editor plegable apareció en el IDE occam alrededor de 1983, que se llamaba Inmos Transputer Development System (TDS) [ 7 ] , . [ 8 ] El editor "f" (en la lista a continuación) es probablemente el legado más intacto de este trabajo.

Históricamente, el ordenador Macintosh contaba con varios editores de código fuente que "plegaban" porciones de código mediante " triángulos de divulgación ". El producto Frontier de UserLand Software es un entorno de scripting que dispone de esta capacidad. [ 9 ]

El plegado de texto lo ofrecen muchos editores de texto modernos, y el plegado basado en sintaxis o semántica es ahora un componente de muchos entornos de desarrollo de software . Algunos editores son:

Otros editores

Véase también

Notas

  1. http://flight-manual.atom.io/using-atom/sections/folding/
  2. El plegado basado en tokens se implementa mediante el modo menor de plegado . También se pueden usar los modos menores outline y allout para seccionar el código fuente del programa.
  3. Se puede utilizar laset-selective-displayfunción en Emacs para ocultar líneas según el nivel de indentación, como se sugiere en la nota sobre el plegado de código universal .
  4. El plegado dependiente de la sintaxis es compatible con los modos outline y allout para sintaxis de outline dedicadas especiales; con elmodo secundario hideshow para algunos lenguajes de programación; también, con el modo secundario semantic-tag-folding y elsenator-fold-tagcomando para sintaxis compatibles con semantic (un componente de CEDET) , así como con doc-mode paracomentarios JavaDoc o Doxygen , con TeX-fold-mode ,sgml-fold-elementcomando, biblioteca nxml-outln en los modos específicos de lenguaje correspondientes, y posiblemente en otros modos para sintaxis particulares. A veces, el modo secundario simple outline estándar se utiliza para simular el plegado basado en la sintaxis, cf. su uso en el código fuente de Emacs Lisp correctamente indentado, su uso (ver cerca del final de la página) para HTML correctamente indentado. Varios mecanismos de plegado están unificados por lainterfaz fold-dwim . Ver también CategoryHideStuff .
  5. El plegado de regiones seleccionadas por el usuario en Emacs se implementa mediante elhide-region-hidecomando.
  6. Estaset_selective_displayfunción puede utilizarse para ocultar líneas con una sangría superior a la especificada.
  7. STET pudo haber sido el primer editor de texto que admitía el plegado

Referencias

  1. Simon Gauvin, Omid Banyasad, "Transparencia, holofraseo y diseño automático aplicados a estructuras de control para lenguajes de programación de flujo de datos visuales", en Actas del simposio ACM de 2006 sobre visualización de software , págs. 67-75
  2. "HxD - Editor hexadecimal y editor de discos gratuito" . mh-nexus . Consultado el 30 de abril de 2007 .
  3. Marcel (9 de julio de 2012), "La madre de todas las demos, presentada por Douglas Engelbart (1968)" , YouTube , consultado el 29 de diciembre de 2019.
  4. Saint-flour, Gilbert (25 de junio de 1998). "Historia de la ISPF" . Planet MVS . Recuperado el 27 de octubre de 2015 .
  5. Atwood 2008 .
  6. Rob (19 de marzo de 2014). "Ahora bien, esto es interesante, porque tiendo a usar #region más para OCULTAR LA BASURA (documentación XML, listas largas de atributos, etc.), lo que facilita ver el código importante..." . El problema con el plegado de código . Discusión sobre horrores de la programación. Archivado del original el 6 de agosto de 2020.
  7. Grupo de Usuarios de Transputers de Norteamérica. Conferencia (2.ª : 1989 : Durham, NC) (1990). Investigación y aplicaciones de transputers, 2 : NATUG-2, actas de la Segunda Conferencia del Grupo de Usuarios de Transputers de Norteamérica, 18-19 de octubre de 1989, Durham, NC . Board, John A., Universidad de Duke. Ámsterdam: IOS Press. pág. 85. ISBN     9051990278OCLC 35478471 {{cite book}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
  8. Cormie, David (1986). "Nota técnica INMOS 03 - Primeros pasos con el TDS" (PDF) . transputer.net . Consultado el 19 de julio de 2019 .
  9. "Outliners.com" . Archivado del original el 23 de diciembre de 2006. Consultado el 27 de diciembre de 2006 .
  10. LEXX Un editor estructurado programable IBM Journal of Research and Development , Vol. 31, n.º 1, 1987, IBM Número de pedido de reimpresión G322-0151
  • Atwood, Jeff (6 de julio de 2008). "El problema del plegado de código" . Coding Horror : crítica del plegado de código, comentarios detallados sobre su uso.{{cite web}}: CS1 mantenimiento: postscript ( enlace )
  • ¿Qué es un editor plegable? Por el autor del feeditor.
  • Descripción del editor de plegado utilizado en occam .