En informática y ciencias de la computación , la anidación [1] es cuando la información se organiza en capas o cuando los objetos contienen otros objetos similares. Casi siempre se refiere a estructuras autosimilares o recursivas en algún sentido.
Anidar puede significar:
En una hoja de cálculo, las funciones se pueden anidar unas dentro de otras, creando fórmulas complejas. El asistente de funciones de la aplicación Calc de OpenOffice.org permite navegar a través de múltiples niveles de anidación, [ se necesita más explicación ] permitiendo al usuario editar (y posiblemente corregir) cada uno de ellos por separado.
Por ejemplo:
=SI(SUMA(C8:G8)=0,"Y", "N")
En esta fórmula de Microsoft Excel , la función SUMA está anidada dentro de la función SI. Primero, la fórmula calcula la suma de los números en las celdas de C8 a G8. Luego, decide si la suma es 0 y muestra la letra Y si la suma es 0 y la letra N si no lo es.
Naturalmente, para permitir la resolución matemática de estas fórmulas encadenadas (o mejor: anidadas ), las expresiones internas deben ser evaluadas previamente, y esta dirección hacia afuera es esencial porque los resultados que devuelven las funciones internas se utilizan temporalmente como datos de entrada para las externas .
Debido a la posible acumulación de paréntesis en una sola línea de código, la edición y detección de errores (o depuración ) puede llegar a resultar algo complicada . Por eso, los entornos de programación modernos -así como los programas de hojas de cálculo- resaltan en negrita el par correspondiente a la posición de edición actual. El control (automático) del balanceo de los paréntesis de apertura y cierre se conoce como comprobación de coincidencia de llaves .
En los lenguajes de programación estructurada , la anidación está relacionada con el encerramiento de estructuras de control una dentro de otra, generalmente indicado a través de diferentes niveles de sangría dentro del código fuente , como se muestra en esta sencilla función BASIC :
función LookupCode ( sCode como cadena ) como entero dim iReturnValue como entero dim sLine , sPath como cadena sPath = "C:\Test.dsv" si FileExists ( sPath ) entonces abre sPath para entrada como # 1 hacer mientras no EOF ( 1 ) línea de entrada # 1 , sLine si sCode = left ( sLine , 3 ) entonces 'Acción(es) a realizar Fin si bucle cerrado # 1 Fin si LookupCode = iReturnValue fin de la función
En este pequeño y simple ejemplo, el bloque condicional “si... entonces... fin si” está anidado dentro del bucle “do while...”.
Algunos lenguajes como Pascal y Ada no tienen restricciones en cuanto a las declaraciones según el nivel de anidamiento, lo que permite subprogramas anidados con precisión o incluso paquetes anidados (Ada). A continuación se muestra un ejemplo de ambos (simplificado a partir de un caso real):
-- Deshacerse del problema de las variables globales (no se pueden usar en paralelo) -- de un conjunto de fuentes antiguas, sin la necesidad de cambiar la lógica o la estructura de ese código. -- El procedimiento Nesting_example_1 es tipo Buffer_type es una matriz ( rango de enteros <>) de enteros ; procedimiento Descomprimir ( comprimido : en Buffer_type ; descomprimido : fuera Buffer_type ) es -- Aquí están las fuentes heredadas, traducidas: paquete X_Globals es index_in , index_out : Integer ; -- *** ^ Estas variables son locales para Descomprimir. -- *** Ahora Descomprimir es seguro para tareas. fin X_Globals ; -- Métodos 1,2,3,... (especificaciones) paquete X_Method_1 es procedimiento Descomprimir_1 ; fin X_Method_1 ; -- Métodos 1,2,3,... (código) cuerpo del paquete X_Method_1 es uso X_Globals ; procedimiento Descomprimir_1 es empezar index_in := comprimido ' Primero ; -- Aquí, el código de descompresión, método 1 fin Decompress_1 ; fin X_Method_1 ; -- Fin de las fuentes heredadas empezar X_Method_1 . Descomprimir_1 ; fin Descomprimir ; prueba_de_entrada , prueba_de_salida : Tipo_de_búfer ( 1. . 10_000 );comenzar Descomprimir ( prueba_de_entrada , prueba_de_salida ); fin Anidamiento_ejemplo_1 ;
Las estructuras de datos anidadas también se encuentran comúnmente en programación.
En los lenguajes de programación funcional , como Lisp , existe una estructura de datos de lista y también una estructura de datos de átomos más simple . [2]
( ÁTOMOS )
Los átomos de la lista son A, T, O, M y S.
( ( ( L I S TA S ANIDADAS ) ( PUEDEN ) ( SER ) INNECESARIAMENTE ( C O M P L E J E ) )