El plegado de código es una característica de algunos editores de texto , editores de código fuente e IDE que permite al usuario ocultar y mostrar selectivamente - "plegar" - secciones de un archivo editado actualmente como parte de las operaciones de edición de rutina. Esto permite al usuario administrar grandes cantidades de texto mientras ve solo aquellas subsecciones del texto que son específicamente relevantes en un momento dado.
La identificación de pliegues puede ser automática, la mayoría de las veces basada en la sintaxis del lenguaje de computadora en cuestión, sangría o manual, ya sea en base a un marcador en banda (guardado como parte del código fuente) o fuera de banda especificado. solo dentro del editor.
Muchos editores proporcionan widgets de divulgación para el plegado de código en una barra lateral, junto a los números de línea, 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 contraíble (expandido) y un [+]
cuadro para texto expandible (contraído). Algunos programadores informáticos utilizan habitualmente esta función para gestionar archivos de código fuente , y también se utiliza con frecuencia en la comparación de datos , para ver únicamente el texto modificado.
El plegado de texto es una función similar que se utiliza en editores plegables , delineadores y algunos procesadores de texto , pero se utiliza para texto normal y, si es automático, se basa en la sintaxis de los lenguajes humanos, en particular párrafos o niveles de sección, en lugar de la sintaxis de una computadora. idioma. Otra variante del plegado de código es el "plegado de datos", que se implementa en algunos editores hexadecimales y se utiliza para estructurar un archivo binario u ocultar secciones de datos inaccesibles en un editor de RAM. [1] Existen varios términos alternativos para tales características, que incluyen "expandir y contraer", "ocultar código" y "esquematizar". En Microsoft Word, la función se llama "esquema plegable".
Historia
El primer ejemplo conocido de plegado de código en un editor está en NLS (sistema informático) . [2] Probablemente el primer editor plegable ampliamente disponible fue el editor de 1974 Structured Programming Facility (SPF) para mainframes IBM 370, que podía ocultar líneas en función de su sangría. Se muestra en terminales 3270 con mapas de caracteres. [3] Fue muy útil para lenguajes prolijos como COBOL . Se convirtió en la Instalación de productividad del sistema interactivo ( ISPF ).
Usar
El plegado de código tiene varios patrones de uso , principalmente organizar el código u ocultar información menos útil para que uno pueda concentrarse en información más importante. Siguen patrones comunes. [4]
Delineando
Básicamente, las aplicaciones usan el plegado de código para delinear el código fuente, colapsando cada bloque en una sola línea. Esto puede ser solo bloques de nivel superior como funciones y clases, bloques anidados como funciones y métodos anidados, o todos los bloques, en particular bloques de flujo de control. Esto le permite a uno obtener una descripción general del código, navegar y reorganizarlo fácilmente, y profundizar en más detalles según sea necesario, sin distraerse con otro código. En cuanto a la visualización, esto le permite a uno ver rápidamente una lista de todas las funciones (sin sus cuerpos), mientras que en cuanto a la navegación, esto reemplaza la paginación extensa más allá de las funciones largas, o la búsqueda del objetivo, con ir directamente a la siguiente función.
Ocultar código repetitivo
Algunos lenguajes o bibliotecas requieren un extenso código repetitivo . Esto da como resultado un código extremadamente largo, que puede oscurecer el punto principal. Además, el código sustantivo se puede perder en el texto estándar.
Por ejemplo, en Java, un solo campo privado con un getter y setter requiere al menos 3 líneas, si cada una está en una línea separada:
nombre de cadena privada = nulo ; public String getName () { nombre de retorno ; } public void setName ( nombre de cadena ) { this . nombre = nombre ; }
Esto se expande a 10 líneas con saltos de línea de función convencionales y espaciado entre funciones (incluida la nueva línea final):
nombre de cadena privada = nulo ; public String getName () { nombre de retorno ; } setName public void ( nombre de cadena ) { this . nombre = nombre ; }
La documentación con Javadoc amplía esto a 20 líneas:
/ ** * Propiedad nombre
legible / escribible. * / nombre de cadena privada = nulo ; / ** * Getter para la propiedad nombre
* / public String getName () { return name ; }/ ** * Setter para la propiedad nombre
. * @param name * / public void setName ( String name ) { this . nombre = nombre ; }
Si hay 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 reducir esto 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 de rutina, pero los campos que no son de rutina (donde el captador o el definidor no solo regresa o asigna un campo privado) no se pliegan, es más fácil ver el código sustantivo.
Colapsar metadatos
Los metadatos pueden ser largos y, por lo general, son menos importantes que los datos que describen. El colapso de metadatos permite centrarse principalmente en los datos, no en los metadatos. Por ejemplo, una lista larga de atributos en C # puede colapsarse manualmente de la siguiente manera: [5]
#region Attributes [Browsable (false)] [MergableProperty (false)] [DefaultValue (null)] [PersistenceMode (PersistenceMode.InnerProperty)] [TemplateContainer (typeof (MyType))] [TemplateInstance (TemplateInstance.Single)] #endregion public ITemplate ContentTemplate { get { return _temp ; } establecer { _temp = valor ; } }
El código resultante se muestra como:
AtributosPublic ITemplate ContentTemplate{ get {return _temp; } establecer {_temp = valor; }}
Colapsando comentarios
Los comentarios son una forma de metadatos legibles por humanos y los comentarios largos pueden interrumpir el flujo del código. Este puede ser el caso de un comentario largo para una sección corta de código, como un párrafo para explicar una línea, o comentarios para generadores de documentación , como Javadoc o Documentación XML . El plegado de código permite tener comentarios largos, pero mostrarlos solo cuando sea necesario. En los casos en los que un comentario largo tiene una sola línea de resumen, como las cadenas de documentación de Python, el resumen aún se puede mostrar cuando la sección está contraída, lo que permite una vista de resumen / detallada.
Mostrar estructura o código sándwich en programación estructurada
La programación estructurada consta de bloques de código anidados, y bloques de código largos, como declaraciones de conmutación largas, pueden oscurecer la estructura general. El plegado de código permite ver la estructura general y expandirse a un nivel específico. Además, en algunos usos, en particular la programación estructurada estricta (salida de función única), hay patrones de código que son difíciles de ver cuando se mira 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 usa el recurso y termina con la liberación del recurso. Es difícil ver el emparejamiento de adquisición / liberación si hay un bloque largo de código en el medio, pero es fácil ver si el bloque intermedio está plegado. De manera similar, en el código condicional como if...then...else
, los bloques secundarios pueden estar lejos de la declaración de condición.
Código de agrupación
Los grupos de plegado se pueden usar para agrupar el código, ya sea mediante agrupación explícita, similar a los bloques de comentarios que separan un módulo en secciones, o miembros de la clase en grupos asociados, o implícitamente, como agrupando automáticamente a los miembros de la clase por nivel de acceso.
Ocultar código heredado
El código heredado, o cualquier código que un desarrollador no desee ver o cambiar en un momento determinado, se puede plegar para que los programadores puedan concentrarse en el código en consideración.
Ocultar tablas de datos de origen
Convenciones
Para admitir el plegado de código, el editor de texto debe proporcionar un mecanismo para identificar "puntos de plegado" dentro de un archivo de texto. Algunos editores de texto proporcionan este mecanismo automáticamente, mientras que otros proporcionan valores predeterminados que el usuario puede anular o aumentar.
Hay varios mecanismos, divididos a grandes rasgos en automáticos y manuales, ¿requieren alguna especificación por parte del programador? Los puntos de plegado generalmente se determinan con uno o más de los siguientes mecanismos. Cada uno de estos tiene sus propias ventajas y dificultades distintas, y esencialmente depende de los desarrolladores que crean el software de edición de texto decidir cuál implementar. Los editores de texto que brindan soporte para múltiples mecanismos de plegado generalmente permiten al usuario elegir cuál es el más apropiado para el archivo que se está editando.
Depende de la sintaxis
Los puntos de plegado dependientes de la sintaxis son aquellos que dependen del contenido del archivo que se está editando para especificar dónde deben comenzar y terminar las regiones de plegado específicas. Los puntos de plegado basados en sintaxis se definen típicamente alrededor de cualquiera o todas las subcaracterísticas estándar del lenguaje de marcado o lenguaje de programación en uso. Estos son deseables debido a que son automáticos y están de acuerdo con la estructura del código, pero pueden requerir un trabajo significativo para implementar y tiempo para calcular al editar un archivo.
Basado en sangría
Los puntos de plegado basados en sangría se especifican generalmente por la posición y secuencia de los espacios en blanco que no se imprimen, como tabulaciones y espacios, dentro del texto. Esto se usa con mayor frecuencia como una forma simple de plegado basado en sintaxis, ya que la sangría casi siempre refleja el nivel de anidación en los estilos de sangría para lenguajes de programación estructurados.
Esta convención es particularmente adecuada para sintaxis que tienen una regla de fuera de juego , por lo que la estructura concuerda en gran medida con la sangría. Los ejemplos incluyen Python y archivos de texto que requieren sangría como regla por sí mismos. Sin embargo, incluso en estos casos, la estructura no coincide exactamente con la sangría, como la continuación de línea , y por lo tanto se prefiere el plegado dependiente de la sintaxis.
Basado en token
Los puntos de plegado basados en fichas se especifican mediante delimitadores especiales que no tienen otro propósito en el texto que identificar los límites de los puntos de plegado. 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 {{{
comenzar la sección plegada y }}}
finalizarla.
Otro token notable es #region
( directivas de C # ), respectivamente #Region
( directivas de Visual Basic ), que se utiliza en Microsoft Visual Studio Code Editor . 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 en la agrupación de 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 en banda, y 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 que se compartan, pero también requiere su uso (o conservación) por parte de todos los programadores que trabajan en un archivo en particular, y puede causar fricciones y una carga de mantenimiento.
Usuario especificado
El plegado especificado por el usuario permite al usuario plegar secciones de texto utilizando un método de selección genérico, pero sin cambiar el código fuente (fuera de banda), sino que se especifica solo en el editor. Por ejemplo, un programador puede seleccionar algunas líneas de texto y especificar que se deben plegar. El texto plegado puede ser anónimo o con nombre, y puede conservarse en las sesiones de edición o descartarse. A diferencia del plegado basado en tokens, esto no cambia el texto fuente; por lo tanto, no se comparte con otros editores del archivo y no es visible en el código.
Ejemplos de
El siguiente documento contiene fichas plegables ( {{{ ... }}}
):
Título 1 {{{ Cuerpo }}} Título 2 {{{ Cuerpo }}} Título 3 {{{ Cuerpo }}}
Cuando se carga en un editor de plegado, se mostrará la estructura del esquema:
Título 1 {{{... Título 2 {{{... Título 3 {{{...
Por lo general, al hacer clic en las {{{
marcas, aparece el texto del cuerpo apropiado.
Software con capacidad de plegado de código
Uno de los primeros editores plegables 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 sobre la base de bloques de líneas; cualquier bloque de líneas se puede plegar y reemplazar por una línea de nombre (que a su vez puede ser parte de un bloque que a su vez se puede plegar).
Un editor de plegado aparecido en el Occam IDE alrededor del año 1983, que fue llamado el Sistema de Desarrollo Transputer Inmos (TDS) [6] , . [7] El editor "f" (en la lista siguiente) probablemente sea el legado más intacto de este trabajo.
El Macintosh ordenador históricamente tenía un número de editores de código fuente que "plegadas" porciones de código a través de " divulgación triángulos". El producto de UserLand Software Frontier es un entorno de scripting que tiene esta capacidad. [8]
Muchos editores de texto modernos proporcionan el plegado, y el plegado basado en sintaxis o semántica es ahora un componente de muchos entornos de desarrollo de software . Los editores incluyen:
Nombre | Simbólico | Sangría | Sintaxis | Usuario |
---|---|---|---|---|
Editor ABAP | sí | ? | sí | ? |
AkelPad | ? | ? | sí | ? |
IDE de Anjuta | ? | sí | sí | ? |
Átomo [a] | ? | sí | ? | sí |
BBEditar | ? | ? | sí | ? |
Soportes | Enchufar | sí | sí | No |
Codificar en cualquier lugar | sí | sí | sí | ? |
Codenvy | sí | sí | sí | ? |
Código :: Bloques IDE | sí | sí | sí | sí |
CudaText | ? | ? | ? | ? |
IDE de Delphi | sí | ? | sí | ? |
Dreamweaver | ? | ? | ? | sí |
Eclipse | ? | ? | sí | ? |
EditPlus | No | sí | No | No |
Emacs | Si [b] | ? [C] | Sí [d] | Sí [e] |
EmEditor Professional | ? | sí | sí | ? |
IDE de FlashDevelop | ? | ? | sí | ? |
geany | ? | ? | sí | ? |
gedit | sí | sí | sí | ? |
ISPF | ? | sí | ? | sí |
JED | sí | Si [f] | ? | No |
jEdit | sí | sí | sí | sí |
Kate | sí | sí | sí | sí |
MATLAB | No | No | sí | No |
MS Visual Studio | sí | sí | sí | sí |
IDE de NetBeans | sí | sí | sí | sí |
Bloc de notas ++ | ? | sí | sí | sí |
NuSphere PHPEd | ? | ? | sí | sí |
Creador de Qt | ? | ? | sí | ? |
Ciencia | sí | sí | sí | ? |
STET [g] | ? | ? | ? | ? |
TextMate | sí | sí | sí | sí |
UltraEdit | No | No | sí | sí |
Empuje | sí | sí | sí | sí |
Experto visual | ? | ? | sí | ? |
Código de Visual Studio | sí | sí | sí | No |
Xcode | sí | sí | sí | sí |
Estudio Zend | ? | ? | ? | ? |
Otros editores
- aoeui, el editor optimizado de Dvorak
- Software de gestión de contenido de componentes y autoría empresarial Author-it
- Pescado azul
- Delphi
- Emacs
- f (alias xf, Winf, Winf32)
- Editor de texto plegable
- BÁSICO DE GFA
- Bloc de notas GridinSoft
- IntelliJ IDEA (y el IDE de otros JetBrains )
- Fundamental
- Komodo Editar
- Kwrite
- León
- LEXX / LPEX (editor del OED ) [9]
- MonoDevelop
- NoteTab Pro
- Capellán
- Editor de texto RJ
- Smultron
- El editor de Hessling
- Estudio visual
- WinShell (desde la versión 3.30)
- XEDIT (sin embargo, su plegado se realiza mediante scripts)
- Zeus
Notas
- ^ http://flight-manual.atom.io/using-atom/sections/folding/
- ^ El plegado basado en fichas se implementa mediante el modo de plegado menor . También se puede utilizar contorno y AllOut modos menores para seccionar fuentes de programas.
- ^ Se puede usar la
set-selective-display
función en Emacs para ocultar líneas según el nivel de sangría, como se sugiere en lanota plegable de código universal . - ^ El plegado dependiente de la sintaxis es compatible con losmodos de contorno y allout parasintaxis de contorno dedicadas especiales; por elmodo menor de hideshow para algunos lenguajes de programación; también, por elmodo menor de plegado de etiquetas semánticas y el
senator-fold-tag
comando para sintaxis compatible con semántica (un componente de CEDET) , así como por el modo doc paracomentarios de JavaDoc o Doxygen , por TeX-fold-mode ,sgml-fold-element
command, nxml- outln en los modos específicos del lenguaje correspondiente, y posiblemente en otros modos para sintaxis particulares. A veces, elmodo menor de esquema simple estándarse utiliza para simular el plegado basado en sintaxis, cf. el uso de él en el código fuente de Emacs Lisp correctamente sangrado, el uso de él (ver cerca del final de la página) para HTML correctamente sangrado. Varios mecanismos de plegado están unificados por lainterfaz fold-dwim . Consulte también Categoría HideStuff . - ^ El comandoimplementa el plegado de regiones seleccionadas por el usuario en Emacs
hide-region-hide
. - ^ La
set_selective_display
función puede usarse para ocultar líneas con sangría más allá de una cantidad especificada. - ^ STET puede haber sido el primer editor de texto que admitió el plegado [ cita requerida ]
Ver también
- La sección Funciones de programación del artículo Comparación de editores de texto para ver más editores que admiten el plegado
Referencias
- ^ "Plegado de datos en el editor hexadecimal HxD (listado como característica de RAM-Editor)" . Consultado el 30 de abril de 2007 .
- ^ La madre de todas las demostraciones, presentada por Douglas Engelbart (1968) , consultado el 29 de diciembre de 2019.
- ^ "Historia de ISPF" . Consultado el 27 de octubre de 2015 .
- ^ Atwood 2008 .
- ^ Publicación # 31 , Rob, julio de 2008
- ^ Grupo de Usuarios de Transputers de América del Norte. Conferencia (2a: 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 América del Norte, 18-19 de octubre de 1989, Durham, NC . Junta, John A., Universidad de Duke. Ámsterdam: IOS Press. pag. 85. ISBN 9051990278. OCLC 35478471 .
- ^ Cormie, David (1986). "Nota técnica de INMOS 03 - Introducción al TDS" (PDF) . transputer.net . Consultado el 19 de julio de 2019 .
- ^ "Outliners.com" . Archivado desde el original el 23 de diciembre de 2006 . Consultado el 27 de diciembre de 2006 .
- ^ LEXX - Un editor estructurado programable IBM Journal of Research and Development , Vol 31, No. 1, 1987, IBM Reprint número de orden G322-0151
- Atwood, Jeff (6 de julio de 2008). "El problema con el plegado de código" . Coding Horror : crítica del plegado de código, comentarios detallados sobre el uso.CS1 maint: posdata ( enlace )
enlaces externos
- ¿Qué es un editor plegable? por el autor del
fe
editor. - Descripción del editor de plegado utilizado en occam .